【问题标题】:Assiging a 'User Stamp' when saving a record保存记录时分配“用户标记”
【发布时间】:2015-10-20 18:08:13
【问题描述】:

所以第一件事是每个表都有 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

我怎样才能在全球范围内做到这一点?

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

【问题讨论】:

  • Access 2010 有触发器别名宏。那将是这样做的理想场所
  • 我不确定我是否完全理解您的意思?我也更喜欢使用 VBA 而不是宏。
  • 使用 VBA,您必须为每个表单单独编码
  • 什么是“触发别名宏”以及如何使用?

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


【解决方案1】:

完全根据您的需求,您可以使用带有以下子的 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 的建议更改了代码。

【讨论】:

  • 如果在BeforeUpdate 事件中调用,它不会产生问题。 -- 如果您使用表单本身作为参数,而不是表单名称,代码会变得更简洁。 Call setTimestamp(Me)
  • 是的@Andre451,我同意传递表单将是完美的解决方案,就像我在 OO-Systems 中所做的那样。但是当我发布答案时我无法尝试。我不知道表单对象类型名称。也许我稍后会更新答案。
  • Public Sub setTimestamp(objForm As Form)Public Sub setTimestamp(objForm As Access.Form)。两者都有效,请使用更易读的那个。
  • 这会导致控制焦点出现问题吗?我想知道,如果用户更新了一个文本框,例如,上面的 VBA 尝试更新其他字段,它会导致问题吗?如果是这样,该值可能需要存储在一个变量中,直到 Form_Unload。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 2019-07-05
相关资源
最近更新 更多