Freigeben über


Workspace.CommitTrans-Methode (DAO)

Gilt für: Access 2013, Office 2013

Beendet die aktuelle Transaktion und speichert die Änderungen.

Syntax

Ausdruck . CommitTrans(Optionen)

Ausdruck Eine Variable, die ein Workspace-Objekt darstellt.

Parameter

Name

Erforderlich/optional

Datentyp

Beschreibung

Option

Optional

Long

In einem Microsoft Access-Arbeitsbereich können Sie die dbForceOSFlush-Konstante in CommitTrans einfügen. Dadurch wird das Datenbankmodul gezwungen, alle Aktualisierungen sofort auf den Datenträger zu leeren, statt sie temporär zu speichern. Ohne diese Option besteht die Gefahr, dass ein Benutzer direkt nach dem Aufrufen von CommitTrans durch das Anwendungsprogramm die Kontrolle übernimmt und den Computer ausschaltet, ohne dass die Daten auf einen Datenträger geschrieben wurden. Diese Option kann zwar die Anwendungsleistung beeinträchtigen, ist aber dennoch nützlich in Situationen, in denen der Computer heruntergefahren werden könnte, bevor zwischengespeicherte Aktualisierungen auf einem Datenträger gespeichert wurden.

Hinweise

Mithilfe der Transaktionsmethoden BeginTrans, CommitTrans und Rollback wird die Transaktionsverarbeitung während einer Sitzung verwaltet, die durch ein Workspace-Objekt definiert wurde. Sie verwenden diese Methoden mit einem Workspace-Objekt, wenn Sie eine Reihe von an den Datenbanken vorgenommenen Änderungen in einer Sitzung als eine Einheit verarbeiten möchten.

In der Regel verwenden Sie Transaktionen, um die Integrität Ihrer Daten aufrechtzuerhalten, wenn Sie sowohl Datensätze in zwei oder mehr Tabellen aktualisieren und sicherstellen müssen, dass Änderungen in allen Tabellen oder gar keiner Tabelle abgeschlossen (committet) wurden (Rollback). Wenn Sie beispielsweise Geld von einem Konto auf ein anderes überweisen, können Sie einen Betrag von einem Konto subtrahieren und den Betrag zu einem anderen hinzufügen. Wenn eine der Aktualisierungen fehlschlägt, sind die Konten nicht mehr ausgeglichen. Verwenden Sie die BeginTrans-Methode , bevor Sie den ersten Datensatz aktualisieren. Wenn bei einem nachfolgenden Update ein Fehler auftritt, können Sie die Rollback-Methode verwenden, um alle Updates rückgängig zu machen. Verwenden Sie die CommitTrans-Methode , nachdem Sie den letzten Datensatz erfolgreich aktualisiert haben.

Hinweis

Innerhalb eines Workspace-Objekts sind Transaktionen für Workspace immer global und nicht auf ein Connection- oder Database-Objekt beschränkt. Wenn Sie Operationen für mehrere Verbindungen oder Datenbanken innerhalb einer Workspace-Transaktion durchführen, wirkt sich das Auflösen der Transaktion (d. h. die Verwendung der CommitTrans- oder Rollback-Methode) auf alle Operationen für sämtliche Verbindungen und Datenbanken innerhalb dieses Arbeitsbereichs aus.

Nach Verwendung von CommitTrans können Sie an dieser Transaktion vorgenommene Änderungen nur dann rückgängig machen, wenn die Transaktion in einer anderen Transaktion geschachtelt ist, für die ein Rollback ausgeführt wurde. Wenn Sie Transaktionen schachteln, müssen Sie die aktuelle Transaktion auflösen, bevor Sie eine Transaktion auf einer höheren Schachtelungsebene auflösen können.

Wenn Sie gleichzeitige Transaktionen mit überlappenden, nicht geschachtelten Bereichen wünschen, können Sie zusätzliche Workspace-Objekte für die gleichzeitigen Transaktionen erstellen.

Wenn Sie ein Workspace-Objekt schließen, ohne ausstehende Transaktionen aufzulösen, wird automatisch ein Rollback für die Transaktionen ausgeführt.

Wenn Sie die CommitTrans- oder Rollback-Methode verwenden, ohne vorher die BeginTrans-Methode verwendet zu haben, tritt ein Fehler auf.

