Delphi 3 и создание приложений баз данных

Понятие транзакции


Транзакция - это единичное или чаще групповое изменение БД, которое или выполняется полностью, или не выполняется вообще. Результаты выполнения транзакции записываются в БД только в том случае, если вся транзакция завершилась успешно.

Таким образом, транзакция переводит БД из одного целостного состояния в другое

Пример.

Пусть нужно добавить запись в таблицу "Приход", прибавить количество прихода товара (из новой записи ТБД "Приход") в запись для данного товара в ТБД "Остаток товара на складе" и прибавить стоимость поступившего товара (из новой записи ТБД "Приход") в запись для данного товара и даты прихода в ТБД "Обороты по складу" (рис 32.1)

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

Управление транзакциями на уровне приложения, разработанного на Delphi, реализуются методами компонента TDataBase.

Начало транзакции инициируется методом

procedure StartTransaction;

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

procedure Commit;

Отказаться от физического запоминания сделанных изменений в БД ("откатить" изменения), можно, выполнив метод

procedure Rollback;

Выполнение методов Commit или Rollback завершает активную транзакцию, начатую методом Start Transaction. Метод Start Transaction нельзя выполнить, если для БД в текущий момент времени имеется активная транзакция, т.е. транзакция, незавершенная методами Commit или Rollback. В этом случае возбуждается исключение.

Проверить, имеются ли на текущий момент в БД активные незавершенные транзакции, можно при помощи свойства

property In Transaction: Boolean;

Это свойство возвращает True, если для БД имеется активная транзакция, и False, если не имеется.

Предыдущий пример изменения таблиц Prihod, Ostatok и Oborot в рамках одной транзакции реализуется следующим образом (рис 32.2)



Содержание раздела