Я пытаюсь отследить изменения, внесенные в подчиненную форму. Все добавленное, удаленное или отредактированное будет записано в таблицу с именем Audit_tbl. Когда я делаю добавление или редактирование записи, я получаю эту ошибку:
3001: недопустимая ошибка аргумента.
Я вызываю функцию в форме как перед обновлением процедура события.
Прилагаются справочные библиотеки, которые я добавил.
Public Function AuditChanges(RecordID As String, UserAction As String)
On Error GoTo auditerr
Dim db As Database
Dim rst As Recordset
Dim clt As Control
Dim userloging As String
Set db = CurrentDb
Set rst = db.OpenRecordset("Select *from audit_tbl", adopendynamic)
UserLogin = Environ("Username")
Select Case UserAction
Case "new"
With rst
.AddNew
!\[DateTime\] = Now()
!\[UserName\] = UserLogin
!\[FormName\] = Screen.ActiveForm.Name
!\[Action\] = UserAction
!\[RecordID\] = Screen.ActiveForm.Controls(RecordID).Value
.Update
End With
Case "Delete"
With rst
.AddNew
!\[DateTime\] = Now()
!\[UserName\] = UserLogin
!\[FormName\] = Screen.ActiveForm.Name
!\[Action\] = UserAction
!\[RecordID\] = Screen.ActiveForm.Controls(RecordID).Value
.Update
End With
Case "edit"
For Each clt In Screen.ActiveForm.Controls
If (clt.ControlType = acTextBox) _
Or (clt.ControlType = acComboBox) Then
If Nz(clt.Value) <> Nz(clt.OldValue) Then
With rst
.AddNew
!\[DateTime\] = Now()
!\[UserName\] = UserLogin
!\[FormName\] = Screen.ActiveForm.Name
!\[Action\] = UserAction
!\[RecordID\] = Screen.ActiveForm.Controls(RecordID).Value
!\[FieldName\] = clt.ControlSource
!\[OldValue\] = clt.Value
.Update
End With
End If
End If
Next clt
End Select
rst.Close
db.Close
Set rst = Nothing
Set db = Nothing
auditerr:
MsgBox Err.Number & " : " & Err.Description, vbCritical, "Error"
Exit Function
End Function