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.