program sonsuz döngüye giriyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

program sonsuz döngüye giriyor

Mesaj gönderen tayipk »

merhaba arkadaşlar porjemde stok sayım ekranı yaptım mantık şöyle ki önce sayım ürünlerimi sayim tablosuna atıyorum sonra da kayıt işlemi gerçekleştirince stokhar tabloma atıp burdan stok kartımdaki giriş çıkış ve bakiye değerlerimi kontrol edyorum. sayim tablomda Kayit_durumu demi olduğum bir alanım var bu neyi kontrol ediyor derseniz hemen izah edeyim kullanıcı sayımı yarım bırakmış olabilir yada farkında olmadan sayım bitmeden kaydet demil olabilir bu noktada kayıt yapılan her sayım satırının Kayit_durumu değerini 1 yapıyorum ki aynı sayım tekrar kayıt edildiğinde Kayit_durumu değeri 1 olanlar mükerrer kayıt olmasın. şimdi aşağıda paylaşacağım kodda eğer kayit_durumu=0 ise hiç bir sorun yok sayim tablomdaki bütün ürünlerimi stokhar tabloma göçnderiyor ve hesaplama işlemlerini yapıyor ama kayıtların arasında eğer bir tanesinin kayıt sırası hiç farketmiyor Kayit_durumu değeri 1 ise program sonsuz dönügye giriyor ve kayit_durumu değeri 1 olan ürün kartına ait stokhar tabloma sonsıuz kayıt açıyor. kodlarım aşağıdadır arkadaşlar yardımınız rica ediyorum nerde hata yapıyorum anlayamadım.
Kod :

Kod: Tümünü seç

if qsayim.RecordCount>0 then
begin
  soru:=application.MessageBox('SAYIM KAYDI YAPILACAKTIR ONAYLIYORMUSUNUZ','ONAY',MB_YESNO+MB_ICONINFORMATION);
  case soru of
    6:
    begin
     ProgressBar1.Visible:=True;
     ProgressBar1.Max:=qsayim.RecordCount;
     while not QSayim.Eof do
     begin
     if QSayimKayit_Durumu.AsInteger=0 then
     begin
       QKayit.Open;
       qkayit.Insert;
       QKayitUrun_adi.AsString:=QSayimUrun_Adi.AsString;
       ShowMessage(QSayimUrun_Adi.AsString);
       QKayitUrun_id.AsInteger:=QSayimUrun_id.AsInteger;
       QKayitMarka.AsString:=QSayimMarka.AsString;
       QKayitModel.AsString:=QSayimModel.AsString;
       QKayitmarka_id.AsString:=QSayimmarka_id.AsString;
       QKayitmodel_id.AsString:=QSayimmodel_id.AsString;
       QKayitIslem_tipi.AsString:='SF';
       QKayitAdet.AsFloat:=0;
       QKayitAlıis_tutari.AsFloat:=0;
       QKayitSatis_tutari.AsFloat:=0;
       QKayitBirim_alisfiyat.AsFloat:=0;
       QKayitBirim_satisfiyatı.AsFloat:=0;
       QKayitAlisKdv_Tutar.AsFloat:=0;
       QKayitSatisKdv_Tutar.AsFloat:=0;
       QKayitSatisAra_Toplam.AsFloat:=0;
       QKayitAlisAra_Toplam.AsFloat:=0;
       QKayitKDV.AsInteger:=QSayimKDV.AsInteger;
       QKayitislem_id.AsInteger:=QSayimSayim_No.AsInteger;
       QKayitFatura_Tarihi.AsDateTime:=QSayimSayim_Tarihi.AsDateTime;
       QKayitIade_KDV.AsFloat:=0;
       QKayitIade_tutari.AsFloat:=0;
       QKayitIadeBirim_Fiyat.AsFloat:=0;
       QKayitGiren.AsFloat:=QSayimSayim_Miktar.AsFloat;
       QKayitCikan.AsFloat:=0;
       QKayitiskonto.AsFloat:=0;
       QKayitAciklama.AsString:='Stok Sayım Fişi';
       QKayitmaliyet.AsFloat:=QSayimMaliyet.AsFloat;
       QKayit.Post;
       QKayit.Close;
     // sayim satırının kayıt durumu 1 yapılıyor
       ADOQuery2.Close;
       ADOQuery2.SQL.Clear;
       ADOQuery2.SQL.Text:='update tsayim set kayit_durumu=1 where urun_id='+IntToStr(QSayimUrun_id.AsInteger)+'';
       ADOQuery2.ExecSQL;
       ProgressBar1.Position:=ProgressBar1.Position+1;
       QSayim.Next;
     end else
  // ARKADAŞLAR ÖZELLİKLE BURAYA DİKKAT EDİN HATA BURDA DİYE DÜŞÜNÜYORUM AMA BULAMIYORUM.
     if QSayimKayit_Durumu.AsInteger=1 then
     begin
      ProgressBar1.Position:=ProgressBar1.Position+1;
      QSayim.Next;
     end;
     end;
     ShowMessage('STOK SAYIM KAYDI BAŞARILI BİR ŞEKİLDE TAMAMLANMIŞTIR');
     ProgressBar1.Position:=0;
     ProgressBar1.Visible:=False;
    end;
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: program sonsuz döngüye giriyor

Mesaj gönderen unicorn64 »

QSayimKayit_Durumu 0 ve 1 den farklı ise QSayim.Next; çalışmadığından sonsuz döngüye giriyordur
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Cevapla