Новости arrow Статьи arrow Базы данных arrow Схемы блокировок в Базах Данных Access  
среда, 07 января 2009
Меню
Новости
Каталог ссылок
Контакты
Поиск
Статьи
Форум
Книги
Music
Video
Humor
Вход





Забыли пароль?
Вы не зарегистрированы. Регистрация
Погода

 

Rambler's Top100 Rambler's Top100  
Схемы блокировок в Базах Данных Access
Написал Admin   
вторник, 30 января 2007
Список статей
Схемы блокировок в Базах Данных Access
Страница 2
При работе с Базами Данных в многопользовательском режиме возникают ситуации, когда необходимо ограничить число обращающихся пользователей к данным. Это делается для того, чтобы предотвратить одновременное обновление одной и той же записи, при глобальном обновленим данных или при техническом обслуживания самой Базы Данных.

 

Процессор Баз Данных обеспечивает три уровня блокировок:

  • Блокировка Базы Данных. На этом уровне блокировки к Базе Данных может обращаться только один пользователь. Такой уровень блокировки применяется для глобального изменения или обновления данных или при техническом обслуживании Базы Данных- сжатии;
  • Блокировка Таблицы. На этом уровне блокировки к таблице может обращаться только один пользователь. Такой уровень блокировки применяется в тех случаях, когда необходимо обработать сразу несколько записей таблицы.
  • Блокировка страницы. На этом уровне к заблокированной странице может обращаться только один пользователь. Это самый нижний уровень блокировки.

Блокировка Базы Данных 

Блокиривка на уровне Базы Данных осуществляется присвоением свойству Exclusive, при открытии БД, значения True. При использовании вами элемента управления Data, в его свойствах установите Exclusive = True . Если же вы используете объект DAO, то при  присвоении значения объекту db установите в True значение второго параметра метода OpenDatabase:

Set db = DBEngine.OpenDatabase(“C:Biblio.mdb”, True)

Когда База Данных заблокирована таким образом, тодругие пользователи не смогут  ее открыть. При попытке обращения к заблокированной Базе Данных вы получите сообщение: 

“Couldn’t use ‘C:Biblio.mdb’; file already in use.”

“Невозможно использовать ‘C:Biblio.mdb’; файл уже используется”

Одновременно с этим генерируется перехватываемая ошибка – 3045,  используя которую вы можете завершить программу, которая обращается к заблокированной Базе Данных, т.к. после возникновения ошибки программа продолжает выполняться, хотя База Данных так и не была открыта.

При использовании элемента управления Data в обработчик события Error вставляется следующий код:

Private Sub Data1_Error(DataErr As Integer, Response As Integer) 

If Err = 3045 Then 

MsgBox "Доступ к Базе Данных закрыт. Повторите запрос через несколько минут." &  _    ,vbCritical, "Data_Error"

End

End If

End Sub

 

При использовании объекта DAO в той процедуре, где будет стоять код открытия Базы Данных, вставляется обработчик ошибок:

On Error Goto ErrHandler

'Здесь вставляется код открытия БД и если возникает ошибка – 3045, то она 
'перехватывается и обрабатывается 

ErrHandler: 

If Err = 3045 Then 

MsgBox "Доступ к Базе Данных закрыт. Повторите запрос черезнесколько минут." &  _    ,vbCritical, "Data_Error" 

End

End If

Блокировка Таблицы

Блокировка на уровне таблицы применяется при глобальных изменениях в отдельно взятой таблице. После того как вы проведете ваши изменения и закроете эту таблицу, толкко тогда к ней получат доступ другие пользователи. . При использовании вами элемента управления Data, в его свойствах установите Exclusive = False, для того, чтобы пользователи имели доступ к Базе Данных, а свойствu Option присвойте значение 3. Это приведет к томы, что выбранная вами таблица (к примеру Authors) будет открыта с параметрами DenyWrite(1) и DenyRead(2), что запрещает другим пользователям открывать эту таблицу во время действия вашей программы. При попытке обращения к заблокированной таблице вы получите сообщение: 

“Couldn’t  lock table ‘Authors’;currently in use by user ‘admin’ on machine ‘USER-0000011660’ “

“Невозможно зблокировать таблицу ‘Authors’ , т.к. она используется администратором машины ‘USER-0000011660’ “

Одновременно с этим генерируется перехватываемая ошибка – 3265,  используя которую вы можете завершить программу, которая обращается к заблокированной таблице, т.к. после возникновения ошибки программа продолжает выполняться, хотя таблица так и не была открыта. При использовании элемента управления Data в обработчик события Error вставляется следующий код, но предварительно дополняя предыдущий:

Private Sub Data1_Error(DataErr As Integer, Response As Integer)

Select Case Err

            Case 3045

MsgBox "Доступ к Базе Данных закрыт. Повторите запрос черезнесколько минут." &  _    ,vbCritical, "Data_Error"

End

            Case 3265

MsgBox "Доступ к таблице закрыт. Повторите запрос через несколько минут." &  _    ,vbCritical, "Data_Error"

End

End Select

End Sub

Если же вы используете объект DAO, то при  присвоении значения объекту db установите в False значение второго параметра метода OpenDatabase: 

Set db = DBEngine.OpenDatabase(“C:Biblio.mdb”, False)

а, при присвоении значении объекту Recordset:

Set rs = db.OpenRecordset(“Authors”, dbOpenTable, dbDenyRead + dbDenyWrite)

Для перехвата возникающей ошибки опять ставте код:

On Error Goto ErrHandler

'Здесь вставляется код открытия таблицы и если возникает ошибка – 3265, то она 
'перехватывается и обрабатывается

ErrHandler:

If Err = 3265 Then

MsgBox "Доступ к таблице закрыт. Повторите запрос черезнесколько минут." &  _  
 ,vbCritical, "Data_Error"

End

End If

Здесь указан только обработчик ошибки открытия блокированной таблицы, т.к. Базу Данных вы можете открыть в другой процедуре , в отличае от элемента Data.

Внимание! Если вы откроете приложении Access в то время, когда у вас стоит блокировка таблицы (во время работы вашей программы), то данная таблица открывается без извещения вас диалоговым окном о том, что таблица заблокирована. Но, при всем желании вы не сможете сделать запись или произвести редактирование какой либо записи.



Последнее обновление ( вторник, 06 февраля 2007 )
 
След. >
Последние новости
Популярные статьи
Кто на сайте
Сейчас на сайте:
Гостей - 2