Betrifft: ab orgAnice SQL

Frage:
Wie kann beim Speichern eines Datensatzes festgestellt werden, welches Feld und wie geändert wurde?

Lösung:
Seit der Version 4.0.2.502 steht die Eigenschaft .SpecialValue der Klasse Field zur Verfügung. Sie unterscheidet sich von Field.Value dadurch, dass ein optionaler Parameter „Mode“ bestimmt, was zurückgegeben wird. Insbesondere kann sowohl auf den Lese- ( Field.SpecialValue(ORGDB_FIELDEVALMODE_READ) ) als auch den Schreibpuffer ( Field.SpecialValue(ORGDB_FIELDEVALMODE_WRITE) ) zurückgegriffen werden.

Direkt nach dem Positionieren eines neuen Datensatz unterscheiden sich die beiden Werte nicht, nach dem Setzen eines neuen Feldwertes mit Field.Value liefert jedoch die Abfrage des Lesepuffers einen anderen Wert als die Abfrage des Schreibpuffers.

Für den Zeitpunkt der Abfrage eignet sich am besten die Überwachung des Ereignisses Table_BeforeWrite().

Beispiel:

Erstellen Sie in einer Klasse, die auf die Ereignisse der zu überwachenden Tabellen reagiert, die folgende Prozedur ein:

Private Sub mTbl_BeforeWrite(pbContinue As Boolean)
‚ Listet im Direktfenster die Felder, deren Inhalte geändert werden, auf.
‚ Bei Nicht-Dokumentfeldern zusätzlich jeweils mit dem alten und dem neuen Wert.
Dim fld As OrgDbServer31.Field

For Each fld In mTbl.Fields
If fld.Type = ORGDB_FIELDTYPE_DOCUMENT Then
If Not fld.SpecialValue(ORGDB_FIELDEVALMODE_READ) Is fld.SpecialValue(ORGDB_FIELDEVALMODE_WRITE) Then
Debug.Print „Feld “ & fld.Name & “ geändert“
End If
Else
If fld.SpecialValue(ORGDB_FIELDEVALMODE_READ) <> fld.SpecialValue(ORGDB_FIELDEVALMODE_WRITE) Then
Debug.Print „Feld “ & fld.Name & “ geändert: ‚“ & _
fld.SpecialValue(ORGDB_FIELDEVALMODE_READ) & „‚ -> ‚“ & _
fld.SpecialValue(ORGDB_FIELDEVALMODE_WRITE) & „‚“
End If
End If
Next fld
End Sub

Die Prozedur gibt im Direktfenster beim Speichern eines Datensatzes die Namen der geänderten Felder, sowie (bei Nicht-Dokumentfeldern) den alten und den neuen Wert aus.

Zu Testzwecken fügen Sie die Prozedur in die Standardklasse CTableEvents ein, sie reagiert u.a. auf die Ereignisse in den Tabellen Adressen und Aktivitäten.

Was this helpful?

1 / 0

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen