Jak získat uživatelské jméno osoby, která aktuálně používá databázi, pomocí VBA

Sdílej nyní:

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

Databáze MS AccessPokud 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

Aktuálně přihlášený uživatel

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:

  1.  „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.
  2. 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ě.
  3.  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

Sdílej nyní:

Komentáře jsou uzavřeny.