【发布时间】:2013-11-06 21:48:38
【问题描述】:
我想为我创建的表单创建审核跟踪,记录用户在此表单上运行某些操作时的记录。
该表单名为“Jobs”,上面有许多切换开关。
当用户点击一个切换开关打开/关闭时,我想在一个名为“历史”的表中自动记录一些信息。
“历史”表将包含以下字段:
- 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 知识的边缘。
【问题讨论】: