Sådan får du brugernavnet på den person, der i øjeblikket bruger databasen via VBA

Har du brug for at vide, hvem i din virksomhed tilføjede en bestemt post? Eller hvem der opdaterede den sidst? Det er et ret almindeligt krav, men desværre ikke et, som Microsoft Access har indbygget funktionalitet til. Blot at tilføje et felt "sidst opdateret af" til din tabel kan (i mange tilfælde) være nok til at opfylde de fleste behov, men hvordan ved du egentlig, hvem der opdaterede posten, hvis Access ikke kan fortælle dig det? Lidt VBA-kode er alt, hvad du behøver, som denne artikel vil vise dig.

Ingen grund til at oprette din egen "login" form for at registrere brugernavn

MS Access DatabaseMedmindre din database har sin egen loginformular eller -mekanisme, er den eneste måde, du vil være i stand til at vide, hvem der i øjeblikket bruger / logger på databasen, er at bruge en af ​​Windows-operativsystemfilerne - specifikt "mpr.dll" fil. Hvis du ikke har brugt eksterne dll'er i din kode før, kan det virke lidt skræmmende, men som du vil se i koden nedenfor, er det faktisk ret ligetil.

Så - lad os definere, hvad vi vil have vores kode til at gøre ...

"Lad mig have navnet på den aktuelt loggede bruger"

For det første 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, forklaret

Den aktuelt loggede bruger

Den første ting, du ser, er, at vi henviser til en ekstern funktion indeholdt i mpr.dll-filen. Vi gør dette ved at erklære et lokalt navn (GetUser) for den offentlige funktion indeholdt i dll (i dette tilfælde WNetGetUserA). - vi definerer også, hvilke parametre der er nødvendige for funktionsopkaldet - i dette tilfælde parametrene “Navn”, “Brugernavn” og “Længde”. Den eneste vi virkelig er interesseret i her er “UserName”, men resten skal også leveres, da det er sådan, funktionen er indstillet i dll.

Nu når det er gjort, opretter vi vores egen funktion, hvorfra vi ringer til denne eksterne funktion. Koden til vores funktion er ret minimal, men lad os løbe igennem nøgleelementerne:

  1.  "Brugernavn = Mellemrum(255)" – hvis du gennemgår koden i debuggeren, vil du se, at når funktionen "GetUser()" kaldes, bliver den "Brugernavn"-variabel, som vi sender til den, faktisk overskrevet. For at det kan ske, skal variablen have tilstrækkelig hukommelse allokeret til, at dataene kan gemmes, så vi allokerer blot 255 mellemrum til variablen, da det burde være mere end nok til, at de fleste (hvis ikke alle) brugernavne kan være inkluderet.
  2. Vi registrerer returværdien fra funktionsopkaldet i variablen “returnStatus”. Et nul (0) her betyder, at opkaldet blev gennemført, alt andet betyder, at der er opstået en fejl.
  3.  Endelig skal “UserName” -variablen ryddes, da den i det væsentlige polstres med nul tegn, så vi udtrækker de tegn, der er i variablen, før en Chr (0) findes.

Se - nu var det ikke så slemt! Og nu, i det mindste hvis du har at gøre med mdb database korruption, du ved, hvem der brugte databasen sidst, så hvem du kan bebrejde! (Jeg joker her selvfølgelig!)

Forfatter Introduktion:

Mitchell Pond er en datagendannelsesekspert i DataNumen, Inc., som er verdens førende inden for datagendannelsesteknologier, herunder reparere SQL Server problem og excel-genopretningssoftwareprodukter. For mere information besøg www.datanumen.com

Kommentarer er lukket.