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 2/2012.

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

Zusammenfassung

Versehen Sie Tabellen ab Access 2010 mit einer Art Trigger, um Restriktionen für den Datenzugriff zu definieren.

Techniken

Tabellen, Makros, VBA

Voraussetzungen

Access 2010

Beispieldateien

RestriktionenMitDatenmakros.accdb

Shortlink

www.access-im-unternehmen.de/823

Restriktionen mit Datenmakros

André Minhorst, Duisburg

Ab Access 2010 können Sie mit den Datenmakros auf eine triggerähnliche Technik zugreifen. Damit definieren Sie direkt in der Tabelle, was beim Hinzufügen, Ändern oder Löschen von Daten geschehen soll - unabhängig davon, ob diese Änderung direkt in der Tabelle, über ein Formular, per Aktionsabfrage oder auch per VBA angestoßen wurde. Dieser Beitrag zeigt, wie Sie die Datenmakros nutzen können.

Die Grundlagen zu Datenmakros haben wir bereits im Beitrag Datenmakros in Access 2010 (www.access-im-unternehmen.de/760) besprochen. Im vorliegenden Beitrag schauen wir uns einige praktische Aspekte an und nehmen dabei das Thema Restriktionen in den Fokus.

Bereits in früheren Versionen bietet Access ein paar Möglichkeiten, Daten mit Restriktionen zu versehen: beispielsweise mit eindeutigen Indizes, Primärschlüsselfeldern, Gültigkeitsregeln oder der Definition referentieller Integrität für Beziehungen und damit die Einschränkung der Werte für Fremdschlüsselfelder.

Mit Datenmakros legen Sie praktisch beliebige Restriktionen fest und kombinieren Makros dabei nach Wunsch mit VBA-Funktionen.

Da es hier um Restriktionen geht, kümmern wir uns in diesem Beitrag ausschließlich um die beiden Datenmakros Vor Änderung und Vor Löschung. Beide werden ausgelöst, bevor eine Änderung eines Datensatzes gespeichert beziehungsweise dieser endgültig gelöscht wird - es gibt also noch Gelegenheit, den Vorgang zu unterbrechen.

Bearbeitung komplett unterbinden

Dies kann eine grundsätzliche Option sein: Mit den Datenmakros Vor Änderung und Vor Löschung lassen sich durchaus Regeln wie die folgenden festlegen:

  • Einer Tabelle darf kein Datensatz hinzugefügt werden.
  • Die Datensätze einer Tabelle dürfen nicht verändert werden.
  • Es darf kein Datensatz aus der Tabelle gelöscht werden.

Differenzierte Restriktionen

Es gibt jedoch auch die Möglichkeit, eine oder mehrere Regeln festzulegen, nach denen der Benutzer einen Datensatz hinzufügen, ändern oder löschen darf. Damit können Sie die oben beschriebenen Restriktionen etwas lockern - zum Beispiel, indem Sie das Hinzufügen von Datensätzen zu einer Tabelle grundsätzlich erlauben. Ein Ändern oder Löschen hingegen soll nur in den ersten 15 Minuten nach dem Anlegen möglich sein - danach bleibt der Datensatz, wo und wie er ist.

Zusammenspiel mit VBA

Die für diese und komplizierte Restriktionen notwendigen Regeln können Sie direkt per Makro-Programmierung definieren. Sie können jedoch von Datenmakros aus auch VBA-Funktionen aufrufen, um komplexere Prüfungen in der gewohnten Umgebung abzubilden.

Außerdem zeigen wir Ihnen, wie Sie von VBA aus mit Datenmakros interagieren können, die etwa durch das Bearbeiten der betroffenen Datensätze per VBA ausgelöst wurden.

Datensätze einer Tabelle schützen

Als Beispiel dient eine einfache Tabelle namens tblAnreden. Diese enthält in der Regel zwei bis drei Datensätze und sollte normalerweise nicht verändert werden (s. Abb. 1).

pic002.png

Abb. 2: Anlegen von Datenmakros in der Datenblattansicht einer Tabelle

Bis Access 2003 ließ sich dies mithilfe des Sicherheitssystems von Access regulieren, ab Access 2010 erledigen Sie dies mit Datenmakros. Schauen wir uns an, wie dies aussieht.

Am schnellsten prüfen lassen sich die Änderungen an Datenmakros, wenn Sie diese öffnen, während die Tabelle in der Datenblattansicht angezeigt wird. Sie können die Wirkung dann direkt nach dem Schließen des Makro-Editors ausprobieren. Ein neues Datenmakro namens Vor Änderung oder Vor Löschung legen Sie wie in Abb. 2 an.

pic003.png

Abb. 3: Dieses Makro löst einen Fehler aus, wenn der Benutzer einen Datensatz löschen will.

Voraussetzung hierfür ist allerdings, dass Sie in den Access-Optionen den Eintrag Aktuelle Datenbank|Anwendungsoptionen|Entwurfsänderungen für Tabellen in der Datenblattansicht aktivieren angehakt haben.

Löschen verhindern

Wenn Sie verhindern möchten, dass ein Datensatz gelöscht wird, fügen Sie ein neues Datenmakro Vor Löschung zur Tabelle hinzu. Darin legen Sie eine einzige Aktion namens AuslösenFehler an. Als Parameter geben Sie dabei die Fehlernummer (hier 1) sowie die Fehlerbeschreibung an, in diesem Fall Löschen nicht möglich (s. Abb. 3).

pic001.png

Abb. 1: Beispieltabelle, deren Daten geschützt werden sollen

