Нужно знать, кто в вашем бизнесе добавил ту или иную запись? Или кто последний раз обновлял? Это довольно распространенное требование, но, к сожалению, не то, для которого Microsoft Access имеет встроенную функциональность. Простого добавления поля «последнее обновление» в вашу таблицу может (во многих случаях) быть достаточно, чтобы удовлетворить most потребности, но как узнать, кто обновил запись, если 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). — мы также определяем, какие параметры необходимы для вызова функции — в данном случае параметры «Имя», «Имя пользователя» и «Длина». Единственное, что нас действительно интересует здесь, это «UserName», но остальные также должны быть предоставлены, поскольку именно так функция настроена в dll.
Теперь, когда это сделано, мы создаем нашу собственную функцию, из которой мы будем вызывать эту внешнюю функцию. Код для нашей функции довольно минимален, но давайте пробежимся по ключевым элементам:
- «UserName = Space(255)» — если вы пройдёте код в отладчике, вы увидите, что при вызове функции «GetUser()» переменная «UserName», которую мы ей передаем, фактически перезаписывается. Чтобы это произошло, переменной требуется достаточно памяти, выделенной для хранения данных, поэтому мы просто выделяем 255 пробелов для переменной, так как этого должно быть более чем достаточно для m.ost (если не все) имена пользователей, которые должны содержаться.
- Мы фиксируем возвращаемое значение из вызова функции в переменной «returnStatus». Ноль (0) здесь означает, что вызов был успешным, все остальное означает, что произошла ошибка.
- Наконец, переменная «UserName» нуждается в очистке, поскольку она будет по существу дополнена нулевыми символами, поэтому мы извлекаем символы, которые находятся в переменной, до того, как будет найден Chr (0).
Видите – это было не так уж и плохо! И теперь, по крайней мере, если вам придется иметь дело с повреждение базы данных mdb, вы будете знать, кто последним использовал базу данных, чтобы кого можно было обвинить! (я тут шучу, конечно!)
Об авторе:
Митчелл Понд — эксперт по восстановлению данных в DataNumen, Inc., которая является мировым лидером в области технологий восстановления данных, включая ремонт SQL Server проблема и программные продукты для восстановления Excel. Для получения дополнительной информации посетите www.datanumen.com
