Як отримати ім’я користувача особи, яка зараз використовує базу даних через VBA

Поділитися зараз:

Потрібно знати, хто у вашій компанії додав певний запис? Або хто оновив його останнім? Це досить поширена вимога, але, на жаль, Microsoft Access не має вбудованої функціональності для її виконання. Простого додавання поля «останнє оновлення» до таблиці (у багатьох випадках) може бути достатньо для задоволення більшості потреб, але як дізнатися, хто оновив запис, якщо Access не може вам цього сказати? Вам знадобиться лише трохи коду VBA, як покаже ця стаття.

Не потрібно створювати власну форму для входу, щоб записати ім'я користувача

База даних доступу паніЯкщо у вашій базі даних немає власної форми або механізму входу, тоді єдиним способом, яким ви зможете дізнатись, хто в даний момент використовує / ввійшов у базу даних, є використання одного з файлів операційної системи Windows - зокрема „mpr.dll” файл. Якщо ви раніше не використовували зовнішні DLL-файли у своєму коді, це може здатися трохи лякаючим, але, як ви побачите в коді нижче, насправді це досить прямо.

Тож - давайте визначимо, що ми хочемо, щоб робив наш код ...

“Дайте мені ім’я поточного користувача, який ввійшов у систему”

По-перше, код:

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

Код, пояснений

Користувач, який зараз ввійшов до системи

Перше, що ви побачите, це те, що ми робимо посилання на зовнішню функцію, що міститься у файлі mpr.dll. Ми робимо це, оголошуючи локальне ім’я (GetUser) для загальнодоступної функції, що міститься в dll (в даному випадку, WNetGetUserA). - ми також визначаємо, які параметри необхідні для виклику функції - у цьому випадку параметри “Name”, “UserName” та “Length”. Єдиний, кого нас насправді цікавить тут, це “UserName”, але решту також потрібно надати, оскільки саме так функція налаштована в DLL.

Тепер, коли це зроблено, ми створюємо власну функцію, з якої будемо здійснювати виклик до цієї зовнішньої функції. Код для нашої функції досить мінімальний, але давайте розглянемо ключові елементи:

  1.  «Ім’я користувача = Пробіл(255)» – якщо ви покроково розглянете код у налагоджувачі, то побачите, що під час виклику функції «GetUser()» змінна «Ім’я користувача», яку ми їй передаємо, фактично перезаписується. Для цього змінній потрібно виділити достатньо пам’яті для зберігання даних, тому ми просто виділяємо змінній 255 символів пробілу, оскільки цього має бути більш ніж достатньо для розміщення більшості (якщо не всіх) імен користувачів.
  2. Ми фіксуємо повернене значення із виклику функції у змінну “returnStatus”. Нуль (0) тут означає, що виклик був успішним, все інше означає, що сталася помилка.
  3.  Нарешті, змінна “UserName” потребує впорядкування, оскільки вона, по суті, буде заповнена нульовими символами, тому ми витягуємо символи, які знаходяться у змінній до того, як буде знайдено Chr (0).

Бачите - тепер це було не так вже й погано! А тепер, принаймні, якщо вам доведеться мати справу пошкодження бази даних mdb - -, ви дізнаєтесь, хто останнім користувався базою даних, щоб кого винуватити! (Я тут жартую, звичайно!)

Вступ автора:

Мітчелл Понд - фахівець з відновлення даних у DataNumen, Inc., яка є світовим лідером у галузі технологій відновлення даних, в тому числі ремонт SQL Server проблема та програмні продукти Excel для відновлення. Для отримання додаткової інформації відвідайте WWW.datanumen.com

Поділитися зараз:

Коментарі закриті.