SP de Bakiye hesaplama

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
habilkader
Üye
Mesajlar: 61
Kayıt: 14 Eki 2006 11:11

SP de Bakiye hesaplama

Mesaj gönderen habilkader »

S.A
2 gündür formun altını üstüne getirdim ancak aradığımın tam karşılığını bulamadım. FB 2.0 da hazırlamış olduğum table in ALACAK ve BORC adında 2 alanı var İstenilen cari hesaba ait durumunu görmek için toplamborc ve toplamalacağı bularak geri döndüren bir SP hazırladım Ardından delphi tarafından bu TIBQuery nesnesi ile bu SP yi çağırıyorum. Yine aynı IBQuerynesnesinde BAKIYE adında TCurrencyField oluşturyor ve OnCalcFields olayında BAKIYE=BORC-ALACAK diyerek bakiyeyi hesaplatıyor ve program da kullnıyoyorum.

Yapmak istediğim şey ise bakiye hesaplamasını delphi tarafında değilde SP 'de yapmak ancak bir türlü beceremedim.
SP ye ait DLL kodları aşağıdadır.

Kod: Tümünü seç

REATE PROCEDURE SP_CARIHESAPLAR
RETURNS(
  TOPLAMALACAK DECIMAL(18, 2),
  TOPLAMBORC DECIMAL(18, 2),
  PARAKODU SMALLINT,
  CARIKODU VARCHAR(50) CHARACTER SET WIN1254)
AS
BEGIN
   FOR
       SELECT Sum(Fatura.ALACAK) AS TOPLAMALACAK, Sum(Fatura.BORC) AS ToplamBORC, Fatura.ParaKodu,CariKartlar.CariKodu
       FROM CariKartlar RIGHT JOIN Fatura ON CariKartlar.CariKodu = Fatura.CariKod
       WHERE CariKartlar.CariKodu =:CARIKODU
       group by  Fatura.ParaKodu,CariKartlar.CariKodu
       
       INTO :TOPLAMALACAK, :TOPLAMBORC, :PARAKODU, :CARIKODU
       
   DO
 SUSPEND;
END;
Kullanıcı avatarı
cihan
Üye
Mesajlar: 65
Kayıt: 02 Ağu 2005 03:34

Mesaj gönderen cihan »

CREATE PROCEDURE SP_CARIHESAPLAR
RETURNS(
TOPLAMALACAK DECIMAL(18, 2),
TOPLAMBORC DECIMAL(18, 2),
PARAKODU SMALLINT,
CARIKODU VARCHAR(50) CHARACTER SET WIN1254,
BAKIYE DECIMAL(18, 2))
AS
BEGIN
FOR
SELECT Sum(Fatura.ALACAK) AS TOPLAMALACAK, Sum(Fatura.BORC) AS ToplamBORC, Fatura.ParaKodu,CariKartlar.CariKodu
FROM CariKartlar RIGHT JOIN Fatura ON CariKartlar.CariKodu = Fatura.CariKod
WHERE CariKartlar.CariKodu =:CARIKODU
group by Fatura.ParaKodu,CariKartlar.CariKodu

INTO :TOPLAMALACAK, :TOPLAMBORC, :PARAKODU, :CARIKODU

DO
begin
if toplamalacak>toplamborc then bakiye=bakiye-toplamalacak;
if toplamalacak<toplamborc then bakiye=bakiye+toplamborc;
end

SUSPEND;
END;

gibi birşeyler sanırım istediğin
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

bunun için triger kullanın ve


Tablenin After insert trigerine : execute procedure Toplam_Bakiye(new.AlanAdi);

After Update ve Delete trigerine de : execute procedure Toplam_Bakiye(old.AlanAdi);

// Eğer master detay ilişkili tablo kullanıyorsanız alan adını where şartı ile master alana göre sorgulayın.
Cevapla