монопольный режим

Программирование на Visual Basic for Applications
bs
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 31.01.2002 (Чт) 13:47
Откуда: Russia

монопольный режим

Сообщение bs » 28.08.2003 (Чт) 13:25

1. Как можно установить, чтобы база данных access открывалась в монопольном режиме по умолчанию?

2. Как программно определить при открытии базы данных, открыта ли она уже другими пользователями?

Заранее спасибо.

.COM
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 11.07.2003 (Пт) 22:10
Откуда: Россия, Москва

Сообщение .COM » 28.08.2003 (Чт) 13:47

№2

можно попробовать поискать в папке с базой файл ИмяБазы.ldb
Если есть, значит уже открыта...Ну а если нет...Значит нет...

amda
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 134
Зарегистрирован: 11.09.2002 (Ср) 15:14
Откуда: Russia, Волгоградская обл., г. Волжский

Re: монопольный режим

Сообщение amda » 29.08.2003 (Пт) 10:23

bs писал(а):2. Как программно определить при открытии базы данных, открыта ли она уже другими пользователями?


взято не помню откуда.
*********************************************
Функция показывает имя пользователя ACCESS и имя компьютера подключенных к базе данных
Никакие дополнительные библиотеки не используются, работает с Access 2.0 и выше.
А принцип - анализ .ldb
Авторство не мое, я только ее немного правил, чтоб она работала и на Access 2.0
Кто автор к сожалению не знаю.

Код: Выделить всё
'Это в раздел описаний модуля
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 iLDBFile 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
iLDBFile = freefile
'формируем имя ldb-файла
spath = Left(spath, Len(spath) - 3) & "ldb"
'проверяем наличие ldb-файла
If Dir(spath) = "" Then WhosOn = "ldb-файл отсутствует": GoTo Exit_WhosOn
'открываем ldb-файл для чтения
Open spath For Binary Access Read Shared As iLDBFile
'пока не встречен конец ldb-файла
Do While Not EOF(iLDBFile)
'считываем из файла данные в переменную rUser 32 байта
'в rUser.bMach и 32 байта в rUser.bUser
   Get iLDBFile, , 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
'закрываем ldb-файл
Close iLDBFile
'присваиваем функции сформированную строку
WhosOn = sLogins

Exit_WhosOn:
    Set db = Nothing
   Exit Function

Err_WhosOn:
    If Err = 68 Then
       MsgBox "Нет доступа к LDB файлу.", 48, "Ошибка"
    Else
       MsgBox "Ошибка #" & Err & Chr(13) + Chr(10) & Error(Err), 48,
"Ошибка"
        Close iLDBFile
    End If
    Resume Exit_WhosOn
End Function

****************************************************
автор Сергей Гаврилов. Я это пользую успешно.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 86

    TopList