保存记录时分配 'User Stamp'

Assiging a 'User Stamp' when saving a record

所以第一件事是每个 table 有 4 个字段。 Created_ByCreated_DateLast_Updated_ByLast_Updated_Date。这将使我能够跟踪谁保存了什么记录以及何时保存。我想要一个 public 子(或函数?)在保存任何记录时更新这些字段。

理想情况下,我不想 copy/call 我的代码来自每个表单,但如果这是必要的,我会的。我想有一种方法可以在全球范围内做到这一点。

我目前有:

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

如何在全球范围内执行此操作?

如果这是全球性的,我不确定 'me' 是否是对我们的正确引用?

完全符合您的需求,您可以使用带有以下子

的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 的建议更改了代码。