PDA

Vollständige Version anzeigen : Mit Klasse die Access-Gültigkeitsmeldung bei erforderlichen Felder verbessern u mehr


JPA
14.07.2015, 21:33
Aufgabe 1: Umgang mit erforderlichen Feldern
Enthält eine Tabelle erforderlichen Felder, werden diese erst beim speichern des Datensatzes mit der bekannten bescheidenen Access-System-Meldung angefordert. Diese lässt sich leider auch 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 einen kleinem Beispiel habe ich an diesen Post angefügt. Der VBA-Code ist kommentiert, in der Hoffnung, dass das Konzept verständlich wird.

Gruß
JPA