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?
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;
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 ?
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.
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;