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
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 SISTEM2');
*DMKasa.KasaHareketIBQ.SQL.Add('Order by TARIH ASC,saat ASC, ISLEMKOD');
*DMKasa.KasaHareketIBQ.Open;
*DMKasa.KasaHareketIBQ.GotoBookmark(yer);
*DMKasa.KasaHareketIBQ.EnableControls;
end;
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 SISTEM2');
*DMKasa.KasaHareketIBQ.SQL.Add('Order by TARIH ASC,saat ASC, ISLEMKOD');
*DMKasa.KasaHareketIBQ.Open;
*DMKasa.KasaHareketIBQ.GotoBookmark(yer);
*DMKasa.KasaHareketIBQ.EnableControls;
end;
Misafirler için gizlenen link, görmek için
Giriş yap veya üye ol.