Ein Refactoring könnte sinnvoll sein, hinterher sollte das so aussehen:
Delphi-Quellcode:
StartTransaction;
Try
PerformDataUpdate;
CommitTransaction;
Except
On E:
Exception Do Begin
RollbackTransaction;
HandleException(E);
End
End;
Und z.B.
Delphi-Quellcode:
Procedure PerformDataUpdate;
Var
i : Integer;
Begin
For i:=0 to X-1 Do
PerformSingleRecordUpdate(Data[i]);
End;
und
Delphi-Quellcode:
Procedure PerformSingleRecordUpdate(aRecord : TMyData);
Begin
If RecordExists(aRecord) then
PerformSQLUpdate(aRecord)
Else
PerformSQLInsert(aRecord);
End;
Delphi-Quellcode:
Function RecordExists (aREcord : TMyData) : Boolean;
Begin
Result := PerformSQLSelect('Select * from MyDatable Where PKField = '+aRecord.PkField).RecordsAffected > 0;
End;
usw.
PS: Wie machst Du das eigentlich mit gelöschten Daten?
Das Bild hängt schief.