Jak uzyskać nazwę użytkownika osoby aktualnie używającej bazy danych za pośrednictwem VBA

Podziel się teraz:

Chcesz wiedzieć, kto w Twojej firmie dodał konkretny rekord? Albo kto go ostatnio zaktualizował? To dość powszechne wymaganie, ale niestety nie jest ono dostępne dla wbudowanej funkcji programu Microsoft Access. Samo dodanie pola „ostatnia aktualizacja przez” do tabeli może (w wielu przypadkach) wystarczyć, aby spełnić większość potrzeb, ale skąd wiesz, kto zaktualizował rekord, jeśli Access nie potrafi tego zrobić? Wystarczy odrobina kodu VBA, co pokaże ten artykuł.

Nie ma potrzeby tworzenia własnego formularza „logowania”, aby przechwycić nazwę użytkownika

Baza danych MS AccessO ile baza danych nie ma własnego formularza logowania lub mechanizmu, jedynym sposobem, aby dowiedzieć się, kto aktualnie korzysta z bazy danych / jest do niej zalogowany, jest użycie jednego z plików systemu operacyjnego Windows - w szczególności „mpr.dll” plik. Jeśli wcześniej nie korzystałeś z zewnętrznych bibliotek dll w swoim kodzie, może się to wydawać nieco zniechęcające, ale jak zobaczysz w kodzie poniżej, jest to całkiem proste.

A więc - zdefiniujmy, co ma robić nasz kod…

„Podaj nazwę aktualnie zalogowanego użytkownika”

Po pierwsze, kod:

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

Kod wyjaśniony

Aktualnie zalogowany użytkownik

Pierwszą rzeczą, jaką zobaczysz, jest to, że tworzymy odniesienie do funkcji zewnętrznej zawartej w pliku mpr.dll. Robimy to, deklarując lokalną nazwę (GetUser) dla funkcji publicznej zawartej w dll (w tym przypadku WNetGetUserA). - określamy również, jakie parametry są potrzebne do wywołania funkcji - w tym przypadku parametry „Nazwa”, „Nazwa użytkownika” i „Długość”. Jedynym, co nas tutaj naprawdę interesuje, jest „nazwa użytkownika”, ale reszta również musi być dostarczona, ponieważ tak jest konfigurowana funkcja w dll.

Teraz, gdy zostało to zrobione, tworzymy własną funkcję, z której będziemy wykonywać wywołanie tej funkcji zewnętrznej. Kod naszej funkcji jest dość minimalny, ale przejrzyjmy kluczowe elementy:

  1.  „UserName = Space(255)” – jeśli prześledzisz kod w debugerze, zobaczysz, że po wywołaniu funkcji „GetUser()” przekazana jej zmienna „UserName” zostaje nadpisana. Aby to nastąpiło, zmienna potrzebuje wystarczającej ilości pamięci do przechowywania danych, więc przydzielamy jej 255 znaków spacji, ponieważ powinno to w zupełności wystarczyć do przechowywania większości (jeśli nie wszystkich) nazw użytkowników.
  2. Zwracaną wartość z wywołania funkcji przechwytujemy w zmiennej „returnStatus”. Zero (0) oznacza tutaj, że połączenie się powiodło, cokolwiek innego oznacza, że ​​wystąpił błąd.
  3.  Wreszcie zmienna „UserName” wymaga uporządkowania, ponieważ będzie zasadniczo wypełniona znakami zerowymi, więc wyodrębniamy znaki znajdujące się w zmiennej przed znalezieniem Chr (0).

Widzicie - teraz nie było tak źle, prawda! A teraz przynajmniej jeśli masz do czynienia uszkodzenie bazy danych mdb, dowiesz się, kto ostatnio korzystał z bazy danych, więc kogo możesz winić! (Oczywiście żartuję!)

Wprowadzenie autora:

Mitchell Pond jest ekspertem w dziedzinie odzyskiwania danych w DataNumen, Inc., która jest światowym liderem w technologiach odzyskiwania danych, w tym naprawa SQL Server problem i doskonałe oprogramowanie do odzyskiwania. po więcej informacji odwiedź www.datanumen.com

Podziel się teraz:

Możliwość dodawania komentarzy nie jest dostępna.