Kako pridobiti uporabniško ime osebe, ki trenutno uporablja bazo podatkov prek VBA

Skupna raba zdaj:

Želite vedeti, kdo v vašem podjetju je dodal določen zapis? Ali kdo ga je nazadnje posodobil? To je precej pogosta zahteva, vendar žal Microsoft Access nima vgrajene funkcionalnosti za to. Preprosto dodajanje polja »nazadnje posodobil« v tabelo je lahko (v mnogih primerih) dovolj za večino potreb, toda kako veste, kdo je posodobil zapis, če vam Access tega ne more povedati? Potrebujete le malo kode VBA, kot vam bo pokazal ta članek.

Za zajem uporabniškega imena ni treba ustvariti lastnega obrazca za prijavo

Gospa Access DatabaseČe vaša baza podatkov nima lastnega obrazca za prijavo ali mehanizma, boste edini način, kako boste vedeli, kdo trenutno uporablja / prijavljen v bazo podatkov, je uporaba ene od datotek operacijskega sistema Windows - natančneje "mpr.dll" mapa. Če v svoji kodi še niste uporabljali zunanjih dll-jev, se vam zdi nekoliko zastrašujoče, toda kot boste videli v spodnji kodi, je pravzaprav precej naravnost naprej.

Torej - določimo, kaj želimo, da naša koda počne ...

"Naj mi ime trenutno prijavljenega uporabnika"

Prvič, koda:

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

Koda, pojasnjena

Trenutno prijavljeni uporabnik

Prva stvar, ki jo boste videli, je, da se sklicujemo na zunanjo funkcijo, ki je v datoteki mpr.dll. To naredimo z deklaracijo lokalnega imena (GetUser) za javno funkcijo, ki jo vsebuje dll (v tem primeru WNetGetUserA). - določimo tudi, kateri parametri so potrebni za klic funkcije - v tem primeru parametri “Name”, “UserName” in “Length”. Edina, ki nas tukaj resnično zanima, je "UserName", vendar je treba navesti tudi preostanek, saj je tako nastavljena funkcija znotraj dll-a.

Zdaj, ko smo končali, ustvarimo lastno funkcijo, iz katere bomo poklicali to zunanjo funkcijo. Koda za našo funkcijo je precej minimalna, a poglejmo si ključne elemente:

  1.  »UporabniškoIme = Presledek(255)« – če v razhroščevalniku korak za korakom pregledate kodo, boste videli, da se ob klicu funkcije »GetUser()« spremenljivka »UporabniškoIme«, ki ji jo posredujemo, dejansko prepiše. Da se to zgodi, potrebuje spremenljivka dovolj pomnilnika, da se vanj shranijo podatki, zato spremenljivki dodelimo le 255 presledkov, saj bi to moralo biti več kot dovolj za večino (če ne vseh) uporabniških imen.
  2. Vrnemo vrednost iz klica funkcije v spremenljivko “returnStatus”. Nič (0) tukaj pomeni, da je bil klic uspešen, karkoli drugega pomeni, da je prišlo do napake.
  3.  Končno je treba spremenljivko "UserName" pospraviti, saj bo v bistvu obložena z ničelnimi znaki, zato izvlečemo znake, ki so v spremenljivki, preden je najden Chr (0).

Glej - zdaj ni bilo tako hudo, kajne! In zdaj, vsaj če imaš opravka s tem mdb korupcije baze podatkov, vedeli boste, kdo je nazadnje uporabljal bazo podatkov, zato koga lahko obtožite! (Tu se seveda šalim!)

Uvod avtorja:

Mitchell Pond je strokovnjak za obnovitev podatkov v DataNumen, Inc., ki je vodilna na svetu na področju tehnologij za obnovitev podatkov, vključno z popravilo SQL Server Problem in excel programske izdelke za obnovitev. Za več informacij obiščite www.datanumen.com

Skupna raba zdaj:

Komentarji so zaprti.