Использование транзакций |
Транзакция служит для организации дополнительной защиты от сбоев: сбой в сети, отсоединение от БД и т.д.
Транзакция объединяет группу последовательных операторов, при исполнении которых в случае сбоя происходит откатка на начальную позицию транзакции.
<транзакция> = beginConcurentTransaction <SQL-операторы> (endConcurentTransaction | abortConcurentTransaction)
beginConcurentTransaction - начать транзакцию. Запоминаются Ваши изменения всей БД, и при аварийном выходе из транзакции производится откатка БД к исходному состоянию.
<SQL-операторы> - операторы работы с БД, см. "Работа с БД (SQL). ".
endConcurentTransaction - нормальное завершение транзакции.
abortConcurentTransaction - аварийный выход из транзакции.
Кроме названного варианта существуют еще два способа задать транзакцию (устаревшие):
beginTransaction - (endTransaction | abortTransaction)
beginFileTransaction - (endFileTransaction | abortFileTransaction)
beginFileTransaction - запоминаются Ваши изменения текущей таблицы БД, и при аварийном выходе из транзакции производится откатка данной таблицы к исходному состоянию.
Для СУБД Oracle все варианты транзакции работают одинаково и осуществляют откатку всей БД.
При проектировании интерфейса могут быть использованы два метода разрешения конфликтов: пассивное разрешение конфликта и управление транзакцией.
Пассивный метод разрешения конфликта. Пусть две программы считали одну запись, причем одна из программ изменила ее. Если вторая программа также пытается откорректировать данную запись, появляется окно с сообщением об ошибке.
Управление транзакцией с помощью скобок (функции beginTransaction(iMode), endTransaction, abortTransaction). Все операторы, заключенные в транзакционные скобки, выполняются в режиме блокировки. При попытке изменить запись, которая уже обрабатывается, программа получит сообщение об ошибке или встанет в очередь, в зависимости от указанного атрибута транзакции.
Необходимо учитывать, что модификация и удаление записи в режиме транзакции возможна только в том случае, если эта запись была считана в режиме транзакции. Для записи взятой вне транзакции достаточно вызвать последовательно методы PushPos и PopPos.
При необходимости можно реализовать активный способ блокировки. Для этого необходимо установить активный режим блокировки и взять текущую запись с блокировкой. Если это невозможно сделать - закрыть все поля от модификации.
По умолчанию в системе применяется пассивный метод разрешения конфликтов.