Potřebujete vědět, kdo ve vaší firmě přidal konkrétní záznam? Nebo kdo jej naposledy aktualizoval? Je to docela běžný požadavek, ale bohužel pro něj Microsoft Access nemá vestavěné funkce. Pouhé přidání pole „naposledy aktualizoval“ do tabulky může (v mnoha případech) stačit k uspokojení většiny potřeb, ale jak zjistíte, kdo záznam aktualizoval, když vám Access to neřekne? Stačí vám jen trochu kódu VBA, jak vám ukáže tento článek.
Není třeba vytvářet vlastní „přihlašovací“ formulář k zachycení uživatelského jména
Pokud vaše databáze nemá vlastní přihlašovací formulář nebo mechanismus, pak jediným způsobem, jak zjistit, kdo aktuálně používá / je přihlášen do databáze, je použití jednoho ze souborů operačního systému Windows - konkrétně „mpr.dll“ soubor. Pokud jste ve svém kódu dříve nepoužívali externí dll, může se to zdát trochu skličující, ale jak uvidíte v níže uvedeném kódu, je to ve skutečnosti docela jednoduché.
Takže - definujme, co chceme, aby náš kód dělal ...
"Dovolte mi, abych měl jméno aktuálně přihlášeného uživatele"
Za prvé, kód:
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
Kód, vysvětleno
První věc, kterou uvidíte, je, že odkazujeme na externí funkci obsaženou v souboru mpr.dll. Uděláme to deklarováním místního názvu (GetUser) pro veřejnou funkci obsaženou v dll (v tomto případě WNetGetUserA). - definujeme také, jaké parametry jsou nutné pro volání funkce - v tomto případě parametry „Jméno“, „Uživatelské jméno“ a „Délka“. Jediný, kdo nás zde opravdu zajímá, je „UserName“, ale zbývající část musí být dodána také, protože tak je funkce nastavena v dll.
Nyní, když to bylo provedeno, vytvoříme vlastní funkci, ze které budeme volat tuto externí funkci. Kód naší funkce je docela minimální, ale pojďme si projít klíčové prvky:
- „UživatelskéJméno = Mezera(255)“ – pokud si projdete kód v debuggeru, uvidíte, že při volání funkce „GetUser()“ se proměnná „UživatelskéJméno“, kterou jí předáváme, přepíše. Aby k tomu došlo, potřebuje proměnná dostatek paměti pro uložení dat, takže proměnné přidělíme pouze 255 mezer, protože to by mělo být více než dostatečné pro většinu (ne-li všechna) uživatelská jména.
- Zachytíme návratovou hodnotu z volání funkce v proměnné „returnStatus“. Nula (0) zde znamená, že volání bylo úspěšné, cokoli jiného znamená, že došlo k chybě.
- Nakonec je třeba uklidit proměnnou „UserName“, protože bude v podstatě polstrována nulovými znaky, takže extrahujeme znaky, které jsou v proměnné, než se najde Chr (0).
Podívej - teď to nebylo tak špatné, že! A teď, alespoň pokud se s tím musíte vypořádat poškození databáze mdb, budete vědět, kdo naposledy používal databázi, takže komu můžete zazlívat! (Samozřejmě si dělám legraci!)
Úvod autora:
Mitchell Pond je expert na obnovu dat v DataNumen, Inc., která je světovým lídrem v oblasti technologií pro obnovu dat, včetně opravit SQL Server problém a excelové softwarové produkty pro obnovu. Pro více informací navštivte www.datanumen.com
