
Методы управления блокировками в ms Access
Microsoft Access является многопользовательской СУБД. В ней имеются определенные механизмы блокировок для поддержания одновременного совместного доступа к данным и разрешения конфликтов при изменении данных.
Чтобы установить параметры блокировки записей необходимо:
Выбрать команду Office → Параметры Access. Появится диалоговое окно Параметры Access.
Раскрыть вкладку Дополнительно, раздел Дополнительно.
В группе Режим открытия по умолчанию можно выбрать режим Общий доступ или режим Монопольный доступ - открытие существующей базы данных для монопольного использования одним пользователем.
В группе Блокировка по умолчанию устанавливается необходимый переключатель.
Существует возможность выбора одного из трех уровней блокировки:
Отсутствует.
Блокировка всех записей. Блокируются все записи таблицы, отображаемые в форме или таблице.
Блокировка изменяемой записей. Блокируется только редактируемая запись.
Если нужна блокировка на уровне записей при открытии БД, то нужно установить флажок Открытие баз данных с использованием блокировки на уровне записей. Если необходима блокировка по умолчанию на уровне страниц, то этот флажок нужно сбросить.
Период обновления (с) Число секунд, после которых Microsoft Access автоматически обновит записи в режиме таблицы или формы, если они изменялись.
Число повторов обновления Количество попыток, когда Microsoft Access пытается сохранить измененную запись, заблокированную другим пользователем. Возможные значения от 0 до 10. Значение по умолчанию: 2.
Установленные параметры начнут действовать, когда база данных будет открыта заново с помощью команды Файл, Открыть.
Справка Access по данному вопросу: статья «Категория «Дополнительные» («Параметры Access»)».
Имеется ещё один метод блокировки записей, который состоит в установке нужного режима работы с данными в определенной форме. Для этого нужно открыть форму в режиме конструктора и на вкладке Данные Окна свойств для свойства Блокировка записей выбрать одну из опций блокировки: отсутствует, всех записей, изменяемой записи.
Кроме того, как уже указывалось ранее, можно устанавливать режимы блокировки программно с помощью соответствующих методов объекта Recordset языка VBA.
Взаимная блокировка
Механизм блокировки может вызвать ситуацию взаимной блокировки двух транзакций. Рассмотрим пример. Пусть два пользователя хотели бы заказать два товара в соответствующей коммерческой БД товаров. Пусть пользователь А хочет вначале заказать товар 1 и затем товар 2. Пользователь В желает заказать сначала товар 2 , а потом товар 1. Пользователи обращаются одновременно. При этом пользователь А блокирует запись товара 1 , а затем ожидает освобождения записи товара2. Запись 1 блокирована. Одновременно пользователь В блокирует запись товара 2 (запись 2 блокирована) и затем ожидает освобождения записи товара 1. Происходит ситуация взаимной блокировки (deadlock). Каждый пользователь ожидает освобождения ресурса, который заблокировал второй пользователь. И это может продолжаться бесконечно долго.
Способы устранения взаимных блокировок. Первый способ заключается в том, что следует принуждать пользователей блокировать все необходимые им ресурсы сразу. Если пользователь А сразу же заблокировал записи по товарам 1 и 2, то не произошло бы взаимной блокировки. Второй способ состоит в том, что программы должны блокировать ресурсы в одном и том же порядке: например, сначала товар1 и затем товар 2 или наоборот, но не произвольно.
В большинстве СУБД работают специальные алгоритмы обнаружения и предотвращения взаимных блокировок.