Verwenden von Transaktionen in einem DAO-Recordset
Eine Transaktion ist eine Gruppe von Vorgängen, die gebündelt und als einzelne Arbeitseinheit behandelt werden. Die Arbeit in einer Transaktion muss als Ganzes abgeschlossen werden; Wenn ein Teil der Transaktion fehlschlägt, schlägt die gesamte Transaktion fehl. Transaktionen bieten dem Entwickler die Möglichkeit, die Datenintegrität zu erzwingen. Da mehrere Datenbankvorgänge in einer einzelnen Einheit gebündelt sind, die als Ganzes erfolgreich sein müssen oder fehlschlagen müssen, kann die Datenbank keinen inkonsistenten Zustand erreichen. Transaktionen sind in den meisten Datenbankverwaltungssystemen üblich.
Das am häufigsten verwendete Beispiel einer Transaktionsverarbeitung ist die Verwendung eines Bankautomaten. Die Geldausgabe und das Belasten des Benutzerkontos werden als logische Arbeitseinheit angesehen und in einer Transaktion zusammengefasst: Das Geld wird nur ausgegeben, wenn das Konto belastet werden kann. Durch das Verwenden einer Transaktion wird der gesamte Vorgang entweder erfolgreich oder gar nicht ausgeführt. Auf diese Weise bleibt der Status der Geldautomaten-Datenbank konsistent.
Wenn Sie sicherstellen möchten, dass jede Operation in einer Gruppe von Operationen erfolgreich ist, bevor für alle Operationen ein Commit ausgeführt wird, empfiehlt sich die Verwendung von Transaktionen. Beachten Sie, dass alle Transaktionen untereinander unsichtbar sind. Eine Transaktion kann also nicht sehen, inwiefern die Datenbank durch eine andere Transaktion aktualisiert wurde, bis für diese Transaktion ein Commit ausgeführt wird.
Hinweis
Das Verhalten von Transaktionen bei Access-Datenbanken unterscheidet sich vom Verhalten bei ODBC-Datenquellen, wie SQL Server. Wenn z. B. eine Datenbank mit einem Dateiserver verbunden ist und der Dateiserver angehalten wird, bevor für transaktionsbedingte Änderungen ein Commit ausgeführt werden konnte, kann sich die Datenbank plötzlich in einem inkonsistenten Status befinden. Wenn Sie komplette und dauerhafte Transaktionsunterstützung benötigen, sollten Sie die Verwendung einer Client/Server-Architektur in Betracht ziehen.
Die Access-Datenbank-Engine unterstützt Transaktionen über die DAO-Methoden BeginTrans, CommitTrans und Rollback des Workspace-Objekts .
Im folgenden Code wird die Position aller Vertriebsmitarbeiter (Sales Representative) in der Tabelle „Employees“ (Personal) geändert. Nachdem die BeginTrans-Methode eine Transaktion gestartet hat, die alle Änderungen an der Tabelle „Employees“ isoliert, werden die Änderungen über die CommitTrans-Methode gespeichert. Beachten Sie, dass Sie die Rollback -Methode verwenden können, um mit der Update -Methode gespeicherte Änderungen rückgängig zu machen.
Sub ChangeTitle()
Dim wrkCurrent As DAO.Workspace
Dim dbsNorthwind As DAO.Database
Dim rstEmployee As DAO.Recordset
On Error GoTo ErrorHandler
Set wrkCurrent = DBEngine.Workspaces(0)
Set dbsNorthwind = CurrentDB
Set rstEmployee = dbsNorthwind.OpenRecordset("Employees")
wrkCurrent.BeginTrans
Do Until rstEmployee.EOF
If rstEmployee!Title = "Sales Representative" Then
rstEmployee.Edit
rstEmployee!Title = "Sales Associate"
rstEmployee.Update
End If
rstEmployee.MoveNext
Loop
If MsgBox("Save all changes?", vbQuestion + vbYesNo) = vbYes Then
wrkCurrent.CommitTrans
Else
wrkCurrent.Rollback
End If
rstEmployee.Close
dbsNorthwind.Close
wrkCurrent.Close
Set rstEmployee = nothing
Set dbsNorthwind = Nothing
Set wrkCurrent = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
Wenn Sie Transaktionen verwenden, sind alle Datenbanken und Recordset-Objekte im angegebenen Workspace-Objekt betroffen. Transaktionen sind global für den Arbeitsbereich, nicht für eine bestimmte Datenbank oder recordset. Wenn Sie Vorgänge für mehrere Datenbanken oder innerhalb einer Arbeitsbereichstransaktion ausführen, wirken sich die Methoden Commit und Rollback auf alle Objekte aus, die während der Transaktion innerhalb dieses Arbeitsbereichs geändert wurden.
Sie können auch die Methoden BeginTrans, CommitTrans und Rollback mit dem DBEngine-Objekt verwenden. In diesem Fall wird die Transaktion auf den Standardarbeitsbereich DBEngine.Workspaces(0)
angewendet.
Support und Feedback
Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Feedback senden und anzeigen für