Event "vor Transaktions-Bestätigung (Commit)"
Event "vor Transaktions-Bestätigung (Commit)"
Der Aufruf erfolgt vor Abschluss (Commit) jeder Datenbank-Transaktion in BE. Mit DBRollBack() können an dieser Stelle die Änderungen explizit rückgängig gemacht werden. Durch Rückgabe von "False", kann dann eine Exception ausgelöst werden.
Wichtig: Die Rückgabe von "False" bzw. ein DBRollBack() sollte nur mit äußerster Vorsicht eingesetzt und ausführlich getestet werden, da es zu Folge-Programmfehlern auf Grund eines bewussten Abbruchs kommen könnte.
Beispiel
| nEvtNo:P1, oConnection:P2,
oOwner, aTables, aLocks, oTable, i, k, cText |
// Vor Bestätigung der Transaktion (vor Commit)
// Rückgabe : True, <Leer> = Transaktion bestätigen (Commit)
// False = Transaktion abbrechen (Rollback) und Fehler auslösen!
cText := '',
aTables := AdsGetConnectTables(oConnection),
// rein informativ: Owner-Klassen-Hierarchie ermitteln
oOwner := oConnection,
while not Empty(oOwner) do
cText := ClassName(oOwner) + '.' + cText,
oOwner:= GetOwner(oOwner),
end,
cText += crlf,
// Alle an der Transaktion beteiligten Tabellen ermitteln
for i := 1 to ALen(aTables) do
oTable := aTables[i],
// Alle potenziell veränderten Sätze jeder Tabelle ermitteln
aLocks := AdsGetUserLocks(oTable),
if ALen(aLocks) > 0 then
cText += oTable.AliasName + crlf,
for k := 1 to ALen(aLocks) do
cText += ' Satz-Nr.: ' + Str(aLocks[k]) + crlf,
next,
endif,
next,
// Ggf. Exception (kein direktes RollBack!) auslösen
Jn( 'Transaktion fortsetzen ?' + crlf + crlf + cText )