Dies bewirkt, dass Access beim Versuch, einen der Datensätze der Tabelle tblAnreden zu löschen, eine Meldung wie in Abb. 4 einblendet.

pic004.png

Abb. 4: Meldung beim Versuch, einen Datensatz zu löschen

Die Fehlermeldung wird nicht angezeigt - vielleicht erscheint diese aber, wenn Sie versuchen, einen Datensatz per VBA zu löschen? Probieren wir es aus, indem wir schnell eine entsprechende Anweisung zusammenstellen und diese im Direktfenster des VBA-Editors absetzen:

CurrentDB.Execute "DELETE FROM tblAnreden WHERE AnredeID = 3"

Das Ergebnis überrascht ein wenig und sieht wie in Abb. 5 aus. Als Fehlernummer kommt hier 3939 zum Einsatz, was - um es vorwegzunehmen - scheinbar die Standardnummer für Fehler ist, die durch Datenmakros ausgelöst werden. Immerhin zeigt Access aber die angegebene Fehlermeldung an.

pic005.png

Abb. 5: Beim Löschen per VBA erscheint eine völlig andere Fehlernummer.

Begnügen wir uns doch zunächst mit der Erkenntnis, dass wir in der Datenblattansicht und beim Löschen per Execute-Anweisung eine entsprechende Meldung provozieren und das Löschen verhindern können.

Ändern von Daten verhindern

Wie sieht es bei der Änderung eines Datensatzes aus? Eigentlich genau wie beim Löschen. Wenn ein Datensatz nicht geändert werden darf, legen Sie das Datenmakro Vor Änderung an.

Fügen Sie diesem die Aktion AuslösenFehler hinzu und hinterlegen Sie eine entsprechende Meldung (s. Abb. 6). Beim Versuch, einen Datensatz der Tabelle zu ändern, liefert Access die angegebene Meldung und verwirft die Änderung.

pic006.png

Abb. 6: Dieses Makro verhindert Änderungen am Datensatz.

Hinzufügen von Daten verhindern

Probieren Sie nun einmal, der mit dem oben beschriebenen Datenmakro Vor Änderung ausgestatteten Tabelle einen neuen Datensatz hinzuzufügen.

Auch dies wird unterbunden, denn Access interpretiert das Hinzufügen eines neuen Datensatzes hier als Änderung.

Was aber, wenn Sie eine spezifische Meldung ausgeben möchten, wenn der Benutzer unerlaubterweise versucht, einen Datensatz anzulegen? Dann benötigen Sie eine Wenn-Bedingung, die prüft, ob der Benutzer einen neuen Datensatz angelegt oder nur einen bestehenden Datensatz geändert hat.

Wie auch bei Triggern üblich, erlaubt Access in den beiden Makro-Aktionen Vor Änderung und Vor Löschung den Zugriff auf zwei verschiedene Zustände des aktuell bearbeiteten Datensatzes: erstens auf den Datensatz vor der Änderung und zweitens auf den Datensatz nach der Änderung. Den geänderten Datensatz referenzieren Sie dabei mit dem Tabellennamen. Der Ausdruck [tblAnreden].[AnredeID] liefert also den neuen Primärschlüsselwert des Datensatzes. Wenn Sie den Primärschlüsselwert des Datensatzes vor der Änderung ermitteln möchten, nutzen Sie den Ausdruck [Alt].[AnredeID].

Dies gelingt nicht nur mit vorhandenen Datensätzen, sondern auch mit neuen. Und logischerweise sind die Werte der Felder eines Datensatzes vor dem Anlegen alle leer.

Auf einen neuen Datensatz prüfen

Um im Makro Vor Änderung zu prüfen, ob ein neuer Datensatz angelegt oder ein bestehender Datensatz geändert wurde, brauchen Sie nur den Inhalt eines Feldes zu prüfen, von dem Sie genau wissen, dass es nach dem Anlegen gefüllt ist.

Dies ist bei einem Primärschlüsselfeld, das als Autowertfeld ausgelegt ist, der Fall. Also prüfen wir den Ausdruck IstNull([Alt].[AnredeID]). Ist dieser wahr, handelt es sich um einen neuen Datensatz, sonst um einen bestehenden Datensatz (s. Abb. 7). Dementsprechend liefert Access beim Anlegen eines neuen Datensatzes die Meldung Sie dürfen dieser Tabelle keine Daten hinzufügen.

pic007.png

Abb. 7: Fallunterscheidung beim Ändern eines Datensatzes: Neu oder geändert?

Datensätze nur 15 Minuten nach dem Anlegen ändern

Damit haben Sie bereits ein Beispiel für eine Bedingung kennengelernt. Schauen wir uns ein weiteres Beispiel an: Dabei soll der Benutzer einer Tabelle zwar beliebig neue Datensätze hinzufügen, diese aber nur innerhalb von 15 Minuten nach dem Anlegen wieder löschen oder ändern können.

Dazu verwenden wir eine Tabelle namens tblTaetigkeiten mit den Feldern TaetigkeitID, Taetigkeit und AngelegtAm (s. Abb. 8).

pic008.png

Abb. 8: Tabelle mit Zeitstempel

Den Wert des Feldes können Sie auf gewohnte Weise mit der Standardwert-Eigenschaft des Feldes festlegen. Sie können natürlich auch einen Befehl im Datenmakro Vor Änderung unterbringen. Der Befehl heißt FestlegenFeld. Für die Parameter Name und Feld legen Sie dabei die beiden Ausdrücke AngelegtAm und Jetzt() fest.

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.