在Access

时间:2017-04-10 16:53:15

标签: vba ms-access access-vba

我正在尝试在编辑记录时跟踪值更改。表单上的所有字段都是未绑定的文本框。

以下是用于插入审核跟踪记录的函数。

Public Function AuditChanges(RecordID As String, UserAction As String)

    Dim DB As Database
    Dim rst As Recordset
    Dim clt As Control
    Dim Userlogin As String

    Set DB = CurrentDb
    Set rst = DB.OpenRecordset("select * from tbl_audittrail", adOpenDynamic)

    Userlogin = Environ("username")

    Select Case UserAction

        Case "Edit"
            For Each clt In Screen.ActiveForm.Controls

                If (clt.ControlType = acTextBox _
                    Or clt.ControlType = accombox) 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.OldValue
                            !Newvalue = clt.Value
                            .Update
                        End With
                    End If
                End If
            Next clt
    End Select

    rst.Close
    DB.Close
    Set rst = Nothing
    Set DB = Nothing
End Function

以下是我如何使用该功能:

Private Sub btnUpdate_Click()

    Set DB = CurrentDb
    Set rs = DB.OpenRecordset("SELECT * FROM ASID", dbOpenDynaset, dbSeeChanges)

        rs.Edit
        rs!ISIN = Me.ISIN
        rs!SECIDTYPE = Me.SECIDTYPE
        rs!ALTSECID = Me.ALTSECID
        rs.Update
        Call AuditChanges("ISIN", "Edit")

     End If

End Sub

问题是当它调用AuditChanges时,它直接来自

If (clt.ControlType = acTextBox _
    Or clt.ControlType = accombox)

End If

当前表单上的所有字段都是未绑定的文本框,您必须按“添加”命令按钮才能实际添加记录。我认为控件类型肯定有问题,但我不确定应该使用哪种控件类型。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

首先将Option Explicit放在每个模块的顶部。 它强制执行变量声明,并在编译时报告未声明或拼写错误的变量/常量。 要在新模块中自动执行此操作,请在VBA编辑器中设置Require Variable Declaration选项。 这对于VBA开发来说确实是必须的。

然后编译器会告诉你accombox不存在,它应该是acComboBox

如果没有Option Explicitaccombox被初始化为NULL变体,并导致整个If条件为NULL,因此永远不会输入。