Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2005.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Transaktionen in Access

André Minhorst, Duisburg

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 vermeiden helfen.

Hinweis

Die Beispieldatenbanken zu diesem Beitrag heißen Transaktionen97.mdb für Access 97 und Transaktionen00.mdb für Access 2000 und höher. Sie finden die Datenbanken auf der Heft-CD oder im Internet unter http://www.access-im-unternehmen.de unter dem Shortlink 275. Nützliche Informationen gibt es im Beitrag Undo in Formularen und Unterformularen, Shortlink 276. (

Wozu Transaktionen?

Stellen Sie sich das einfache Beispiel einer Bank vor, in der ein Mitarbeiter einen Betrag von beispielsweise EUR 100,- von einem Konto auf ein anderes umbucht. Dazu sind zwei Schritte erforderlich: Man muss vom ersten Konto die EUR 100,- abziehen und diese dem zweiten Konto gutschreiben. Diese beiden Vorgänge müssen untrennbar miteinander verbunden sein; die Durchführung nur eines Vorgangs würde zu einer Inkonsistenz führen. Entweder gibt es dann in der Gesamtbilanz irgendwo EUR 100,- zu viel oder zu wenig - 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 oder zu verwerfen sind. 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 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 die 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
  • Abb. 1: Beispieltabelle tblZahlen

    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 nachfolgend einen Fehler während einer Transaktionen provozieren 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.

    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"

    Mit der beschriebenen Beispielkonfiguration und obiger Anweisung sollten Sie eine Meldung wie in Abb. 3 erhalten (zuvor erscheint - je nach der Einstellung der Access-Optionen - noch eine Anfrage, ob Sie die Aktionsabfrage überhaupt durchführen möchten).

    Die Meldung deutet darauf hin, dass Access zwar schon versucht hat, die Abfrage durchzuführen, aber dies noch nicht getan hat - sonst ließe sich diese nicht einfach rückgängig machen. Mit einem Klick auf Ja führen Sie alle Teile der Abfrage durch, die nicht zu einem Fehler führen, mit einem Klick auf Nein brechen Sie die Transaktion ab.

    Allerdings lösen Sie damit einen Fehler aus (s. Abb. 4), um den Sie sich mit einer entsprechenden Fehlerbehandlung kümmern müssen.

    Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

    Sind Sie Abonnent?Jetzt einloggen ...
     

    Kompletten Artikel lesen?

    Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

    E-Mail:

    © 2003-2015 André Minhorst Alle Rechte vorbehalten.