Понятие транзакции
Транзакция - это единичное или чаще групповое изменение БД, которое или выполняется полностью, или не выполняется вообще. Результаты выполнения транзакции записываются в БД только в том случае, если вся транзакция завершилась успешно.
Таким образом, транзакция переводит БД из одного целостного состояния в другое
Пример.
Пусть нужно добавить запись в таблицу "Приход", прибавить количество прихода товара (из новой записи ТБД "Приход") в запись для данного товара в ТБД "Остаток товара на складе" и прибавить стоимость поступившего товара (из новой записи ТБД "Приход") в запись для данного товара и даты прихода в ТБД "Обороты по складу" (рис 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)