Wilt u weten wie in uw bedrijf een bepaald record heeft toegevoegd? Of wie heeft het het laatst bijgewerkt? Het is een vrij algemene vereiste, maar helaas niet een waarvoor Microsoft Access functionaliteit heeft ingebouwd. Het simpelweg toevoegen van een veld "laatst bijgewerkt door" aan uw tabel kan (in veel gevallen) voldoende zijn om te voldoen aan most behoeften, maar hoe weet u wie het record heeft bijgewerkt als Access u dat niet kan vertellen? Een kleine VBA-code is alles wat je nodig hebt, zoals dit artikel je laat zien.
Het is niet nodig om uw eigen aanmeldingsformulier te maken om de gebruikersnaam vast te leggen
Tenzij 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
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:
- "UserName = Space (255)" - als u door de code in de debugger loopt, zult u zien dat wanneer de functie "GetUser ()" wordt aangeroepen, de variabele "UserName" die we eraan doorgeven, daadwerkelijk wordt overschreven. Om dat te laten gebeuren, heeft de variabele voldoende geheugen nodig om de gegevens in op te slaan, dus we wijzen 255 spatie-tekens toe aan de variabele, want dat zou meer dan genoeg moeten zijn voor most (zo niet alle) gebruikersnamen die moeten worden opgenomen in.
- 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.
- 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
