Operationen mit DataSet/Connection laufen doch immer nach dem gleichen Muster ab:
Delphi-Quellcode:
procedure Bar;
begin
DataSet.Append;
try
DataSet.FieldByName('foobar').Value := 'bar from foo';
DataSet.Post; // letzte Aktion im try..except Block
except
DataSet.Cancel;
raise;
end;
end;
procedure Foo;
begin
Connection.StartTransaction;
try
Bar;
... (beliebig viele)
Bar;
Connection.Commit; // letzte Aktion im try..except Block
except
Connection.Rollback;
raise;
end;
end;
Das kann man fast reflexartig einsetzen und hat damit wenig Probleme, egal ob sich dort ein Programmierfehler oder Eingabefehler reingemogelt hat.
Wirft der Aufruf von
Foo
keine
Exception, dann ist das eben erfolgreich ausgeführt worden.
Wenn man eine
Exception wirklich behandeln kann, dann greift man ein und sorgt dafür, dass die Prozedur ihre geforderte Arbeit erledigen kann oder wirft eine
Exception (die gleiche oder eine übersetzte, Hauptsache eine
Exception).
Das Protokollieren von Exceptions geht auch ganz anders (s.
TApplication.OnException) und damit soger wesentlich einfacher, weil es nur an einer Stelle definiert werden muss.
Ich denke aber wir driften gerade ab ... zum Thema
Exception gibt es hier (auch von mir) schon mehr als genug Beiträge ...