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
Osim 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
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:
- „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.
- 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.
- 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
