Timestamp-Felder in Access nachbilden

Prüfen, ob Feldwerte tatsächlich geändert wurden

Das funktioniert zwar, hat allerdings einen Haken: Ändert der Benutzer einen Feldwert durch Eingabe oder Auswahl eines Listeneintrags und stellt danach wieder den alten Wert ein, tritt dennoch das Ereignis ein und das Timestamp-Feld wird geändert.

Das ist jedoch nicht exakt das Verhalten, das beispielsweise MySQL aufweist. Dort erkennt der Datenbankserver, ob bei einer UPDATE-Anweisung wirklich Feldwerte geändert wurden. Nur in diesem Fall wird das Timestamp-Feld geändert. Möchten Sie dieses Verhalten nachbilden, ist etwas mehr Aufwand erforderlich.

Sie müssen vor der Änderung des Timestamp-Feldes prüfen, ob mindestens ein Wert von dem alten Wert abweicht. Das ist im Prinzip kein Problem, weil in der Eigenschaft OldValue eines jeden Formularfeldes auch der ursprüngliche Feldwert gespeichert ist. Sie müssen also nur alle Steuerelemente des Formulars durchlaufen und prüfen, ob deren Eigenschaftswert für die Eigenschaft OldValue von dem der Value-Eigenschaft abweicht.

Es ist also eine Funktion zu erstellen, der alle Felder übergeben werden und die dann für jedes Feld prüft, ob es geändert wurde. Falls ja, weisen Sie dem Rückgabewert True zu, ansonsten behält die Funktion den Rückgabewert False, der am Anfang gesetzt wurde (Listing 3).

Function boolGeaendert(ParamArray objContr() As Variant) As Boolean
Dim objC As Variant
Dim objContr2 As Control
boolGeaendert = False
For Each objC In objContr
Set objContr2 = objC
If objContr2.Value <> objContr2.OldValue Then
boolGeaendert = True
Exit For
End If
Next objC
End Function