try
AbsTable1.First;
while not AbsTable1.Eof do
begin
AbsTable1.Delete;
AbsTable1.Next;
end;
finally
AbsTable1.EnableControls;
end;
Yukarıdaki kodda Delete satırından sonra Next satırı geliyor. Delete işleminden sonra kayıdı hemen sildiği için iki ileri kayda mı gider next ile? Dolayısıyla döngüde bir silme işleminden sonra bir kaydı es geçmiş olur muyum?
In dubio pro reo... Şüpheden sanık/özgürlük yararlanır...
var
x :integer
begin
if AbsTable1.Recordcount >1 then begin
AbsTable1.First;
for x:=1 to AbsTable1.recordcount -1 do
begin
AbsTable1.Delete;
end;
AbsTable1.refresh;
end;
end;
procedure CheckOfflines2Backup;
var
fsrc,fdest,tmp:string;
srclist:tstringlist;
begin
if frmDataModule.tb2.RecordCount<1 then exit;
try
srclist:=tstringlist.Create;
frmDataModule.tb2.First;
while (not frmDataModule.tb2.Eof) do begin
fsrc:=frmDataModule.tb2.FieldByName('pathtorecovery').AsWideString;
fdest:=frmDataModule.tb2.FieldByName('destinationpath').AsWideString;
tmp:=frmDataModule.tb2.FieldByName('filespath').AsWideString;
if isFileNetworkShare(fdest) then begin //ağ bilgisiyarı online ise
DoFolderChangedCopy(tmp,fdest);
if srclist.IndexOf(fsrc)=-1 then DoFolderChangedCopy(fsrc,fdest);
srclist.Add(fsrc);
System.SysUtils.DeleteFile(tmp);
end;
frmDataModule.tb2.Next;
end;
frmDataModule.tb2.Close;
frmDataModule.tb2.EmptyTable;
frmDataModule.tb2.Open;
finally
frmDataModule.tb2.refresh;
end;
end;
In dubio pro reo... Şüpheden sanık/özgürlük yararlanır...
Yukarıda yazdığım kod da işe yaramıyor. Yapmak istediğim döngü içindeyken bir koşul gerçekleştiğinde silmek, koşul gerçekleşmediğinde silmemek. Dolayısıyla koşul gerçekleştiğinde döngü içinde bir kaydı silersem ve next dersem bir kaydı es geçmiş oluyorum. Sorunum tam anlamıyla bu.
In dubio pro reo... Şüpheden sanık/özgürlük yararlanır...
Sonunda çözümü buldum. Koşul gerçekleştiğinde kaydı sildikten sonra next demememiz gerekiyor. Koşul gerçekleşmediğinde next demeliyiz. Kod şöyle:
procedure CheckOfflines2Backup;
var
fsrc,fdest,tmp:string;
srclist:tstringlist;
begin
if frmDataModule.tb2.RecordCount<1 then exit;
try
srclist:=tstringlist.Create;
frmDataModule.tb2.First;
while (not frmDataModule.tb2.Eof) do begin
fsrc:=frmDataModule.tb2.FieldByName('pathtorecovery').AsWideString;
fdest:=frmDataModule.tb2.FieldByName('destinationpath').AsWideString;
tmp:=frmDataModule.tb2.FieldByName('filespath').AsWideString;
if isFileNetworkShare(fdest) then begin //ağ bilgisiyarı online ise.. koşulumuz bu
DoFolderChangedCopy(tmp,fdest);
if srclist.IndexOf(fsrc)=-1 then DoFolderChangedCopy(fsrc,fdest);
srclist.Add(fsrc);
System.SysUtils.DeleteFile(tmp); frmDataModule.tb2.Delete; //buraya dikkat
end else //koşul gerçekleşmiyorsa sonraki kayda gidelim
frmDataModule.tb2.Next; //buraya dikkat
end;
finally
frmDataModule.tb2.refresh;
end;
end;
In dubio pro reo... Şüpheden sanık/özgürlük yararlanır...