我想为我创建的表单创建一个审计跟踪,记录用户在此表单上运行某些操作时的记录。
该表单称为“作业”,上面有许多拨动开关。
当用户单击打开/关闭切换开关时,我想在名为“历史”的表中自动记录一些信息。
“历史”表将包含以下字段:
- HistoryId(主键;自动编号)
- JobId(将把它作为“工作”表单中当前记录的外键)
- 用户名(将得到这个
CreateObject("WScript.Network").UserName
) - DateClicked(将得到这个
Now()
) - ToggleButtonName
.Caption
(将通过切换按钮的属性获取此信息) - ToggleOnOff(将通过
.Value
切换按钮的属性获得此信息)
下面是我尝试过的一些测试代码。
出于测试目的,我只在 History 表中填充了JobID外键字段,并创建了一个HistoryDesc字段,只是为了查看是否可以在记录中获取一些其他值。
请注意,我使用“作业”表中的字段Ad_PerfChecks来存储togAd_PerfChecks切换按钮的切换状态以供以后使用。
Public Sub RefreshSubData()
tblHistory_sub.Form.Requery
End Sub
Private Sub togAd_PerfChecks_Click()
If Me.Ad_PerfChecks = 0 Or IsNull(Me.Ad_PerfChecks) Then
Dim rs1 As Recordset
Set rs1 = CurrentDb.OpenRecordset("tblHistory")
rs1.AddNew
rs1!JobID = Me.JobID
rs1!HistoryDesc = "Ad_PerfChecks was turned ON"
rs1.Update
Set rs1 = Nothing
RefreshSubData
Me.togAd_PerfChecks.Value = True
Me.togAd_PerfChecks.PressedColor = RGB(34, 177, 76)
Me.Ad_PerfChecks = 1
ElseIf Me.Ad_PerfChecks = 1 Then
Dim rs2 As Recordset
Set rs2 = CurrentDb.OpenRecordset("tblHistory")
rs2.AddNew
rs2!JobID = Me.JobID
rs2!HistoryDesc = "Ad_PerfChecks was turned OFF"
rs2.Update
Set rs2 = Nothing
RefreshSubData
Me.togAd_PerfChecks.Value = False
Me.togAd_PerfChecks.BackColor = RGB(36, 36, 36)
Me.Ad_PerfChecks = 0
End If
End Sub
在大多数情况下,这工作正常,除了第一次单击由于某种原因在“历史”表中创建了一条没有 JobId 外键的记录。之后,每次单击都会使用我想要的数据创建一条新记录。
这是单击切换按钮 4 次时“历史记录”表中的示例输出:
| HistoryId | JobId | History Desc |
| 1 | | Ad_PerfChecks was turned ON |
| 2 | 1 | Ad_PerfChecks was turned OFF |
| 3 | 1 | Ad_PerfChecks was turned ON |
| 4 | 1 | Ad_PerfChecks was turned OFF |
任何想法如何确保第一次点击获得 JobID 外键?也让我知道是否有更好的方法来解决这个问题。有点接近我的 VBA 知识的边缘。