Einige ISAM-Datenbanken, die in einem Microsoft Access-Arbeitsbereich verwendet werden, unterstützen möglicherweise keine Transaktionen. In diesem Fall ist die Transactions-Eigenschaft des Database-Objekts oder recordset-Objekts False. Um sicherzustellen, dass die Datenbank Transaktionen unterstützt, überprüfen Sie den Wert der Transactions-Eigenschaft des Database-Objekts , bevor Sie die BeginTrans-Methode verwenden. Wenn Sie ein Recordset-Objekt verwenden, das auf mehr als einer Datenbank basiert, überprüfen Sie die Transactions-Eigenschaft des Recordset-Objekts .

Wenn ein Recordset vollständig auf Tabellen der Microsoft Access-Datenbank-Engine basiert, können Sie immer Transaktionen verwenden. Recordset-Objekte , die auf Tabellen basieren, die von anderen Datenbankprodukten erstellt wurden, unterstützen jedoch möglicherweise keine Transaktionen. Sie können beispielsweise keine Transaktionen in einem Recordset verwenden, das auf einer Paradox-Tabelle basiert. In diesem Fall ist die Transactions-EigenschaftFalse. Wenn die Datenbank oder das Recordset keine Transaktionen unterstützt, werden die Methoden ignoriert, und es tritt kein Fehler auf.

Wenn Sie über das Microsoft Access-Datenbankmodul auf ODBC-Datenquellen zugreifen, können Sie Transaktionen nicht schachteln.

Wenn Sie in ODBC-Arbeitsbereichen CommitTrans verwenden, ist der Cursor möglicherweise nicht mehr gültig. Zeigen Sie die Änderungen im Recordset-Objekt mithilfe der Requery-Methode an, oder schließen Sie das Recordset-Objekt, und öffnen Sie es erneut.

Hinweis

  • Die Leistung der Anwendung lässt sich oftmals dadurch verbessern, dass Operationen unterbrochen werden, die Datenträgerzugriff auf Transaktionsblöcke erfordern. So werden die Operationen zwischengespeichert, und die Zugriffe auf den Datenträger können deutlich verringert werden.
  • In einem Microsoft Access-Arbeitsbereich werden Transaktionen in einer Datei protokolliert, die in dem Verzeichnis gespeichert wird, das von der TEMP-Umgebungsvariable auf der Arbeitsstation angegeben wird. Wenn die Transaktionsprotokolldatei den verfügbaren Speicher auf Dem TEMP-Laufwerk erschöpft, löst die Datenbank-Engine einen Laufzeitfehler aus. An diesem Punkt wird bei Verwendung von CommitTrans eine unbestimmte Anzahl von Vorgängen committet, aber die verbleibenden nicht abgeschlossenen Vorgänge gehen verloren, und der Vorgang muss neu gestartet werden. Die Verwendung einer Rollback-Methode gibt das Transaktionsprotokoll frei und führt ein Rollback für alle Vorgänge in der Transaktion aus.
  • Wenn Sie den Klon eines Recordset-Objekts in einer ausstehenden Transaktion schließen, wird eine implizite Rollback-Operation verursacht.

Beispiel

Im folgenden Beispiel wird aufgezeigt, wie eine Transaktion in einem Data Access Objects (DAO)-Arbeitsbereich verwendet werden kann.

Der Beispielcode stammt von:Microsoft Access 2010 Programmer's Reference.

    Public Sub TransferFunds()
        Dim wrk As DAO.Workspace
        Dim dbC As DAO.Database
        Dim dbX As DAO.Database
        
        Set wrk = DBEngine(0)
        Set dbC = CurrentDb
        Set dbX = wrk.OpenDatabase("e:\books\acc2007vba\myDB.accdb")
        
        On Error GoTo trans_Err
        
        'Begin the transaction
        
        wrk.BeginTrans
        
        'Withdraw funds from one account table
        dbC.Execute "INSERT INTO tblAccounts ( Amount, Txn, TxnDate ) SELECT -20, 'DEBIT', Date()", dbFailOnError
    
        'Deposit funds into another account table
        dbX.Execute "INSERT INTO tblAccounts ( Amount, Txn, TxnDate ) SELECT 20, 'CREDIT', Date()", dbFailOnError
        
        'Commit the transaction
        wrk.CommitTrans dbForceOSFlush
        
    trans_Exit:
        'Clean up
        wrk.Close
        Set dbC = Nothing
        Set dbX = Nothing
        Set wrk = Nothing
        Exit Sub
        
    trans_Err:
        'Roll back the transaction
        wrk.Rollback
        Resume trans_Exit
        
    End Sub