Also mir scheint der ganze Code etwas strukturlos zu sein.
Im Prinzip muss eine Transaktion so ablaufen:
Delphi-Quellcode:
Connection.BeginTrans; // Schreibweise hängt von den Zugriffskomponenten ab
try
DoWork;
Connection.CommitTrans;
except
Connection.RollbackTrans;
end;
Dabei ist es sehr sinnvoll für
DoWork
tatsächlich eine Prozedure zu verwenden.
Man trennt so die eigentliche Arbeit von der Transaktionssteuerung.
Das heisst also entweder wird in
DoWork
eine
Exception geworfen => dann erfolgt ein Rollback.
Oder es wird keine
Exception geworfen => dann erfolgt kein Rollback sondern ein Commit.
Möchte man innerhalb der Procedure abbrechen, dann kann man z.B. einfach
Abort
aufrufen.