TopPicLogo TopPicText

Блокировка (монопольное открытие) таблицы

Автор: Дмитрий Сонных sonni-dim@mail.ru

Блокировка на уровне набора записей
   Технология DAO позволяет накладывать блокировку на целую таблицу (или группу таблиц, если объект Recorset основан на объединении нескольких таблиц). Она может понадобиться тогда, когда требуется выполнить некоторые действия со всей таблицей целиком или изменить структуру таблицы, но при этом нежелательно запрещать доступ ко всей базе.

' -----------------------------------------------------------
' Расположение переменной Recordset зависит от области действия
' блокировки таблицы ' секция Declare модуля - для всей задачи
' секция Declare модуля формы - пока открыта форма
' тело процедуры - пока выполняется процедура
Public rst As Recordset
Public db As Database      ' база данных
Public strPathDB As String ' путь к базе
' -----------------------------------------------------------
' Помещаем на форме кнопку. Называем её cmdTable
' На событие Click вешаем обработку
Private Sub cmdTable_Click()
' При первом нажатии кнопки устанавливается режим
' блокировки таблицы,
' при повтрном - снимается.
' Переменная strPathDB должна быть уже определена
On Error GoTo Err_cmdTable_Click

' Проверяем инициализацию объекта rst
    If rst Is Nothing Then
    ' Устанавливаем режим монопольного доступа
        Set db = OpenDatabase(strPathDB)
        Set rst = db.OpenRecordset("имя_таблицы", dbOpenTable, dbDenyWrite + dbDenyRead)
    ' можете установить какой-либо признак блокировки
    ' Я лично меняю надпись на кнопке
    Else
    ' Снимаем режим блокировки
        rst.Close
        Set rst = Nothing
    ' убирается признак блокировки
    End If

Exit_cmdTable_Click:
    Exit Sub

Err_cmdTable_Click:
' При попытке заблокировать уже открытую таблицу
' ведается сообщение об ошибке (можно вставить свой обработчик)
    MsgBox Err.Description
    Resume Exit_cmdTable_Click
End Sub
Назад ToTop
L.E. 04.08.2015
Рейтинг@Mail.ru