想知道公司里是谁添加了某条记录?或者是谁最后更新了这条记录?这是一个很常见的需求,但遗憾的是,Microsoft Access 并没有内置相应的功能。在表格中添加一个“最后更新者”字段(在很多情况下)就足以满足大多数需求,但如果 Access 无法提供信息,您该如何知道是谁更新了记录呢?本文将向您展示,您只需要编写一些 VBA 代码即可。
无需创建自己的“登录”表单来获取用户名

所以 - 让我们定义我们希望我们的代码做什么......
“让我知道当前登录用户的名字”
首先,代码:
Declare Function GetUser Lib "mpr.dll" Alias "WNetGetUserA" (ByVal Name As String, ByVal UserName As String, Length As Long) As Long Public Function GetUserName() As String Dim returnStatus As Integer Dim Name, UserName As String 'Allocate space for user name to be stored in UserName = Space(255) ' Call the aliased function in the mpr.dll file. returnStatus = GetUser(Name, UserName, 255) If returnStatus = 0 Then 'Strip the username from the returned string UserName = Left(UserName, InStr(UserName, Chr(0)) - 1) Else ' An error occurred. GetUserName = "Error retrieving the user name." End End If GetUserName = UserName End Function
代码,解释
您会看到的第一件事是我们正在引用一个包含在 mpr.dll 文件中的外部函数。 为此,我们为 dll 中包含的公共函数(在本例中为 WNetGetUserA)声明一个本地名称 (GetUser)。 – 我们还定义了函数调用所需的参数——在本例中为“Name”、“UserName”和“Length”参数。 我们在这里真正感兴趣的唯一一个是“用户名”,但其余部分也必须提供,因为这是在 dll 中设置函数的方式。
现在已经完成,我们创建自己的函数,我们将从中调用这个外部函数。 我们函数的代码非常少,但让我们遍历关键元素:
- “UserName = Space(255)”——如果你在调试器中单步执行这段代码,你会发现当调用“GetUser()”函数时,传递给它的“UserName”变量实际上被覆盖了。为了实现这一点,该变量需要分配足够的内存来存储数据,所以我们为该变量分配了255个空格字符,因为这应该足以容纳大多数(如果不是全部)用户名。
- 我们在“returnStatus”变量中捕获函数调用的返回值。 此处的零 (0) 表示调用成功,其他任何表示发生错误。
- 最后,“UserName”变量需要整理,因为它实际上将用空字符填充,因此我们在找到 Chr(0) 之前提取变量中的字符。
看——现在还不错吧! 现在,至少如果你必须处理 mdb 数据库损坏,你会知道谁最后使用了数据库,所以你可以责怪谁! (我当然是在开玩笑!)
作者简介:
Mitchell Pond 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 修复 SQL Server 问题 和 excel 恢复软件产品。 欲了解更多信息,请访问 datanumen.com
