Страницы

9 октября 2012 г.

ZeosLib. Транзакции. Ошибка: invalid operation in non AutoCommit mode

Еще раз Здравствуйте.
       Наткнулся на ошибку "invalid operation in non AutoCommit mode" при выполнении ZConnection.StartTransaction.
       В zeos-компонентах управление транзакциями производится из объекта класса TZConnection. В этом классе есть свойство AutoCommit:boolean, а так же методы StartTransaction, Commit, Rollback.
       Я думал, что когда используется StartTransaction..Commit/Rollback, AutoCommit должен быть FALSE. Ибо если логически подумать, то зачем нам автоматический коммит, если мы управляем транзакциями вручную.
Оказывается немного не так... StartTransaction НЕ будет работать если AutoCommit = false.
       Если AutoCommit = true, тогда транзакции фиксируются после каждого корректно завершенного SQL-оператора, а StartTransaction позволяет отменить автоматическое фиксирование и управлять транзакцией вручную. При AutoCommit = false - изменения не будут фиксироваться в базу вообще, следовательно команду StartTransaction вызывать бесполезно.

p.s.
Код метода который генерирует указанное в сабже исключение:
procedure TZConnection.CheckAutoCommitMode;
begin
  if not FAutoCommit and (FExplicitTransactionCounter = 0) then
    raise EZDatabaseError.Create(SInvalidOpInNonAutoCommit);
end;

Комментариев нет:

Отправить комментарий