Döngü Problemi (Nerde hata yapıyorum)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
macsonfor
Üye
Mesajlar: 118
Kayıt: 14 Haz 2004 04:59

Döngü Problemi (Nerde hata yapıyorum)

Mesaj gönderen macsonfor »

Tablo Şu şekilde (FIREBIRD)

Kod: Tümünü seç

ID
C_ID
ADI,
FIYATI
MIKTARI
TOPLAM (COMPUTED BY ALAN)
Hali hazırda örnek veriler şu şekilde:
Resim

Kod: Tümünü seç

while not Sorgu.Eof do
    begin
      if Odenen <  0 then
      begin
        MessageBox(0, 'Ödeyecek para kalmadığı için döngüden çıkıldı...', 'Dikkat', MB_ICONWARNING or MB_OK);
        Break;
      end else
      begin
        //İlk Kayit İçin Değerler Alınıyor
        Miktar := KAYDET.FieldByName('MIKTAR').AsCurrency;
        Fiyat := KAYDET.FieldByName('FIYATI').AsCurrency;
        Toplam := KAYDET.FieldByName('TOPLAM').AsCurrency;
        Odenen := edt_odeme.Value;
        ToplamLitre := (Odenen / Fiyat);
        KalanLitre := (KalanLitre - Miktar); // Ödeyeceğim Değer
        KalanPara := (KalanLitre * Fiyat); // Kalan Para
        //----------------------------------------------------------------------
        Guncelle := TIBQuery.Create(Self);
        Guncelle.Database := Data1.IBData;
        Guncelle.SQL.Add('UPDATE CARI_BORC_TOPLAM SET');
        Guncelle.SQL.Add('MIKTAR = :MIKTAR');
        Guncelle.SQL.Add('WHERE ID= :ID');
        Guncelle.ParamByName('MIKTAR').AsFloat := Miktar - (ToplamLitre - KalanLitre);
        Guncelle.ParamByName('ID').AsInteger := Sorgu.FieldByName('ID').AsInteger;
        Guncelle.ExecSQL;
        Guncelle.Transaction.CommitRetaining;
        edt_odeme.Value := KalanPara;
        Odenen := KalanPara; // Kalan Paranın Ödenen Değişkenine Aktarımı

        Sorgu.Next; // Sonraki Kayda Geç ve Kayıt Bilgilerini Tekrar Al
        //-------------------------------------------------
      end;
   end;
end;
Bu ödeme tablosuna ödeme yaptığım miktar 650 YTL döngüden önce toplamlarına göre kayıtları sıralıyorum büyükten küçüğe göre.

Ödeme Yapıldıktan sonraki durum ise böyle:
Resim

Bu kadar basit bir hatayı göremediğime inanamıyorum artık incelememeye karar verdim çünkü son 2 gündür bunun üstünde gidip gidip geliyorum.

Lütfen döngüyü inceleyin ben nerde hata yapıyorum...

Bu listeye göre benim ödemem gereken toplam para 900 ytl ama ben 650 ödüyorum 500 YTL olan kayıt sıfırlanacak geriye kalan 150 YTL 300 YTL olan kayıttan düşülecek hepsi bu kendimden utanıyorum...
Bilgi Paylaşıldıkça Çoğalır
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Döngü Problemi (Nerde hata yapıyorum)

Mesaj gönderen Battosai »

Üzülme bulunur çaresi... 8)
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Döngü Problemi (Nerde hata yapıyorum)

Mesaj gönderen conari »

macsonfor yazdı:kendimden utanıyorum...
Bence Bu kadar da değil ..
Biraz Kafanı dinle sadece...
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: Döngü Problemi (Nerde hata yapıyorum)

Mesaj gönderen aLonE CoDeR »

Selamlar.

Öncelikle şunu belirtmeliyim ki hiyerarşinde bahsettiğin sorundan önce daha önemli sorunlar var, örneğin döngünün her aşamasında yeniden Query nesnesi create etmen gibi.. Bu önemli noktadan sonra problem olduğunu düşündüğüm noktaya break point koyarak gelen değerleri kontrol etmelisin. Problem olduğunu düşündüğüm nokta;

Kod: Tümünü seç

Guncelle.ParamByName('MIKTAR').AsFloat := Miktar - (ToplamLitre - KalanLitre);
Buradaki değişkenleri esasında yukarıdan itibaren izlemek gerek. Bu kontrolün sonrasında çözümlenemezse tekrar değerlendirelim.

Kolay gele.
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

Re: Döngü Problemi (Nerde hata yapıyorum)

Mesaj gönderen palandoken »

aLonE CoDeR ' inde dediği gibi bence problem

Kod: Tümünü seç

        Guncelle.ParamByName('MIKTAR').AsFloat := Miktar - (ToplamLitre - KalanLitre); 
satırından kaynaklanıyor. Bu satırı birde aşağıdaki gibi dener misin ?

Kod: Tümünü seç

        Guncelle.ParamByName('MIKTAR').AsFloat := ToplamLitre - KalanLitre; 
Bence bir hatada şuradan kaynaklanabilir.Ödenen miktar 650 YTL ve fiyat ilk kayıt için 3 YTL sanırım.Sen toplam litreyi bulmak için ödenen / fiyat yapmışsın yani 650/3 oluyor.Bunun sonucu küsüratlı çıkar.Aşağıya veya yukarıya yuvarlasan bile bence bu ileride hesapları şaşırtır.

Kolay gelsin.
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
Cevapla