我正在尝试在编辑记录时跟踪值更改。表单上的所有字段都是未绑定的文本框。
以下是用于插入审核跟踪记录的函数。
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
当前表单上的所有字段都是未绑定的文本框,您必须按“添加”命令按钮才能实际添加记录。我认为控件类型肯定有问题,但我不确定应该使用哪种控件类型。有什么想法吗?
答案 0 :(得分:0)
首先将Option Explicit
放在每个模块的顶部。
它强制执行变量声明,并在编译时报告未声明或拼写错误的变量/常量。
要在新模块中自动执行此操作,请在VBA编辑器中设置Require Variable Declaration选项。
这对于VBA开发来说确实是必须的。
然后编译器会告诉你accombox
不存在,它应该是acComboBox
如果没有Option Explicit
,accombox
被初始化为NULL变体,并导致整个If
条件为NULL,因此永远不会输入。