Datenbindung 4

Datenbindung (Teil 4)

 

Der Code für die Datenbindung funktioniert soweit schon ganz gut. Es gibt jedoch ein Problem. Wenn mittels VBA-Code der Wert eines Steuerelements geändert wird, wird diese Änderung nicht an die zugehörige Property der Datenklasse weitergeleitet. Die Daten im Formular und in der Datenklasse unterscheiden sich also. Spätestens, wenn die Daten gespeichert werden sollen, wird das zum Problem.

Die Lösung für dieses Problem liegt darin, eine Methode zu schaffen, die alle Steuerelemente durchläuft und den aktuellen Wert in die zugehörige Property der Datenklasse schreibt. Dazu wird die Klasse "cls_DataBinder" um die Methode "GetFormData" erweitert.

Der Code für diese Methode sieht wie folgt aus:

Public Sub GetFormData()
On Error Resume Next

    'Variablen deklarieren
    Dim oBinderControl As cls_DataBinderControl

    For Each oBinderControl In m_ControlsCollection
        CallByName m_DataObject, oBinderControl.FieldName, VbLet, _
                   m_Form.Controls(oBinderControl.Control.Name).Value
    Next

End Sub

Vor dem Speichern der Daten wird diese Methode aufgerufen. Dazu wird in der Ereignis-Prozedur für das Klick-Ereignis des OK-Buttons der Aufruf wie folgt eingefügt:

Private Sub m_OKButton_Click()

    GetFormData
    m_DataObject.Save

    DoCmd.Close acForm, m_Form.Name

End Sub


Jetzt fehlt noch die Möglichkeit, dass Einlesen der Steuerelementwerte in die Datenklasse von außen anzustoßen. Dazu spendieren wir der "Fachklasse" ebenfalls eine Methode "GetFormData".

Der Code für diese Methode sieht wie folgt aus:

Public Sub GetFormData()

    m_DataBinder.GetFormData

End Sub

Eine Beispieldatenbank steht hier zum Download bereit:
Für Access 2000 / 2002 / 2003 / 2007 / 2010