Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД / УСТАНОВ_ЛЕКЦИИ_БД / УСТАНОВ_ЛЕКЦИИ_БД / 3_Обработка транзакций.ppt
Скачиваний:
47
Добавлен:
26.05.2015
Размер:
161.79 Кб
Скачать

Типы блокировки записей в MS Access

Пессимистическая блокировка (adLockPessimistic)– блокировка страницы доступа к записи или записи в таблице или запросе от начала изменения поля в записи до завершения редактирования записи.

Оптимистическая блокировка (adLockOptimistic) – блокировка страницы доступа к записи или записи в таблице или запросе от начала выполнения метода Update в VBA до завершения записи в БД.

БД может быть заблокирована

Блокировка БД через свойства ярлыка

полностью в момент ее открытия

 

(метод adModeShareExclusive в VBA)

 

Чтобы заблокировать все записи в форме или объекте в режиме таблицы (и в базовых таблицах) во время их изменения, выберите параметр блокировка всех записей (свойство

RecordLocks=AllRecords).

Разделяемая блокировка (Shared Lock), обозначается латинской буквой S. Эта самый распространенный тип блокировки, который используется при выполнении операции чтения данных. Гарантируется что данные, на которые она наложена, не будут изменены другой транзакцией. Однако чтение данных возможно.

Монопольная блокировка (Exclusive Lock), обозначается латинской буквой X. Этот тип применяется при изменении данных. Если на ресурс установлена монопольная блокировка, гарантируется, что другие транзакции не могут не только изменять данные, но даже читать их.

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

добавить новую строку данных в таблицу (используя инструкцию INSERT). Например, в прошлом существовало требование, ограничивающее почтовые индексы пятью цифрами, в данный момент требуется разрешить введение почтовых индексов, состоящих из девяти цифр. Старые данные с почтовыми индексами, состоящими из пяти цифр, будут сосуществовать с новыми данными, которые содержат почтовые индексы, состоящие из девяти цифр.

изменить существующие строки (используя инструкции UPDATE). Например, можно заменить все существующие пятизначные почтовые индексы на девятизначные.

Выбирайте параметр, который отключает проверяемое ограничение во время выполнения транзакций INSERT и UPDATE, если известно, что новые данные будут нарушать ограничение, либо если ограничение применяется только к данным, уже существующим в БД.

Существует три метода обработки транзакций в языке VBA:

BeginTrans

Обозначает начало транзакции

CommitTrans

Обозначает конец успешной транзакции

RollbackTrans

Обозначает конец безуспешной транзакции

Access поддерживает до 5 уровней вложенных транзакций

Когда одна транзакция вложена в другую, обновление БД не происходит до тех пор, пока последняя вложенная транзакция не завершится успешно (т.е. пока для нее не выполнится метод CommitTrans). Если этот метод не выполняется или соответствующий метод RollbackTrans выполняется, все вложенные транзакции отменяются.

Тип связи, установленной между таблицами, контролирует транзакцию.

Для набора данных, использующего метод RollbackTrans для типа связей (в VBA), выполняется откат при выполнении этого метода.

Когда данные в БД корректируются через связанные формы, пользователи имеют ограниченные права на контроль транзакций. MS Access контролирует изменения в БД.

Решение проблем: определяйте конкурирующие транзакции (например, удалить запись без ее изменения); блокируйте записи для предотвращения выполнения более одной транзакции (блокировка записи позволяет другим читать ее без права изменения).

Создание триггера в проекте БД (ADP)

Триггер — это объект БД, который запускается на выполнение при выполнении действия в БД. Для создания триггера необходимо указать следующее:

текущую таблицу;

транзакции, изменяющие данные, которые запускают триггер: добавление новых данных (INSERT), обновление существующих данных (UPDATE) или удаление существующих данных (DELETE);

действия, которые триггер будет выполнять сразу после указанных транзакций.

Триггеры записываются как инструкции Transact-SQL для БД Microsoft SQL Server.

Примечание 1. Включайте в триггер инструкции RAISERROR и ROLLBACK для ситуаций, когда триггер обнаружит, что изменения не разрешены. Это обеспечит синхронизацию набора записей клиента с данными на сервере. При включении только одной из инструкций RAISERROR или ROLLBACK набор записей клиента не будет отражать текущее состояние данных на сервере. Инструкция RAISERROR должна определяться с уровнем важности >10.

Примечание 2. Выберите параметр, который отключает ограничение внешнего ключа во время выполнения транзакций INSERT и UPDATE, если известно, что новые данные будут нарушать ограничение, либо если ограничение применяется только к данным, уже существующим в БД.