Hoe u de gebruikersnaam krijgt van de persoon die momenteel de database gebruikt via VBA

Wilt u weten wie binnen uw bedrijf een bepaald record heeft toegevoegd? Of wie het record voor het laatst heeft bijgewerkt? Het is een veelvoorkomende vraag, maar helaas biedt Microsoft Access hiervoor geen ingebouwde functionaliteit. Het toevoegen van een veld 'laatst bijgewerkt door' aan uw tabel is (in veel gevallen) voldoende, maar hoe weet u wie het record heeft bijgewerkt als Access u dat niet kan vertellen? Met een beetje VBA-code kunt u het probleem oplossen, zoals dit artikel zal laten zien.

Het is niet nodig om uw eigen aanmeldingsformulier te maken om de gebruikersnaam vast te leggen

Mevrouw Access-databaseTenzij uw database een eigen aanmeldingsformulier of -mechanisme heeft, is de enige manier waarop u kunt weten wie momenteel de database gebruikt / aangemeld is, een van de Windows-besturingssysteembestanden te gebruiken, met name de "mpr.dll". het dossier. Als je nog niet eerder externe dll's in je code hebt gebruikt, kan het een beetje ontmoedigend lijken, maar zoals je in de onderstaande code zult zien, is het eigenlijk vrij eenvoudig.

Dus - laten we definiëren wat we willen dat onze code doet ...

"Geef me de naam van de momenteel aangemelde gebruiker"

Ten eerste de code:

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

De code, uitgelegd

De momenteel aangemelde gebruiker

Het eerste dat u zult zien, is dat we verwijzen naar een externe functie, die zich in het bestand mpr.dll bevindt. We doen dit door een lokale naam (GetUser) te declareren voor de openbare functie in de dll (in dit geval WNetGetUserA). - we definiëren ook welke parameters nodig zijn voor de functieaanroep - in dit geval de parameters "Naam", "Gebruikersnaam" en "Lengte". De enige waar we hier echt in geïnteresseerd zijn, is "UserName", maar de rest moet ook worden opgegeven, want zo is de functie ingesteld in de dll.

Nu dat is gebeurd, creëren we onze eigen functie, van waaruit we deze externe functie zullen aanroepen. De code voor onze functie is vrij minimaal, maar laten we de belangrijkste elementen doornemen:

  1.  “UserName = Space(255)” – als je de code stap voor stap doorloopt in de debugger, zul je zien dat wanneer de functie “GetUser()” wordt aangeroepen, de variabele “UserName” die we eraan doorgeven, daadwerkelijk wordt overschreven. Om dat te laten gebeuren, moet er voldoende geheugen aan de variabele worden toegewezen om de gegevens op te slaan. Daarom wijzen we 255 spaties toe aan de variabele, omdat dat meer dan genoeg zou moeten zijn voor de meeste (zo niet alle) gebruikersnamen.
  2. We vangen de geretourneerde waarde van de functieaanroep op in de variabele "returnStatus". Een nul (0) betekent hier dat de oproep succesvol was, iets anders betekent dat er een fout is opgetreden.
  3.  Ten slotte moet de variabele "Gebruikersnaam" worden opgeruimd, aangezien deze in wezen wordt opgevuld met nul-tekens, dus extraheren we de tekens die in de variabele staan ​​voordat een Chr (0) wordt gevonden.

Kijk, dat was niet zo erg, toch! En nu, als je er tenminste mee te maken hebt mdb-database corruptie, je weet wie de database het laatst heeft gebruikt, dus wie je de schuld kunt geven! (Ik maak hier natuurlijk een grapje!)

Auteur Introductie:

Mitchell Pond is een expert op het gebied van gegevensherstel in DataNumen, Inc., de wereldleider in technologieën voor gegevensherstel, waaronder reparatie SQL Server probleem en Excel-herstelsoftwareproducten. Voor meer informatie bezoek www.datanumen.com

Reacties zijn gesloten.