如何通過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中包含的公共功能的本地名稱(GetUser)(在本例中為WNetGetUserA)。 –我們還定義了函數調用所需的參數–在這種情況下,“名稱”,“用戶名”和“長度”參數。 我們這裡唯一真正感興趣的是“ UserName”,但其餘部分也必須提供,因為這是在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

立即分享:

評論被關閉。