Отслеживание изменений в подчиненной форме - PullRequest
1 голос
/ 27 января 2020

Я пытаюсь отследить изменения, внесенные в подчиненную форму. Все добавленное, удаленное или отредактированное будет записано в таблицу с именем Audit_tbl. Когда я делаю добавление или редактирование записи, я получаю эту ошибку:

3001: недопустимая ошибка аргумента.

Я вызываю функцию в форме как перед обновлением процедура события.

Прилагаются справочные библиотеки, которые я добавил. enter image description here

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

1 Ответ

1 голос
/ 27 января 2020

db.OpenRecordset - это DAO. adOpenDynamic это ADO. Вы не можете объединить их.

Используйте вместо этого dbOpenDynaset, чтобы открыть набор записей типа Dynami c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...