Transaktionen in Access

Die Durchführung von Aktualisierungen am Datenbestand wird umso fehleranfälliger, je mehr Schritten die jeweilige Aktion beinhaltet und je mehr Personen gleichzeitig auf den betroffenen Datenbestand oder Teilmengen davon zugreifen können. Transaktionen sind eine Technik, die in beiden Fällen für Sicherheit sorgen und Inkonsistenzen vermeinden helfen.

Wofür Transaktionen

Stellen Sie sich das einfache Beispiel einer Bank vor, in der ein Mitarbeiter einen Betrag von beispielsweise 100 Euro von einem Konto auf ein anderes umbucht. Dazu sind zwei Schritte erforderlich: Man muss dem ersten Konto die 100 Euro abziehen und diese dem zweiten Konto zuschreiben. Diese beiden Vorgänge müssen untrennbar miteinander verbunden sein; die Durchführung nur eines der Vorgänge würde zu einer Inkonsistenz führen. Entweder gibt es dann in der Gesamtbilanz irgendwo 100 Euro zuviel oder zuwenig – je nachdem, welcher Vorgang schiefgelaufen ist.

Also benötigt man eine Technik, die mehrere Vorgänge „sammelt“ und entscheidet, ob die betreffenden änderungen durchzuführen sind oder verworfen werden.

Im Datenbankbereich lassen sich Operationen als Transaktion zusammenfassen. Mit einer bestimmten Anweisung legt man fest, wann die Transaktion beginnt. Sind alle zusammenhängenden Aktionen erledigt, beendet man die Transaktion mit einer weiteren Anweisung. Erst dann wirken sich die durchgeführten änderungen auf den Datenbestand aus. Es gibt noch eine weitere Möglichkeit, eine Transaktion zu beenden: Wenn nicht alle enthaltenen Aktionen erfolgreich durchgeführt werden konnten, bricht man die Transaktion ab. In dem Fall werden alle der bis dahin durchgeführten änderungen am Datenbestand verworfen.

Transaktionen in der Praxis

Das obige Beispiel setzt voraus, dass theoretisch die Möglichkeit besteht, dass eine der innerhalb der Transaktion durchgeführten Aktionen scheitern könnte – das kann durchaus passieren, wenn etwa das Konto, von dem der Betrag abgebucht werden soll, nicht die notwendige Deckung aufweist. Kann man nicht einfach vor dem Durchführen der beiden Vorgänge prüfen, ob die Voraussetzungen erfüllt sind und erst dann die entsprechenden Aktionen durchführen

Die Antwort lautet Jein. Wenn es sich bei dem System um eine Einzelplatzlösung handelt, wie es etwa bei einer Buchhaltungssoftware für Freiberufler der Fall sein dürfte (die sich in der Regel keinen Mitarbeiterstab für die Regelung ihrer Finanzen leisten), können sie locker auf die Verwendung von Transaktionen verzichten.

Wenn es sich aber tatsächlich um eine Software handelt, die in einer Bank oder ähnlichen Institutionen eingesetzt wird, greifen unter Umständen mehrere Leute gleichzeitig auf ein und dasselbe Konto zu. Damit diese Vorgänge sich nicht überlappen, sperrt der erste Vorgang die relevanten Tabellen oder Datensätze und gibt diese erst nach Beendigung der Transaktion wieder frei. Die verwendeten Sperrmechanismen hängen dabei von den aktuell für diese Datenbank festgelegten Einstellungen ab. Wenn Sie optimistische Sperrung anwenden, sperrt eine Transaktion die betroffenen Datensätze erst beim Abschließen der Transaktion; beim pessimistischen Sperren hingegen beginnt die Sperre sofort mit dem Bearbeiten der Daten.

Transaktionen und Aktionsabfragen

Transaktionen können sich auf eine oder mehrere Tabellen beziehen. Bereits eine Aktionsabfrage zum Erhöhen aller Preise in einer Artikel-Tabelle kann Gegenstand einer Transaktion werden, wenn mehrere Datensätze daran beteiligt sind. Sie müssen allerdings bestimmte Regeln beachten, um die in Access eingebauten Transaktionsmechanismen zu nutzen.

Zum Ausführen von Aktionsabfragen gibt es mehrere Möglichkeiten:

  • Ausführen der Abfrage per Menübefehl
  • Aufruf mit DoCmd.RunSQL
  • Aufruf mit CurrentDB.Execute

Die ersten beiden Varianten sind identisch; das DoCmd-Objekt verschafft dem Entwickler lediglich Zugriff auf die Menüelemente per VBA. Zu Beispielzwecken verwenden Sie eine Tabelle, die lediglich die beiden Felder ZahlID und Zahl enthält und unter dem Namen tblZahlen gespeichert ist.

Um Fehler während Transaktionen nachstellen zu können, stellen Sie die Feldgröße des Feldes Zahl auf Integer und die Gültigkeitsregel auf >0 ein – so kann dieses Feld nur positive Zahlen aufnehmen (s. Abb. 1). Fügen Sie dem Feld ein paar Datensätze wie beispielsweise in Abb. 2 hinzu.

pic001.png

Abb. 1: Beispieltabelle tblZahlen

pic002.png

Abb. 2: Beispielwerte in der Tabelle tblZahlen

Implizite Transaktion mit Aktionsabfragen und DoCmd.RunSQL

Rufen Sie dann im Direktfenster folgende Aktionsabfrage auf, die von den im Feld Zahl enthaltenen Werten die Zahl 100 subtrahiert:

DoCmd.RunSQL "UPDATE tblZahlen SET Zahl = Zahl - 100"

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access im Unternehmen:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 1.000 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar