Merhaba arkadaşlar.
Firebird Over komutu ile yeni tanıştım, biraz geçte olsa
Güzel bir komutmuş. Cari hesapta, kasada ve bankada kullandığım satırdaki bakiye hesaplamasını OVER dan önce Firebird'de prosedür yazarak yapıyordum, artık 'sum(TAHSILAT-TEDIYE) over (order by TARIH, SAAT, ISLEMKOD) as Bakiye' yetiyor.
Benim gibi gecikenlere örnek olması için Delphi kullanımını ve Firebird'de yaptığım prosedürü paylaşıyorum
FIREBIRD'DE PROSEDÜR İLE BAKİYE HESAPLAMA
DELPHI'DE OVER KOMUTU İLE BAKİYE HESAPLAMA
Firebird Over komutu ile yeni tanıştım, biraz geçte olsa

Güzel bir komutmuş. Cari hesapta, kasada ve bankada kullandığım satırdaki bakiye hesaplamasını OVER dan önce Firebird'de prosedür yazarak yapıyordum, artık 'sum(TAHSILAT-TEDIYE) over (order by TARIH, SAAT, ISLEMKOD) as Bakiye' yetiyor.
Benim gibi gecikenlere örnek olması için Delphi kullanımını ve Firebird'de yaptığım prosedürü paylaşıyorum
FIREBIRD'DE PROSEDÜR İLE BAKİYE HESAPLAMA
COMMIT WORK; SET AUTODDL OFF; SET TERM ^ ; /* Stored procedures */ CREATE PROCEDURE "BAKIYE_HESAP_KASA_TARIH" ( "KASAKOD_IN" INTEGER ) AS BEGIN EXIT; END ^ ALTER PROCEDURE "BAKIYE_HESAP_KASA_TARIH" ( "KASAKOD_IN" INTEGER ) AS DECLARE VARIABLE TAHSILAT_IN DOUBLE PRECISION; DECLARE VARIABLE TEDIYE_IN DOUBLE PRECISION; DECLARE VARIABLE ISLEMKOD_IN INT; DECLARE VARIABLE BAKIYE_IN DOUBLE PRECISION; DECLARE VARIABLE CARIKOD_IN INT; BEGIN FOR SELECT TAHSILAT,TEDIYE,ISLEMKOD,CARIKOD FROM KASAISLEM WHERE KASAKOD = :KASAKOD_IN AND SISTEM <> 2 ORDER BY TARIH , SAAT , ISLEMKOD INTO :TAHSILAT_IN,:TEDIYE_IN,:ISLEMKOD_IN,:CARIKOD_IN DO BEGIN IF (TAHSILAT_IN >0) THEN BAKIYE_IN = BAKIYE_IN + TAHSILAT_IN; IF (TEDIYE_IN >0) THEN BAKIYE_IN = BAKIYE_IN - TEDIYE_IN; IF (BAKIYE_IN < 0) THEN UPDATE KASAISLEM SET BAKIYE = :BAKIYE_IN* -1,DURUM = -1 WHERE ISLEMKOD = :ISLEMKOD_IN; ELSE IF (BAKIYE_IN = 0) THEN UPDATE KASAISLEM SET BAKIYE =0,DURUM = 0 WHERE ISLEMKOD = :ISLEMKOD_IN; ELSE IF (BAKIYE_IN > 0) THEN UPDATE KASAISLEM SET BAKIYE = :BAKIYE_IN,DURUM = 1 WHERE ISLEMKOD = :ISLEMKOD_IN; END EXIT; END ^ SET TERM ; ^ COMMIT WORK; SET AUTODDL ON;
DELPHI'DE OVER KOMUTU İLE BAKİYE HESAPLAMA
procedure TFKasalar.TariheGoreSiralaClick(Sender: TObject);
var
yer: TBookmark;
i: integer;
begin
yer := DMKasa.KasaHareketIBQ.GetBookmark;
DMKasa.KasaHareketIBQ.DisableControls;
DMKasa.KasaHareketIBQ.SQL.Text := 'select ';
DMKasa.KasaHareketIBQ.SQL.Add ('ISLEMKOD, KASAKOD, TARIH,CARIKURU, ISLEMKURU, TEDIYE, TAHSILAT, D_TEDIYE,');
DMKasa.KasaHareketIBQ.SQL.Add ('D_TAHSILAT,SAAT, KASAISLEMNO, ISLEMTUR, ACIKLAMA, BAKIYE,');
DMKasa.KasaHareketIBQ.SQL.Add ('C_DURUM, MAKBUZNO ,C_CARIADI , C_GGMERKEZI, C_PERSONEL, C_KULLANICIADI,');
DMKasa.KasaHareketIBQ.SQL.Add (' sum(TAHSILAT-TEDIYE) over (order by TARIH asc, SAAT ASC,ISLEMKOD asc) as Bakiye');
DMKasa.KasaHareketIBQ.SQL.Add (' from KASAISLEM ');
DMKasa.KasaHareketIBQ.SQL.Add('Where KASAKOD=:KASAKOD AND SISTEM<>2');
DMKasa.KasaHareketIBQ.SQL.Add('Order by TARIH ASC,saat ASC, ISLEMKOD');
DMKasa.KasaHareketIBQ.Open;
DMKasa.KasaHareketIBQ.GotoBookmark(yer);
DMKasa.KasaHareketIBQ.EnableControls;
end;

