Ž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
Č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
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:
- »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.
- 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.
- 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
