Betrifft: ab orgAnice SQL
Frage:
Transaktionen mit Database.Access
Lösung:
Es wird ausdrücklich empfohlen, für Transaktionen die neue Klasse Database.Access zu verwenden. Die aus Kompatibilitätsgründen zu orgAnice 3 verbleibenden Methoden Database.BeginTransaction, Database.Commit und Database.Rollback sollten nicht mehr verwendet werden!
Die Verwendung von Database.Access hat den Vorteil, dass nicht explizit ordnungsgemäß abgeschlossene Transaktionen (z. B. durch unbehandelte Fehler, oder fehlende .Rollback bzw. .Commit in der Fehlerbehandlung) automatisch zurückgefahren werden (es wird intern ein Rollback ausgeführt)
Beispiele:
With Database.Access
…
.BeginRead und/oder .BeginTransaction
…
.Commit
End With ‘ hier wird automatisch EndRead und/oder Rollback aufgerufen
oder:
Sub Test()
Dim pAccess As Access
Set pAccess = Database.Access
…
pAccess.BeginRead und/oder pAccess.BeginTransaction
…
evtl. pAccess.Commit
End Sub ‘ hier wird automatisch EndRead und/oder Rollback aufgerufen
In beiden Fällen wird auch bei unerwartetem Verlassen der Prozedur (z.B. Fehler, Exit Sub, …) EndRead und/oder Rollback aufgerufen.
Achtung! Der Code:
Database.Access.BeginTransaction
…
Database.Access.Rollback
funktioniert nicht!