Hur får jag användarnamnet på den person som för närvarande använder databasen via VBA

Behöver du veta vem i ditt företag som lade till en viss post? Eller vem som uppdaterade den senast? Det är ett ganska vanligt krav, men tyvärr inte ett som Microsoft Access har inbyggd funktionalitet för. Att bara lägga till ett fält "senast uppdaterad av" i din tabell kan (i många fall) räcka för att tillgodose de flesta behov, men hur vet du vem som uppdaterade posten om Access inte kan berätta det för dig? Lite VBA-kod är allt du behöver, vilket den här artikeln visar dig.

Du behöver inte skapa ditt eget "inloggningsformulär" för att fånga användarnamn

MS Access DatabaseSåvida inte din databas har sin egen inloggningsform eller mekanism, är det enda sättet du kan veta vem som för närvarande använder / inloggade i databasen är att använda en av Windows-operativsystemfilerna - specifikt "mpr.dll" fil. Om du inte har använt externa dll-filer i din kod tidigare kan det verka lite skrämmande, men som du ser i koden nedan är det faktiskt ganska rakt framåt.

Så - låt oss definiera vad vi vill att vår kod ska göra ...

"Låt mig få namnet på den för närvarande inloggade användaren"

För det första koden:

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

Koden, förklarad

Den för närvarande inloggade användaren

Det första du ser är att vi hänvisar till en extern funktion som finns i mpr.dll-filen. Vi gör detta genom att förklara ett lokalt namn (GetUser) för den offentliga funktionen som finns i dll (i detta fall WNetGetUserA). - vi definierar också vilka parametrar som är nödvändiga för funktionsanropet - i detta fall parametrarna "Namn", "Användarnamn" och "Längd". Det enda vi verkligen är intresserade av här är “UserName” men resten måste också tillhandahållas eftersom det är så som funktionen är inställd i dll.

Nu när det har gjorts skapar vi vår egen funktion, från vilken vi ringer till denna externa funktion. Koden för vår funktion är ganska minimal men låt oss gå igenom nyckelelementen:

  1.  ”Användarnamn = Mellanslag(255)” – om du stegvis följer koden i felsökaren ser du att när funktionen ”GetUser()” anropas, så skrivs variabeln ”Användarnamn” som vi skickar till den över. För att det ska ske behöver variabeln tillräckligt med minne allokerat för att data ska kunna lagras, så vi allokerar bara 255 mellanslag till variabeln eftersom det borde vara mer än tillräckligt för att de flesta (om inte alla) användarnamn ska kunna inkluderas.
  2. Vi fångar returvärdet från funktionsanropet i variabeln “returnStatus”. En noll (0) här betyder att samtalet lyckades, allt annat betyder att ett fel har inträffat.
  3.  Slutligen behöver "UserName" -variabeln städas eftersom den i huvudsak kommer att fyllas med null-tecken så att vi extraherar de tecken som finns i variabeln innan en Chr (0) hittas.

Se - nu var det inte så illa var det! Och nu, åtminstone om du måste ta itu med mdb-databasskada, du vet vem som använde databasen senast så vem du kan skylla på! (Jag skojar här förstås!)

Författarintroduktion:

Mitchell Pond är en dataåterställningsexpert i DataNumen, Inc., som är världsledande inom teknik för återställning av data, inklusive reparation SQL Server Problemet och Excel-programvara för återställningsprogramvara. För mer information besök www.datanumen.com

Kommentarer är stängda.