保存记录时指定“用户印记”

时间:2015-10-20 07:42:30

标签: ms-access access-vba ms-access-2010

首先,每个表都有4个字段。 Created_ByCreated_DateLast_Updated_ByLast_Updated_Date。这将允许我跟踪谁保存了什么记录和何时。我想要一个公共子(或函数?)来保存任何记录时更新这些字段。

理想情况下,我不想从每个表单中复制/调用我的代码,但如果这是必要的话,我会这样做。我想有一种方法可以在全球范围内做到这一点。

我目前有以下内容:

Public gLoggedIn As Integer
Public Function get_global(Global_name As String) As Variant 
 Select Case Global_name
        Case "Employee_ID"
            get_global = gLoggedIn
End Select
End Function

我的下一步是添加vba代码来填充4个字段中的2个。以下是我的一个表单中的内容,但就像我说的那样,我希望能够在每次保存时全局实现。

Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.NewRecord = True Then
    Me.[Created_By] = gLoggedIn
    Me.[Created_Date] = Now()
Else
    Me.[Last_Updated_By] = gLoggedIn
    Me.[Last_Updated_Date] = Now()
End If
End Sub

我如何在全球范围内这样做?

如果这是全球的话,我不确定“我”是否是对我们的正确引用?

1 个答案:

答案 0 :(得分:2)

完全符合您的要求,您可以使用VBA模块和以下子

Public Sub setTimestamp(objForm As Form)
    If objForm.NewRecord = True Then
        objForm![Created_By] = gLoggedIn
        objForm![Created_Date] = DateTime.Now
    Else
        objForm![Last_Updated_By] = gLoggedIn
        objForm![Last_Updated_Date] = DateTime.Now
    End If
End sub

当应该触发时间戳更新时,你需要在每种形式中调用此方法(顺便说一句:我建议在单击保存按钮或字段更新时发生事件,因为在表单更新事件中对表单的数据集进行编辑可能会导致另一个表单更新事件,并可能导致无限循环)。

call setTimestamp(Me)

但你应该考虑使用像@E Mett这样的宏来评论。

另一个提示:如果将变量gLoggedIn设置为public,则无需使用函数即可直接引用。 (您甚至在您的示例中也这样做了)当您想要将模块中的变量隐藏为私有时,函数是有意义的。如果您想了解更多信息,可以将其称为封装

修改 根据andre451的建议改变了代码。