Ich habe diesen Code online (http://www.fontstuff.com/access/acctut21.htm) gefunden, um Änderungen an Tabellen zu erfassen. Der Code funktioniert in der Beispieldatenbank, die bereitgestellt wurde, funktioniert aber nicht in meiner Datenbank. Sowohl für das Beispiel als auch für meine Datenbank werden Änderungen über Formulare vorgenommen und durch eine Ereignisprozedur in den Formulareigenschaften unter "Vor dem Update" ausgelöst. Ich bekomme keine Fehler, aber nichts wird in die Audit-Tabelle geschrieben. Ein Unterschied zwischen meinem Formular und dem Beispiel besteht darin, dass mein Formular Daten aus mehreren Tabellen durch eine Abfrage zieht und Aktualisierungen an mehreren Tabellen vorgenommen werden. Das Beispielformular zeigt nur Felder aus einer Tabelle und Aktualisierungen werden nur für eine Tabelle vorgenommen.Ändern von Access VBA zum Erfassen von Änderungen in Formularen
Wie kann ich diesen Code erhalten, um meine Änderungen aufzuzeichnen?
Option Compare Database
Option Explicit
Sub AuditChanges(IDField As String)
On Error GoTo AuditChanges_Err
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim ctl As Control
Dim datTimeCheck As Date
Dim strUserID As String
Set cnn = CurrentProject.Connection
Set rst = New ADODB.Recordset
rst.Open "SELECT * FROM tblAuditTrail", cnn, adOpenDynamic, adLockOptimistic
datTimeCheck = Now()
strUserID = Environ("USERNAME")
For Each ctl In Screen.ActiveForm.Controls
If ctl.Tag = "Audit" Then
If Nz(ctl.Value) <> Nz(ctl.OldValue) Then
With rst
.AddNew
![DateTime] = datTimeCheck
![UserName] = strUserID
![FormName] = Screen.ActiveForm.NAME
![RecordID] = Screen.ActiveForm.Controls(IDField).Value
![FieldName] = ctl.ControlSource
![OldValue] = ctl.OldValue
![NewValue] = ctl.Value
.Update
End With
End If
End If
Next ctl
AuditChanges_Exit:
On Error Resume Next
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
Exit Sub
AuditChanges_Err:
MsgBox Err.Description, vbCritical, "ERROR!"
Resume AuditChanges_Exit
End Sub
Hat mindestens eine Kontrolle ein "Audit" 'Tag'? Überprüfen Sie, ob 'AuditChanges' aufgerufen wurde und ob die Schleife korrekt ausgeführt wurde (Breakpoints oder' Debug.Print "AuditChanges (" & IDField & ")" 'bei der Unterdeklaration und nach' For Each' Zeile mit 'Debug.Print" Feldname: "& ctl.ControlSource &" Tag: "& ctl.Tag', Vielleicht wird das' Form_BeforeUpdate' Ereignis nicht ausgelöst. Ich habe etwas ähnliches, aber ich benutze 'Control_BeforeUpdate'. – BitAccesser
Ich habe das versucht. Das einzige, was gedruckt wurde, war für Debug .Print "AuditChanges (" & IDField & ")". Wie kann ich nach jeder Codezeile suchen? Ich verwende Access 2010. Die Datenbank wurde möglicherweise mit 2007 geschrieben – Tweety