Ich habe ein Formular, dass die Daten der Tabelle ‚Mitglieder‘ verwaltet.
Private Sub Form\_BeforeUpdate(Cancel As Integer)
Call AuditTrail(Me, Me!MitgliederID, Nz(FIRMA, ""), Nz(STRAßE, ""), Nz(PLZ, ""), Nz(ORT, ""), Nz(TEL, ""), Nz(FAX, ""))
End Sub
Änderungen der Tabelle ‚Mitglieder‘ werden in der Tabelle ‚Audit‘ festgehalten.
Sub AuditTrail(frm As Form, recordid As Control, FIRMA As String, STRAßE As String, PLZ As String, ORT As String, TEL As String, FAX As String)
Dim ctl As Control
Dim varBefore As Variant
Dim varAfter As Variant
Dim strControlName As String
Dim strSQL As String
On Error GoTo ErrHandler
For Each ctl In frm.Controls
With ctl
If .ControlType = acTextBox Then
If .Value .OldValue Then
varBefore = .OldValue
varAfter = .Value
strControlName = .NAME
strSQL = "INSERT INTO Audit (EditDate, User, RecordID, SourceTable, SourceField, BeforeValue, AfterValue, " & \_
"AuditFIRMA, AuditSTRASSE, AuditPLZ, AuditORT, AuditTEL, AuditFAX) " & \_
"VALUES (Now()," & \_
cDQ & Environ("username") & cDQ & ", " & \_
cDQ & recordid.Value & cDQ & ", " & \_
cDQ & frm.RecordSource & cDQ & ", " & \_
cDQ & .NAME & cDQ & ", " & \_
cDQ & varBefore & cDQ & ", " & \_
cDQ & varAfter & cDQ & ", " & \_
cDQ & FIRMA & cDQ & ", " & \_
cDQ & STRAßE & cDQ & ", " & \_
cDQ & PLZ & cDQ & ", " & \_
cDQ & ORT & cDQ & ", " & \_
cDQ & TEL & cDQ & ", " & \_
cDQ & FAX & cDQ & ", " & \_
Debug.Print strSQL
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
End If
End If
End With
Next
Set ctl = Nothing
Exit Sub
ErrHandler:
MsgBox Err.Description & vbNewLine \_
& Err.Number, vbOKOnly, "Error"
End Sub
Das funktioniert wunderbar, sofern ein Eintrag existiert und dieser geändert, jedoch nicht gelöscht wird.
Mein Problem sieht wie folgt aus, es andelt sich dabei bspw. um ein Feld, welches ich vier mal hintereinander geändert habe:
vorher nachher Ergebnis
ursprünglich kein Eintrag Eintrag Eintrag in Audit
Eintrag gelöscht leeres Feld kein Eintrag in Audit
Eintrag kein leeres Feld kein Eintrag in Audit
Eintrag geändert kein leeres Feld Eintrag in Audit
Ich möchte jedoch bei jeder Änderung einen Eintrag in die Tabelle Audit, auch wenn vorher oder anschliessend nichts im Feld steht.
Was muss ich ändern?
Grüsse aus Osnabrück,
Hans