Har du brug for at vide, hvem i din virksomhed tilføjede en bestemt post? Eller hvem der opdaterede den sidst? Det er et ret almindeligt krav, men desværre ikke et, som Microsoft Access har indbygget funktionalitet til. Blot at tilføje et felt "sidst opdateret af" til din tabel kan (i mange tilfælde) være nok til at opfylde de fleste behov, men hvordan ved du egentlig, hvem der opdaterede posten, hvis Access ikke kan fortælle dig det? Lidt VBA-kode er alt, hvad du behøver, som denne artikel vil vise dig.
Ingen grund til at oprette din egen "login" form for at registrere brugernavn
Medmindre din database har sin egen loginformular eller -mekanisme, er den eneste måde, du vil være i stand til at vide, hvem der i øjeblikket bruger / logger på databasen, er at bruge en af Windows-operativsystemfilerne - specifikt "mpr.dll" fil. Hvis du ikke har brugt eksterne dll'er i din kode før, kan det virke lidt skræmmende, men som du vil se i koden nedenfor, er det faktisk ret ligetil.
Så - lad os definere, hvad vi vil have vores kode til at gøre ...
"Lad mig have navnet på den aktuelt loggede bruger"
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, forklaret
Den første ting, du ser, er, at vi henviser til en ekstern funktion indeholdt i mpr.dll-filen. Vi gør dette ved at erklære et lokalt navn (GetUser) for den offentlige funktion indeholdt i dll (i dette tilfælde WNetGetUserA). - vi definerer også, hvilke parametre der er nødvendige for funktionsopkaldet - i dette tilfælde parametrene “Navn”, “Brugernavn” og “Længde”. Den eneste vi virkelig er interesseret i her er “UserName”, men resten skal også leveres, da det er sådan, funktionen er indstillet i dll.
Nu når det er gjort, opretter vi vores egen funktion, hvorfra vi ringer til denne eksterne funktion. Koden til vores funktion er ret minimal, men lad os løbe igennem nøgleelementerne:
- "Brugernavn = Mellemrum(255)" – hvis du gennemgår koden i debuggeren, vil du se, at når funktionen "GetUser()" kaldes, bliver den "Brugernavn"-variabel, som vi sender til den, faktisk overskrevet. For at det kan ske, skal variablen have tilstrækkelig hukommelse allokeret til, at dataene kan gemmes, så vi allokerer blot 255 mellemrum til variablen, da det burde være mere end nok til, at de fleste (hvis ikke alle) brugernavne kan være inkluderet.
- Vi registrerer returværdien fra funktionsopkaldet i variablen “returnStatus”. Et nul (0) her betyder, at opkaldet blev gennemført, alt andet betyder, at der er opstået en fejl.
- Endelig skal “UserName” -variablen ryddes, da den i det væsentlige polstres med nul tegn, så vi udtrækker de tegn, der er i variablen, før en Chr (0) findes.
Se - nu var det ikke så slemt! Og nu, i det mindste hvis du har at gøre med mdb database korruption, du ved, hvem der brugte databasen sidst, så hvem du kan bebrejde! (Jeg joker her selvfølgelig!)
Forfatter Introduktion:
Mitchell Pond er en datagendannelsesekspert i DataNumen, Inc., som er verdens førende inden for datagendannelsesteknologier, herunder reparere SQL Server problem og excel-genopretningssoftwareprodukter. For mere information besøg www.datanumen.com
