I'm using this code to try and create an audit trail on my database.
This refers to:Code:Private Sub Form_BeforeUpdate(Cancel As Integer) If Not Me.NewRecord Then Call AuditChanges("Order_ID") End Sub
But I get the error Argument not optional on the first code. Is it obvious to anyone why that is? This seems to work in the example and I cant see a difference.Code:Option Compare Database Option Explicit ' ' ================================================ ' Code by Martin Green Email: martin@fontstuff.com ' Visit my Office Tips website @ www.fontstuff.com ' YouTube tutorials www.youtube.com/martingreenvba ' ================================================ ' Sub AuditChanges(IDField As String, UserAction 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") Select Case UserAction Case "EDIT" 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 ![Action] = UserAction ![RecordID] = Screen.ActiveForm.Controls(IDField).Value ![FieldName] = ctl.ControlSource ![OldValue] = ctl.OldValue ![NewValue] = ctl.Value .Update End With End If End If Next ctl Case Else With rst .AddNew ![DateTime] = datTimeCheck ![UserName] = strUserID ![FormName] = Screen.ActiveForm.Name ![Action] = UserAction ![RecordID] = Screen.ActiveForm.Controls(IDField).Value .Update End With End Select 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


Argument not optional.
Reply With Quote

