Как правильно работать с транзакциями
Re: Как правильно работать с транзакциями
Такая же функциональность доступна и в UniDAC при использовании компонента TUniTransaction : https://www.devart.com/unidac/docs/deva ... action.htm
Re: Как правильно работать с транзакциями
Теперь вопрос по СУБД Firebird 3, которая поддерживает множественные транзакции.
Как правильно управлять транзакциями вручную?
Т.е. мне надо открыть транзацию, сделать много изменений и закрыть транзакцию либо откатить все изменения, если возникла ошибка в процессе изменения.
Код: Выделить всё
var
q: TUniSQL;
begin
...
q.SQL.Text := 'update table1 set region = :region where id = :id;
q.Transaction := transSqlExec;// назначаем "пишущую" транзакцию.
q.Transaction.StartTransaction;//
запускаем цикл множественного изменения записей
for I := 0 to ...
begin
q.ParamByName()...
q.Execute;
end;
q.Transaction.Rollback;// отменяю все сделанные изменения
Почему нет отката изменения?
P.S. к UniConnection по умолчанию подключена транзакция "читающая", с параметрами: read;nowait;rec_version;read_committed
Re: Как правильно работать с транзакциями
Добрый день,
проверьте свойство AutoCommit компонента UniConnection. Если оно установлено в True - будет происходить Commit всех транзакций, связанных с данным UniConnection, так как данное свойство имеет более высокий приоритет.
Поведение описано в документации к UniDAC.
wbr, Oleg
Devart Team
проверьте свойство AutoCommit компонента UniConnection. Если оно установлено в True - будет происходить Commit всех транзакций, связанных с данным UniConnection, так как данное свойство имеет более высокий приоритет.
Поведение описано в документации к UniDAC.
wbr, Oleg
Devart Team
Re: Как правильно работать с транзакциями
Да, разобрался уже, спасибо.
ЕМНИМ, то если у UniConnection AutoCommit отключен, то не важно в каком состоянии AutoCommit у UniQuery? Нужно всегда самому програмно подтверждать транзакцию даже если AutoCommit включен у UniQuery? Я правильно помню?
ЕМНИМ, то если у UniConnection AutoCommit отключен, то не важно в каком состоянии AutoCommit у UniQuery? Нужно всегда самому програмно подтверждать транзакцию даже если AutoCommit включен у UniQuery? Я правильно помню?
Re: Как правильно работать с транзакциями
Добрый день, да. Для контроля над транзакцией вы можете использовать код:
wbr, Oleg
Devart Team
Код: Выделить всё
UniQuery.Execute;
if UniQuery.Transaction.Active then
UniQuery.Transaction.Commit; //или Rollback
Devart Team