to rollback or not rollback / Grundsatzfrage zu Transaction

04/03/2010 - 11:15 von Nicole Wagner | Report spam
Hallo User,


hier ist ein Codeschnipsel, das Matthias so freundlich war, zu posten:


IBTransaction.StartTransaction;
IBSQL.SQL.Text:='...'; // falls nicht schon im Designer eingetragen
IBSQL.ParamByName('...').As...:=...; // falls Parameter verwendet werden
IBSQL.ExecQuery;
// falls es SELECT war und Ergebnisse zurückkommen:
while not IBSQL.Eof do begin
...:=IBSQL.FieldByName('...').As...;
IBSQL.Next
end;
IBSQL.Close;
// Ende der Ergebnis-Auswertung
IBTransaction.Commit;


Mir faellt auf, dass es kein Rollback enthaelt.
Dazu meine Fragen:

1)
Liegt das daran, dass das Rollback in dem Schnipsel eben
weggeschnipselt war, weil damals nicht Kern der Frage?

2)
BRAUCHE ich ein Rollback UNBEDINGT aus Gruenden der Datenbankhygiene?
Oder reicht auch ein .Close, .active:=false, damit eine Transaktion
korrekt beendet wird?


Nicole
 

Lesen sie die antworten

#1 Peter Lange
04/03/2010 - 17:55 | Warnen spam
Am 04.03.2010 11:15, schrieb Nicole Wagner:
Hallo User,



Hallo,

hier ist ein Codeschnipsel, das Matthias so freundlich war, zu posten:


IBTransaction.StartTransaction;
IBSQL.SQL.Text:='...'; // falls nicht schon im Designer eingetragen
IBSQL.ParamByName('...').As...:=...; // falls Parameter verwendet werden
IBSQL.ExecQuery;
// falls es SELECT war und Ergebnisse zurückkommen:
while not IBSQL.Eof do begin
...:=IBSQL.FieldByName('...').As...;
IBSQL.Next
end;
IBSQL.Close;
// Ende der Ergebnis-Auswertung
IBTransaction.Commit;


Mir faellt auf, dass es kein Rollback enthaelt.



Das brauchts auch in diesem Fall nicht.

Dazu meine Fragen:

1)
Liegt das daran, dass das Rollback in dem Schnipsel eben
weggeschnipselt war, weil damals nicht Kern der Frage?

2)
BRAUCHE ich ein Rollback UNBEDINGT aus Gruenden der Datenbankhygiene?
Oder reicht auch ein .Close, .active:=false, damit eine Transaktion
korrekt beendet wird?



Das COMMIT schließt die Transaktion. Bevor Du die Query mit neuen
Parametern bestückst musst Du sie schließen (IBSQL.Close).
Ein ROLLBACK stellt den Ausgangszustand _vor_ der gestarteten
Transaktion wieder her, wenn bei der Verarbeitung etwas schief làuft.
Ist eigentlich nur sinnvoll, wenn Daten eingefügt oder veràndert werden
und dabei Fehler auftreten.

hth
Peter

Ähnliche fragen