跟踪子表单中的更改

问题描述 投票:0回答:1

我正在尝试跟踪对子表单所做的更改。任何添加,删除或编辑的内容都将记录在名为Audit_tbl的表中。当我添加或编辑记录时,出现3001:Invalid参数错误。我以“更新前”事件过程的形式调用该函数。

附有我添加的参考库。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]
vba ms-access access-vba
1个回答
0
投票

用途:

![DateTime].Value = Now()

或仅:

!DateTime.Value = Now

依此类推。

© www.soinside.com 2019 - 2024. All rights reserved.