Kako dobiti korisničko ime osobe koja trenutno koristi bazu podataka putem VBA

Podijeli sada:

Trebate znati ko je u vašem preduzeću dodao određeni zapis? Ili ko ga je zadnji ažurirao? To je prilično uobičajen zahtjev, ali nažalost ne onaj za koji Microsoft Access ima ugrađenu funkcionalnost. Jednostavno dodavanje polja „zadnji put ažurirao“ u vašu tabelu može (u mnogim slučajevima) biti dovoljno da zadovolji većinu potreba, ali kako tačno znati ko je ažurirao zapis ako vam Access to ne može reći? Malo VBA koda je sve što vam treba, kao što će vam ovaj članak pokazati.

Nema potrebe za kreiranjem vlastitog “login” obrasca za snimanje korisničkog imena

Ms Access DatabaseOsim ako vaša baza podataka nema svoj obrazac za prijavu ili mehanizam, tada ćete jedini način na koji ćete moći znati ko trenutno koristi/prijavljen na bazu podataka je da koristite jednu od datoteka operativnog sistema Windows – konkretno “mpr.dll” fajl. Ako ranije niste koristili vanjske dll-ove u svom kodu, to može izgledati pomalo zastrašujuće, ali kao što ćete vidjeti u kodu ispod, zapravo je prilično jednostavno.

Dakle – hajde da definišemo šta želimo da naš kod radi…

“Daj mi ime trenutno prijavljenog korisnika”

Prvo, kod:

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

Šifra, objašnjeno

Trenutno prijavljen korisnik

Prva stvar koju ćete vidjeti je da pravimo referencu na eksternu funkciju, sadržanu u datoteci mpr.dll. To radimo tako što deklariramo lokalno ime (GetUser) za javnu funkciju sadržanu u dll-u (u ovom slučaju, WNetGetUserA). – također definiramo koji su parametri potrebni za poziv funkcije – u ovom slučaju parametri “Name”, “UserName” i “Length”. Jedini koji nas ovdje stvarno zanima je "UserName", ali ostatak također mora biti isporučen jer je tako funkcija postavljena unutar dll-a.

Sada kada je to učinjeno, kreiramo vlastitu funkciju iz koje ćemo uputiti poziv ovoj vanjskoj funkciji. Kod za našu funkciju je prilično minimalan, ali prođimo kroz ključne elemente:

  1.  „KorisničkoIme = Razmak(255)“ – ako pogledate kod u debuggeru, vidjet ćete da kada se pozove funkcija „GetUser()“, varijabla „KorisničkoIme“ koju joj prosljeđujemo zapravo se prepisuje. Da bi se to dogodilo, varijabli je potrebno dodijeliti dovoljno memorije za pohranu podataka, tako da varijabli dodjeljujemo samo 255 razmaka jer bi to trebalo biti više nego dovoljno za većinu (ako ne i sva) korisnička imena.
  2. Povratnu vrijednost iz poziva funkcije hvatamo u varijablu “returnStatus”. Nula (0) ovdje znači da je poziv bio uspješan, sve ostalo znači da je došlo do greške.
  3.  Konačno, varijablu “UserName” treba srediti jer će u suštini biti napunjena nul znakovima tako da izdvajamo znakove koji se nalaze u varijabli prije nego što se pronađe Chr(0).

Vidite – to nije bilo tako loše! A sada, barem ako se moraš nositi s tim oštećenje mdb baze podataka, znat ćete ko je zadnji koristio bazu podataka pa koga možete kriviti! (Šalim se, naravno!)

Uvod za autora:

Mitchell Pond je stručnjak za oporavak podataka DataNumen, Inc., koji je svjetski lider u tehnologijama za oporavak podataka, uključujući Popravak SQL Server Problem i Excel softverski proizvodi za oporavak. Za više informacija posjetite www.datanumen.com

Podijeli sada:

Komentari su zatvoreni.