【发布时间】:2022-02-19 03:24:36
【问题描述】:
我在网上找到了这段代码 (http://www.fontstuff.com/access/acctut21.htm) 来捕获对表格所做的更改。该代码适用于提供的示例数据库,但不适用于我的数据库。对于示例和我的数据库,更改是通过表单进行的,并由“更新前”表单属性中的事件过程触发。我没有收到任何错误,但没有任何内容写入审计表。我的表单与示例中的表单之间的一个区别是我的表单通过查询从多个表中提取数据,并且对多个表进行了更新。示例表单仅显示一张表中的字段,并且仅对一张表进行更新。
如何获取此代码来记录我的更改?
Option Compare Database
Option Explicit
Sub AuditChanges(IDField As String)
On Error GoTo AuditChanges_Err
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim ctl As Control
Dim datTimeCheck As Date
Dim strUserID As String
Set cnn = CurrentProject.Connection
Set rst = New ADODB.Recordset
rst.Open "SELECT * FROM tblAuditTrail", cnn, adOpenDynamic, adLockOptimistic
datTimeCheck = Now()
strUserID = Environ("USERNAME")
For Each ctl In Screen.ActiveForm.Controls
If ctl.Tag = "Audit" Then
If Nz(ctl.Value) <> Nz(ctl.OldValue) Then
With rst
.AddNew
![DateTime] = datTimeCheck
![UserName] = strUserID
![FormName] = Screen.ActiveForm.NAME
![RecordID] = Screen.ActiveForm.Controls(IDField).Value
![FieldName] = ctl.ControlSource
![OldValue] = ctl.OldValue
![NewValue] = ctl.Value
.Update
End With
End If
End If
Next ctl
AuditChanges_Exit:
On Error Resume Next
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
Exit Sub
AuditChanges_Err:
MsgBox Err.Description, vbCritical, "ERROR!"
Resume AuditChanges_Exit
End Sub
【问题讨论】:
-
是否至少有一个控件具有“审核”
Tag?检查是否调用了AuditChanges以及循环是否正确(断点或Debug.Print "AuditChanges(" & IDField & ")"在子声明处和For Each与Debug.Print "Fieldname: " & ctl.ControlSource & " Tag: " & ctl.Tag行之后,也许Form_BeforeUpdate事件没有被触发。我有类似的东西,但我使用Control_BeforeUpdate。 -
我试过这个。唯一打印的是 Debug.Print "AuditChanges(" & IDField & ")"。如何检查每一行代码。我正在使用 Access 2010。数据库可能是使用 2007 编写的