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
O 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
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:
- „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.
- 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.
- 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
