'Это в раздел описаний модуля
Type UserRec
bMach(1 To 32) As String * 1 '1-е 32 байта для имени машины
bUser(1 To 32) As String * 1 '2-е 32 байта для имени пользователя
End Type
'Это сама функция
Function WhosOn() As String
Dim ilaccdbFile As Integer
Dim i As Integer
Dim sLogStr As String, sLogins As String
Dim sMach As String, sUser As String
Dim rUser As UserRec ' Defined in General
Dim spath
Dim db As Database
On Error GoTo Err_WhosOn
'получаем ссылку на текщую БД
Set db = DBEngine.Workspaces(0).Databases(0)
' определяем путь и имя текущей базы
spath = db.Name
' получаем незанятый номера файла для использования инструкцией OPEN
ilaccdbFile = FreeFile
'формируем имя laccdb-файла
spath = Left(spath, Len(spath) - 5) & "laccdb"
'проверяем наличие laccdb-файла
If Dir(spath) = "" Then WhosOn = "laccdb-файл отсутствует": GoTo Exit_WhosOn
'открываем laccdb-файл для чтения
Open spath For Binary Access Read Shared As ilaccdbFile
'пока не встречен конец laccdb-файла
Do While Not EOF(ilaccdbFile)
'считываем из файла данные в переменную rUser 32 байта
'в rUser.bMach и 32 байта в rUser.bUser
Get ilaccdbFile, , rUser
i = 1: sMach = ""
'пока код i-го символа в переменной rUser.bMach <> 0
'добавляем i-й символ rUser.bMach к переменной sMach
'по окончании цикла в переменной sMach будет
'сетевое имя подключенной машины
While Asc(rUser.bMach(i)) <> 0
sMach = sMach & rUser.bMach(i)
i = i + 1
Wend
i = 1: sUser = ""
'пока код i-го символа в переменной rUser.bUser <> 0
'добавляем i-й символ rUser.bUser к переменной sUser
'по окончании цикла в переменной sUser будет имя пользователя
While Asc(rUser.bUser(i)) <> 0
sUser = sUser & rUser.bUser(i)
i = i + 1
Wend
'формируем строку с именем машины и пользователя
'(переменные sMach и sUser)
sLogStr = sMach & " -- " & sUser
'если такой пары машина-пользователь нет в результирующей
'добавляем в результирующую строку и разделитель (";")
If InStr(sLogins, sLogStr) = 0 Then sLogins = sLogins & sLogStr _
& ";"
Loop
'закрываем laccdb-файл
Close ilaccdbFile
'присваиваем функции сформированную строку
WhosOn = sLogins
Exit_WhosOn:
Set db = Nothing
Exit Function
Err_WhosOn:
If Err = 68 Then
MsgBox "Нет доступа к laccdb файлу.", 48, "Ошибка"
Else
MsgBox "Ошибка #" & Err & Chr(13) & Chr(10) & Error(Err), 48, "Ошибка"
Close ilaccdbFile
End If
Resume Exit_WhosOn
End Function
|