window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Transaktionen in Access

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Wenn Sie Datenbankaktionen per Code ausführen, also beispielsweise mit der Methode Execute des Database-Objekts oder mit den DAO-Methoden AddNew oder Edit, setzen Sie in der Regel immer nur eine einzige Anweisung ab und ändern so Daten oder auch Tabellen. Was aber, wenn Sie mehrere Aktionen ausführen wollen, die nur dann ausgeführt werden sollen, wenn die Ausführung jeder einzelnen Aktion erfolgreich ist Dann kommen Transaktionen ins Spiel. Hierbei handelt es sich um einen Kontext über eine oder mehrere Datenbankänderungen, der nach dem Ausführung aller änderungen entweder komplett abgeschlossen oder verworfen werden kann.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1703_Transaktionen.accdb.

Möglichkeiten der änderung von Daten

Unter DAO gibt es verschiedene Möglichkeiten, per Code Daten zu ändern. Die erste Variante nutzt etwa die AddNew-Methode, um einen neuen Datensatz zu einem Recordset hinzuzufügen und schließt den Vorgang nach dem Festlegen der Feldinhalte mit der Update-Methode ab:

Public Sub Datenaenderungen()
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Set db = CurrentDb
    Set rst = db.OpenRecordset("tblKategorien", dbOpenDynaset)
    rst.AddNew
    rst!Kategoriename = "Neue Kategorie"
    rst.Update
End Sub

Hier gibt es keine offenen Fragen: Wenn keine Fehlermeldung erscheint, speichert die Prozedur den Datensatz wie gewünscht in der Datenbank. Ein Fehler tritt beispielsweise auf, wenn Sie zwei Mal den gleichen Wert für das Feld Kategoriename in der Datenbank speichern und den eindeutigen Index für dieses Feld verletzen. In diese Fall wird der Datensatz dann einfach nicht gespeichert.

Etwas anders sieht es aus, wenn Sie die Aufgaben mit der Execute-Methode ausführen und dazu eine entsprechende SQL-Abfrage formulieren. Ein ganz einfaches Beispiel sieht wie folgt aus:

Public Sub NeuerDatensatzExecute()
    Dim db As DAO.Database
    Set db = CurrentDb
    db.Execute "INSERT INTO tblKategorien          (Kategoriename) VALUES('Noch eine Kategorie')"
End Sub

Auch hier gilt: Der Datensatz wird entweder eingetragen oder auch nicht. über letzteres werden wir allerdings nicht informiert, denn wir haben den Wert dbFailOnError für den zweiten Parameter der Execute-Methode vergessen. Erst damit setzt es eine Fehlermeldung, wenn Sie beispielsweise versuchen, den gleichen Kategorienamen zwei Mal hintereinander einzufügen (siehe Bild 1).

Fehlermeldung beim Anlegen eines bereits vorhandenen Kategorienamens

Bild 1: Fehlermeldung beim Anlegen eines bereits vorhandenen Kategorienamens

Probleme mit mehreren betroffenen Datensätzen

Nun schauen wir uns an, was passiert, wenn wir mit einer Aktionsabfrage gleich mehrere Datensätze ändern wollen – beispielsweise, indem wir versuchen, alle Einzelpreise in der Tabelle tblArtikel um 10 EUR zu senken:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar