如何通过VBA获取当前使用数据库的人的用户名

立即分享:

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

无需创建自己的“登录”表单来获取用户名

女士访问数据库除非您的数据库有自己的登录表单或机制,否则您能够知道谁当前正在使用/登录到数据库的唯一方法是使用 Windows 操作系统文件之一——特别是“mpr.dll”文件。 如果您以前没有在您的代码中使用过外部 dll,它可能看起来有点令人生畏,但正如您将在下面的代码中看到的,它实际上非常简单。

所以 - 让我们定义我们希望我们的代码做什么......

“让我知道当前登录用户的名字”

首先,代码:

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 中设置函数的方式。

现在已经完成,我们创建自己的函数,我们将从中调用这个外部函数。 我们函数的代码非常少,但让我们遍历关键元素:

  1.  “UserName = Space(255)”——如果你在调试器中单步执行这段代码,你会发现当调用“GetUser()”函数时,传递给它的“UserName”变量实际上被覆盖了。为了实现这一点,该变量需要分配足够的内存来存储数据,所以我们为该变量分配了255个空格字符,因为这应该足以容纳大多数(如果不是全部)用户名。
  2. 我们在“returnStatus”变量中捕获函数调用的返回值。 此处的零 (0) 表示调用成功,其他任何表示发生错误。
  3.  最后,“UserName”变量需要整理,因为它实际上将用空字符填充,因此我们在找到 Chr(0) 之前提取变量中的字符。

看——现在还不错吧! 现在,至少如果你必须处理 mdb 数据库损坏,你会知道谁最后使用了数据库,所以你可以责怪谁! (我当然是在开玩笑!)

作者简介:

Mitchell Pond 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 修复 SQL Server 问题 和 excel 恢复软件产品。 欲了解更多信息,请访问 datanumen.com

立即分享:

评论被关闭。