Das Append-Only-Memofeld

Mit Access 2007 hat Microsoft neben vielen anderen Neuerungen auch das Memofeld angepackt. So speichert dieses nun formatierte Texte und kann außerdem nach Wunsch alle änderungen an den enthaltenen Texten protokollieren. Dieser Beitrag zeigt, wie Sie ein Append-Only-Memofeld einrichten, wie es funktioniert und wie Sie die gespeicherten änderungen lesen können.

Protokollierung aktivieren

Um die Protokollierung der änderungen am Text eines Memofelds einzurichten, setzen Sie dessen Eigenschaft Nur Anfügen auf den Wert Ja. Diese Eigenschaft steht Ihnen jedoch nur zur Verfügung, wenn die Datenbank im 2007er-Dateiformat (.accdb) vorliegt.

Der Name dieser Eigenschaft ist irreführend. Besser wäre es gewesen, wenn die Eigenschaft den Namen “Protokollierung aktivieren” erhalten hätte. Bei der Namensfindung haben sich die Entwickler von Access 2007 an SharePoint orientiert [1]. Dort gibt es die gleiche Funktion.

Um die Wirkung der Eigenschaft Nur Anfügen zu testen, legen Sie eine neue Tabelle in einer .accdb-Datei an, fügen zumindest ein Memofeld ein und ändern die Eigenschaft Nur anfügen auf Ja. Lassen Sie sich dabei nicht von Access ins Bockshorn jagen. Die genannte Eigenschaft finden Sie ganz am Ende der Liste der Eigenschaften. Access offenbart Ihnen diese Eigenschaft erst dann, wenn Sie die Bildlaufleiste der Eigenschaften nach unten verschieben (s. Abb. 1). Öffnen Sie jetzt die Tabelle in der Datenblattansicht und tragen Sie beliebigen Text in das Memofeld ein. Nachdem Sie den Datensatz gespeichert haben, ändern Sie den Wert des Memofeldes. Das Memofeld verhält sich wie ein normales Textfeld. Wenn Sie Daten ändern, werden diese gespeichert. Doch wo verbergen sich die gespeicherten änderungen Und wie kann man die änderungen wieder sichtbar machen

Abb1.tif

Abb. 1: Um die Eigenschaft Nur Anfügen sichtbar zu machen, müssen Sie an das Ende der Liste der Eigenschaften scrollen.

Historie sichtbar machen

Jedes Mal, wenn Sie den Inhalt eines Append-Only-Memofeldes ändern, speichert Access neben dem neuen Inhalt auch einen Zeitstempel. Diese Daten werden jeweils an den Inhalt des Memofeldes angehängt. Access zeigt aber immer nur den zuletzt gespeicherten Inhalt an.

Die gespeicherten änderungen machen Sie auf einfache Art sichtbar. Dazu setzen Sie die Einfügemarke in das Memofeld und wählen aus dem Kontextmenü den Eintrag Spaltenverlauf anzeigen … aus. Access öffnet daraufhin ein Fenster mit der Historie der änderungen für dieses Feld (s. Abb. 2). Das Kontextmenü steht nicht nur in Tabellen, sondern auch in Formularen zur Verfügung.

Abb2.tif

Abb. 2: Sie können sich alle gespeicherten änderungen für ein Memofeld anzeigen lassen.

Mit VBA auf die änderungen zugreifen

Die gespeicherten änderungen in einem Append-Only-Memofeld können Sie auch mit VBA auslesen, und zwar mit der neuen Methode ColumnHistory des Application-Objekts. Diese erwartet die folgenden Parameter und liefert einen String mit allen gespeicherten änderungen:

  • Feldname
  • Tabellenname
  • Bedingung, die den Datensatz identifiziert

Leider liefert ColumnHistory keine aussagekräftigen Fehlermeldungen. Wenn sich in den Parametern ein Fehler eingeschlichen hat, erhalten Sie die Fehlermeldung mit dem Text Automatisierungsfehler und einer kryptischen Fehlernummer (s. Abb. 3). Ein Klick auf die Hilfe-Schaltfläche bringt Sie leider auch nicht weiter. Mit etwas Forschergeist finden Sie jedoch heraus, dass sich die Fehlernummern je nach Fehlerquelle unterscheiden. Fehlerhafte Tabellen- oder Feldnamen liefern Fehler mit unterschiedlichen Fehlernummern. Ein Fehler in der Bedingung löst wieder einen anderen Fehler aus.

Abb3.tif

Abb. 3: Die Fehlermeldung zur Funktion ColumnHistory ist leider wenig aussagekräftig.

Das machen wir uns zunutze und schreiben eine eigene globale Funktion mit dem Namen ColumnHistory, die abhängig von der Fehlernummer eine aussagekräftige Fehlerbeschreibung ausgibt. Wie kann eine Funktion mit demselben Namen wie eine in Access eingebaute Funktion funktionieren Das ist schnell erklärt: Wenn VBA auf den Namen einer Funktion stößt, sucht es zuerst im eigenen Modul, dann in den anderen Modulen des VBA-Projekts, danach in den Verweisen in der Reihenfolge ihrer Priorität und zum Schluss wird in den eingebauten Verweisen (VBA und Access) gesucht. Details zu diesem Verhalten können Sie im Beitrag Defekte Verweise: Ursachen und Lösungen (Shortlink 572) nachlesen.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar