Hvordan få brukernavnet til personen som for øyeblikket bruker databasen via VBA

Trenger du å vite hvem i virksomheten din som har lagt til en bestemt post? Eller hvem oppdaterte den sist? Det er et ganske vanlig krav, men dessverre ikke et som Microsoft Access har innebygd funksjonalitet for. Bare å legge til et "sist oppdatert av"-felt i tabellen kan (i mange tilfeller) være nok til å møte most behov, men hvordan vet du hvem som oppdaterte posten hvis Access ikke kan fortelle deg det? Litt VBA-kode er alt du trenger, som denne artikkelen vil vise deg.

Du trenger ikke å lage ditt eget "påloggingsskjema" for å fange brukernavn

Ms Access-databaseMed mindre databasen din har sitt eget påloggingsskjema eller mekanisme, er den eneste måten du vil kunne vite hvem som bruker/logger inn på databasen for øyeblikket, ved å bruke en av Windows-operativsystemfilene – spesielt "mpr.dll" fil. Hvis du ikke har brukt eksterne dll-er i koden din før, kan det virke litt skremmende, men som du vil se i koden nedenfor, er det faktisk ganske rett frem.

Så - la oss definere hva vi vil at koden vår skal gjøre...

"La meg få navnet på den påloggede brukeren"

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, forklart

Den påloggede brukeren

Det første du ser er at vi refererer til en ekstern funksjon som finnes i mpr.dll-filen. Vi gjør dette ved å erklære et lokalt navn (GetUser) for den offentlige funksjonen i dll-filen (i dette tilfellet WNetGetUserA). – vi definerer også hvilke parametere som er nødvendige for funksjonskallet – i dette tilfellet “Name”, “UserName” og “Length” parametere. Den eneste vi virkelig er interessert i her er "UserName", men resten må også oppgis, da det er hvordan funksjonen er satt opp i dll-en.

Nå det er gjort, lager vi vår egen funksjon, som vi vil ringe til denne eksterne funksjonen fra. Koden for funksjonen vår er ganske minimal, men la oss gå gjennom nøkkelelementene:

  1.  "Brukernavn = Space(255)" - hvis du går gjennom koden i feilsøkeren, vil du se at når funksjonen "GetUser()" kalles, blir "Brukernavn"-variabelen som vi sender til den faktisk overskrevet. For at det skal skje, trenger variabelen nok minne allokert til at dataene kan lagres i, så vi tildeler bare 255 mellomrom til variabelen, da det burde være mer enn nok for most (om ikke alle) brukernavn som skal inneholdes i.
  2. Vi fanger opp returverdien fra funksjonskallet i "returnStatus"-variabelen. En null (0) her betyr at samtalen var vellykket, noe annet betyr at det har oppstått en feil.
  3.  Til slutt må «UserName»-variabelen ryddes opp, da den i hovedsak vil være polstret med nulltegn, så vi trekker ut tegnene som er i variabelen før en Chr(0) blir funnet.

Se – nå var det ikke så ille var det! Og nå, i hvert fall hvis du må forholde deg til mdb database korrupsjon, vil du vite hvem som brukte databasen sist, så hvem du kan skylde på! (Jeg tuller her selvfølgelig!)

Forfatterintroduksjon:

Mitchell Pond er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparasjon SQL Server problem og excel-programvareprodukter for gjenoppretting. For mer informasjon besøk www.datanumen. Med

Kommentarer er stengt.