Translate

Dienstag, 14. Juli 2015

Mit Klasse die Access-Gültigkeitsmeldung bei erforderlichen Felder verbessern



Aufgabe 1: Umgang mit erforderlichen Feldern
Enthält eine Tabelle erforderlichen Felder, werden diese erst beim speichern des Datensatzes mit folgender Access-System-Meldung angefordert:








Diese Standard-Meldung ist bescheiden und lässt sich nicht beeinflussen.
Des Weiteren kommt jeweils eine Meldung für jedes einzelne erforderliche Feld, was nicht sehr Anwenderfreundlich ist.

Abhilfe Schaft hier ein VBA-Code, der über das Form-Event BeforeUpdate diesen Fall abfängt, um eine selbstdefinierte Meldung erscheinen zu lassen.
Selbstverständlich möchten wir nun diesen Anwenderfreundliche "Service" in sämtlichen Formularen zur Verfügung stellen.
Es liegt nah den VBA-Code unter BeforeUpdate in die anderen Formularen zu kopieren, mit Anpassung der erforderlichen Felder. Programm-Code der letztendlich dasselbe macht x-mal zu kopieren zeugte schon immer von schlechter Codierung. Hinzu kommt das in gewissen Formularen, die Event Prozedur BeforeUpdate bereits VBA-Code für andere Anforderungen enthält. Also können wir in diesen Fällen den Code nicht einfach 1:1 übertragen.
Daher ist die Idee entstanden den VBA-Code inkl. dem Form-Event BeforeUpdate in einer Klasse auszulagern. Somit muss in den Formularen lediglich die Klasse instanziiert werden, mit Übergabe der gewünschten erforderlichen Felder. Der VBA-Code selbst, der die Funktionalität umsetzt, steht somit nur einmalig in einem Klassenmodul.

Aufgabe 2: Formulare sollen mit den Schaltflächen OK/Abbrechen/Übernehmen versehen werden
Die Schaltfläche 'OK' soll den aktuellen Datensatz speichern und das Formular schliessen.

Die Schaltfläche 'Abbrechen' soll den aktuellen Datensatz verwerfen (mit Rückfrage, falls erforderlich) und das Formular schließen.

Die Schaltfläche 'Übernehmen' soll den aktuellen Datensatz speichern und dabei nur aktiv sein, wenn der Datensatz sich im Änderungsmodus befindet.

Auch hier sollte der VBA-Code und die diversen Event-Prozeduren die dazu nötig sind nicht in den Formularen vervielfältigt werden.
Diese passen Thematisch sehr gut in unsere Klasse mit der Gültigkeitsprüfung, also lagern wir den VBA-Code mit den Form-/Button-Events auch in dieser Klasse aus.

In unseren Formularen benötigen wir nur noch den folgenden kleinen Code-Schnipsel:
Option Compare Database
Option Explicit

    Dim cRV As clsFormRecordValidation

Private Sub Form_Load()
    Set cRV = New clsFormRecordValidation
   
    cRV.AddRequiredField Me.TitleOfCourtesy
    cRV.AddRequiredField Me.LastName
    cRV.AddRequiredField Me.Country
    cRV.AddRequiredField Me.ReportsTo
   
    cRV.ButtonOK = Me.cmdOK
    cRV.ButtonApply = Me.cmdApply
    cRV.ButtonCancel = Me.cmdCancel
End Sub
   
Private Sub Form_Close()
    Set cRV = Nothing
End Sub

Die fertige Klasse integriert in einer Kleinem Beispiel kann hier heruntergeladen werden. Der VBA-Code ist kommentiert, in der Hoffnung, dass das Konzept verständlich wird. Ansonsten einfach Fragen stellen über die Kommentar-Funktion. Kritik (Positiv/Negativ) wie auch Anregungen sind erwünscht.

Ich wünsche weiterhin viel Erfolg mit nicht nur guten VBA-Code, sondern zukünftig auch mit Klasse.