Еще раз Здравствуйте.
Наткнулся на ошибку "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.
Код метода который генерирует указанное в сабже исключение:
Наткнулся на ошибку "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;
Комментариев нет:
Отправить комментарий