For döngü devamlılık

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Dostk
Üye
Mesajlar: 144
Kayıt: 22 Ağu 2015 12:21

For döngü devamlılık

Mesaj gönderen Dostk »

Merhaba;

Listviewde tarih alanım var, bu tarih alanı yanlış girilmişse o hatalı kayıtın üstüne insert işlemi yapılarak yeni bir kayıt ile kullanıcıyı uyarıda bulunmak istiyorum.

Fakat for döngüsü hatalı ilk kayıt bulduktan sonra insert işlemini yapıp bir sonraki hatalı kayıta gitmiyor, tekrar ilk kayıta gidip geliyor.
Bu döngünün son satıra kadar hatalı kayıtları bulup insert işlemini yapıp yani döngünün son kayıta kadar devamlılığını nasıl sağlaya bilirim?

Kod: Tümünü seç

procedure TForm6.Button1Click(Sender: TObject);
var
  I, RowNum: Integer;
begin
  With ListViewPLS do
  begin
    for I := 0 to Items.Count - 1 do
    begin
      if StrToTimeDef(Items[I].SubItems[2], Now) = (Now) then
      begin
        RowNum := Items[I].Index;

        LI := Items.Insert(RowNum);
        LI.Caption := '';
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('HATALI GİRİŞ');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
      end;
    end;
  end;
end;
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: For döngü devamlılık

Mesaj gönderen varyemez »

en içerdeki if in end ini yanlış yere koynuşsun
boreas
Üye
Mesajlar: 120
Kayıt: 05 Tem 2007 12:39
Konum: Ankara

Re: For döngü devamlılık

Mesaj gönderen boreas »

Insert ettiğin zaman kontrol ettiğin satırın önüne koyuyorsun böyleyikle sırada kontrol edilecek satır yine senin hatalı satırın oluyor. I değerini insert ettikden sonra 1 arttırman lazım. Döngü değişkeni olduğu içinde bunu yapamazsın. Önce analiz edip hatalı satırları bir değişkene atsan ardından insert işlemi yapsan nasıl olur ?
....
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: For döngü devamlılık

Mesaj gönderen freeman35 »

while veya repeat until döngüleride var. döngü konularını incelemeni tavsiye ederim.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ertank
Kıdemli Üye
Mesajlar: 1652
Kayıt: 12 Eyl 2015 12:45

Re: For döngü devamlılık

Mesaj gönderen ertank »

Merhaba,

Daha önce @boreas ve @freeman35 tarafından da belirtilmiş olduğu üzere for döngüsü çalışmaya ilk başladığında değerleri okur. Her döngüde yeniden son değer ne diye kontrol etmez. Şöyle ki;
ListView içinde 3 kayıt varken döngü başlar ise ve siz ekstradan 2 kayıt daha ekler iseniz "for" tamamlandığında 5 kez dönmüş olmaz. Yine 3 kez dönmüş ve sadece ilk 3 kaydı kontrol etmiş olacaktır.

İstediğinizi elde etme adına "for" yerine "while" döngüsü kullanarak döngü değişkenini kendiniz kontrol etmeye çalışabilirsiniz. Ayrıca, kendi eklediğiniz "HATALI KAYIT" değerlerini kontrol dışı bırakmak bu şekilde daha kontrol edilebilir olacaktır. Test etmeden gönderdiğim aşağıdaki kodun fikir anlamında yardımcı olacağını ümit ediyorum.

Kod: Tümünü seç

procedure TForm6.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  With ListViewPLS do
  begin
    I := 0;
    while I < Items.Count do
    begin
      if StrToTimeDef(Items[I].SubItems[2], Now) = (Now) then
      begin
        LI := Items.Insert(Items[I].Index);
        // Bir satır ekledik. Eklediğimiz satır kontrol dışı olmalı.
        inc(I);

        LI.Caption := '';
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('HATALI GİRİŞ');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
        LI.SubItems.Add('');
      end;
      inc(I);  // Sonraki değer kontrol edilecek
    end;
  end;
end;
Kullanıcı avatarı
Dostk
Üye
Mesajlar: 144
Kayıt: 22 Ağu 2015 12:21

Re: For döngü devamlılık

Mesaj gönderen Dostk »

Emeği geçen herkese teşekkür ederim sorunu çözdüm...
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: For döngü devamlılık

Mesaj gönderen freeman35 »

nasıl çözdüğünüde yazsaydında başkalarıda faydalansaydı daha iyi olmaz mıydı?
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
Dostk
Üye
Mesajlar: 144
Kayıt: 22 Ağu 2015 12:21

Re: For döngü devamlılık

Mesaj gönderen Dostk »

Tarih ve index numaralarını da db kayıt yaptırarak daha sonrada, for döngüsü ile index numaralarına göre insert işlemi gerçekleştirdim.

Kod: Tümünü seç

for I := 0 to Items.Count - 1 do // 
Bu döngüyü kullandığımda sıralamada yanlış oluyordu bende döngüyü alttan yukarıya yaptırarak sonuca ulaştım

Kod: Tümünü seç

for I := Items.Count - 1 downto 0 do //
DÖNGÜ ALTDAN GELSİN
Cevapla