Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Firebird Over Kullanımı
#1
Wink 
Merhaba arkadaşlar.
Firebird Over komutu ile yeni tanıştım, biraz geçte olsa Smile
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şıyorumlightbulb.png

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;


KdKih3.jpg
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  firebird bağlantı hatası. Kamuran Alpkaya 17 19.146 06-08-2025, Saat: 14:20
Son Yorum: mcuyan
  FIREBIRD SIRALAMA Kral 10 1.934 15-10-2024, Saat: 19:04
Son Yorum: Kral
  Firebird bağlantı kopmaları (ZeosLib) boreas 0 773 12-06-2024, Saat: 16:08
Son Yorum: boreas
  Firebird Database Create Doğru mu? Altıner 2 1.311 02-05-2024, Saat: 11:00
Son Yorum: hi_selamlar
  pardusda dbeaver ıle fırebırd kullanımı hakkında sadikacar60 8 2.344 29-02-2024, Saat: 17:50
Son Yorum: Hayati



Konuyu Okuyanlar: 1 Ziyaretçi