Änderungsprotokoll mit Klasse

Im Beitrag änderungsdaten protokollieren (www.access-im-unternehmen.de/672) haben wir Techniken vorgestellt, welche die Verwaltung einer änderungshistorie stark erleichtert. Im vorliegenden Beitrag gehen wir noch weiter und vereinfachen die Geschichtsschreibung für Formulare. Dazu brauchen Sie dem Formular nur noch eine Klasse zuzuweisen – den Rest übernimmt unsere kleine Erweiterung.

Stellen Sie sich vor, Sie wollten die änderungen an den Datensätzen eines Formulars beim Anlegen und Löschen sowie bei der zuletzt erfolgten änderung in den entsprechenden Feldern der Tabelle speichern und bräuchten dazu nur ein paar immer gleiche Codezeilen im Formular unterzubringen.

Nicht möglich Aber sicher – Sie brauchen nur zuvor die Datenherkunft mit den Feldern zum Speichern der Historie-Daten auszustatten. Und wie das geht, haben Sie ja bereits im oben bereits erwähnten Beitrag änderungsdaten protokollieren erfahren.

Sie brauchen nur eine Tabelle, die mit den Zusatzfeldern wie in Abb. 1 ausgestattet ist, eine Abfrage, die alle Datensätze daraus liefert außer solche, die als gelöscht markiert sind (s. Abb. 2) und ein Formular, das die Abfrage als Datenherkunft verwendet und unsere Klasse clsAenderungsprotokollierung einsetzt.

pic001.png

Abb. 1: Die Tabelle mit Historie-Feldern

pic002.png

Abb. 2: Diese Abfrage liefert alle nicht gelöschten Datensätze der obigen Tabelle

Um diese Klasse zu verwenden, erstellen Sie zunächst eine Objektvariable im Kopf des Klassenmoduls des Formulars (falls dieses noch nicht vorhanden ist: Eigenschaft Enthält Modul auf Ja einstellen und auf den Ribbon-Eintrag Entwurf|Tools|Code anzeigen klicken):

Dim objAenderungsprotokollierung As clsAenderungsprotokollierung

Danach fügen Sie der Eigenschaft Beim Laden den Wert [Ereignisprozedur] hinzu, klicken auf die Schaltfläche neben der Eigenschaft und ergänzen die noch leere Prozedur Form_Load wie folgt:

Private Sub Form_Load()
    Set objAenderungsprotokollierung = _
    New clsAenderungsprotokollierung
    With objAenderungsprotokollierung
        Set .Form = Me
        .BenutzerID = GetCurrentUser
    End With
End Sub

Diese Prozedur erzeugt ein neues Objekt auf Basis der Klasse clsAenderungsprotokollierung und weist seiner Eigenschaften einige Werte zu. Die Eigenschaft Form wird mit einem Verweis auf das aktuelle Formular versehen, und die Eigenschaft BenutzerID füllen wir mit dem Wert der Funktion GetCurrentUser. Diese Funktion ist hier noch ein Dummy, den Sie abhängig von der in Ihrer Anwendung eingesetzten Benutzerverwaltung noch anpassen müssen:

Public Function GetCurrentUser() As Long
    GetCurrentUser = 1
End Function

Der Dummy liefert schlicht den Wert 1 als ID des aktuellen Benutzers (später greifen Sie mit dieser Funktion beispielsweise auf eine Optionen-Tabelle zu, welche die ID des aktuellen Benutzers speichert).

Die Klasse clsAenderungsprotokollierung

Kommen wir zum Arbeitstier der Beispieldatenbank – der Klasse clsAenderungsprotokollierung. Diese deklariert zunächst die folgenden Variablen:

Private WithEvents m_Form As Form
Private m_BenutzerID As Variant
Private bolDelete As Boolean
Private lngTimerIntervalOld As Long

m_Form bekommt über die öffentliche Set-Prozedur Form einen Verweis auf das aufrufende Formular zugewiesen.

Sie ist deshalb mit dem Schlüsselwort WithEvents deklariert worden, damit sie auf die Ereignisse des aufrufenden Formulars reagieren kann. Dazu sind drei Bedingungen zu erfüllen:

  • Das aufrufende Formular besitzt ein Klassenmodul, was sicher der Fall ist, weil darin ja die Klasse clsAenderungsprotokollierung instanziert wird.
  • Wir weisen der entsprechenden Ereigniseigenschaft des Objekts m_Form den Wert [Event Procedure] zu.
  • Wir legen eine entsprechende Ereignisprozedur im Klassenmodul an.

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