Yürüyen Bakiye

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Yürüyen Bakiye

Mesaj gönderen NewMember »

Arkadaşlar forumdan araştırarak aşağıdaki kod ile kasa hesabında yürüyen bakiye uygulaması yaptım.
Ancak sorun şu ki sorgu ilk çalıştırıldığında doğru sonuç veriyor ancak sonra ki her çalıştırıldığında, programı kapatıp açmadan yani bakiye 2360 TL artıyor.Bu 2360 TL nin bir mantığınıda kuramadım.Ama sonuç olarak programı kapatır ve tekrar çalıştırısam doğru hesaplıyor.
Aşağıda örne kod ve 3 kez orgu çalıştırıncaki sonuçların ekran görüntüsü var.
Yardımcı olabilirseniz sevinirim.
Teşekkürler.

Kod: Tümünü seç

procedure TFrmKasa.Verileritazele;
var AAA,BBB:string;
begin
   AAA:='USER_TRANSACTION';
   BBB:='bky#';
    dm.KasaDataset.Close;
    dm.KasaDataset.SelectSQL.Clear;
    dm.KasaDataset.SelectSQL.Text :=
     'SELECT KASA.*,coalesce(CAST(rdb$get_context('+QuotedStr(AAA)+','+QuotedStr(BBB)+
     ' )AS numeric(17,2) ),0) as BAKIYE,'
     +'CAST(rdb$set_context('
     +QuotedStr(AAA)
     +','+QuotedStr(BBB)+',coalesce(CAST(rdb$get_context('+QuotedStr(AAA)+','+QuotedStr(BBB)+' )AS numeric(17,2) ),0)+ GIREN - CIKAN )AS numeric(17,2) )as SET_BAKIYE FROM KASA WHERE KASA.SIL=0';
	 dm.KasaDataset.Open;
end;


Resim


Resim



Resim
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: Yürüyen Bakiye

Mesaj gönderen ertank »

Sorgu öncesinde "context variable" bky# değerini sıfırlıyor musunuz?
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Yürüyen Bakiye

Mesaj gönderen NewMember »

Bunu nasıl yapacağım.
İşin doğrusu kod hakkında çok bir bilgim yok.O yüzden yapamadım belki.
Bu konuda bir örnek verebilirseniz çok memnun olurum.
Teşekkürler.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Yürüyen Bakiye

Mesaj gönderen NewMember »

Sorgu öncesi şöyle bir kod çalıştırıyorum ama yemiyor.

Kod: Tümünü seç

procedure TFrmKasa.BakiyeSifirla;
var
XQuery: TpFIBQuery;
AAA,BBB:string;
begin
  AAA:='USER_TRANSACTION';
  BBB:= 'bky#';
  XQuery := TpFIBQuery.Create(Application);
  XQuery.Database := dm.IBDatabase1;
  XQuery.Transaction := dm.UmumiTransaction;
  XQuery.Close;
  XQuery.SQL.Clear;
  XQuery.SQL.Text := 'SELECT rdb$set_context('+ QuotedStr(AAA) +','+QuotedStr(BBB)+' ,'+'0) from rdb$database;';
  XQuery.ExecQuery;
  DM.UmumiTransaction.CommitRetaining;
end;
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Yürüyen Bakiye

Mesaj gönderen NewMember »

@ertank çok teşekkürler.Üstteki kodda transaction farklı olduğundan olmuyormuş.
Kodu aşağıdaki gibi düzeltince oldu.
Sağolasın.

Kod: Tümünü seç

procedure TFrmKasa.BakiyeSifirla;
var
XQuery: TpFIBQuery;
AAA,BBB:string;
begin
  AAA:='USER_TRANSACTION';
  BBB:= 'bky#';
  XQuery := TpFIBQuery.Create(Application);
  XQuery.Database := dm.IBDatabase1;
  XQuery.Transaction := dm.KasaTransaction;
  XQuery.Close;
  XQuery.SQL.Clear;
  XQuery.SQL.Text := 'SELECT rdb$set_context('+ QuotedStr(AAA) +','+QuotedStr(BBB)+' ,'+'0) from rdb$database;';
  XQuery.ExecQuery;
  DM.KasaTransaction.CommitRetaining;//Doğru kod burası
end;
Cevapla