| Схемы блокировок в Базах Данных Access |
| Написал Admin | ||||
| вторник, 30 января 2007 | ||||
Страница 1 из 2 При работе с Базами Данных в многопользовательском режиме возникают ситуации, когда необходимо ограничить число обращающихся пользователей к данным. Это делается для того, чтобы предотвратить одновременное обновление одной и той же записи, при глобальном обновленим данных или при техническом обслуживания самой Базы Данных.
Процессор Баз Данных обеспечивает три уровня блокировок:
Блокировка Базы Данных Блокиривка на уровне Базы Данных осуществляется присвоением свойству Exclusive, при открытии БД, значения True. При использовании вами элемента управления Data, в его свойствах установите Exclusive = True . Если же вы используете объект DAO, то при присвоении значения объекту db установите в True значение второго параметра метода OpenDatabase: Set db = DBEngine.OpenDatabase(“C:Biblio.mdb”, True) Когда База Данных заблокирована таким образом, тодругие пользователи не смогут ее открыть. При попытке обращения к заблокированной Базе Данных вы получите сообщение:
Одновременно с этим генерируется перехватываемая ошибка – 3045, используя которую вы можете завершить программу, которая обращается к заблокированной Базе Данных, т.к. после возникновения ошибки программа продолжает выполняться, хотя База Данных так и не была открыта. При использовании элемента управления Data в обработчик события Error вставляется следующий код:
При использовании объекта DAO в той процедуре, где будет стоять код открытия Базы Данных, вставляется обработчик ошибок:
Блокировка Таблицы Блокировка на уровне таблицы применяется при глобальных изменениях в отдельно взятой таблице. После того как вы проведете ваши изменения и закроете эту таблицу, толкко тогда к ней получат доступ другие пользователи. . При использовании вами элемента управления 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 вставляется следующий код, но предварительно дополняя предыдущий:
Если же вы используете объект DAO, то при присвоении значения объекту db установите в False значение второго параметра метода OpenDatabase: Set db = DBEngine.OpenDatabase(“C:Biblio.mdb”, False) а, при присвоении значении объекту Recordset: Set rs = db.OpenRecordset(“Authors”, dbOpenTable, dbDenyRead + dbDenyWrite) Для перехвата возникающей ошибки опять ставте код:
Здесь указан только обработчик ошибки открытия блокированной таблицы, т.к. Базу Данных вы можете открыть в другой процедуре , в отличае от элемента Data. Внимание! Если вы откроете приложении Access в то время, когда у вас стоит блокировка таблицы (во время работы вашей программы), то данная таблица открывается без извещения вас диалоговым окном о том, что таблица заблокирована. Но, при всем желании вы не сможете сделать запись или произвести редактирование какой либо записи.
|
||||
| Последнее обновление ( вторник, 06 февраля 2007 ) | ||||
| След. > |
|---|