2015-06-11 20 views
1

Я использую Delphi 2010 с FIB Components как TpFIBDataset, TpFIBTransactionTpFIBDataset и с Firebird базой данных.Откат транзакции не работает с TpFIB компонентами

Я уже присвоил свойству «AutoCommit» свойство TpFIBDataset «False», а затем, когда я выполняю инструкцию ниже в блоке try..finally и откатывает транзакционные данные, все еще публикуются.

Код:

FIBDataset.Post;

Ниже приведен пример кода.

Код:

try 
    FIBDatabase.StartTransaction; 

     .... 

      Block of Code; 

     ... 
    finally 
     if saveALL then 
     FIBDatabase.CommitRetaining 
     else 
     FIBDatabase.RollbackRetaining; 
    end; 
+1

Почему вы делаете «... сохраняя»? почему вы не закрываете транзакцию? –

+2

также я думаю, что «StartTransaction» должен идти до TRY, если в этом вызове будет исключение * внутри *, но до того, как начнется реальная транзакция в Firebird –

+1

ForceCloseTransactions не отображает данные в сетке. Если .Close называется, я получаю индекс списка ошибок из привязанного. –

ответ

0

Сделка по набору данных также должны быть проверены и

FIBDataset.AutoCommit := false; 

Вы должны Закройте запрос, а также. В этом случае

FIBDataset.Close; 
FIBDatabase.Rollback; 

EDIT

Я также советую вам выделить компонент один транзакций для всех наборов данных (а не в базе данных). И используйте методы start, commit, rollback для компонента транзакции. Кроме того, перед выполнением каких-либо операций необходимо назначить компонент транзакции.

+0

Я уже установил AutoCommit в False, но он не работает. AutoCommit должен быть False, и только мы могли бы использовать транзакцию еще, которую она автоматически фиксирует. –

+0

Что относительно компонента Autocommit в базе данных? Какую изоляцию вы использовали и т. Д.? Я думаю, вам нужно разместить больше своего кода. –

+0

Нет свойства Autocommit для компонента TpFIBDatabase не для компонента TpFIBTransaction, это только для компонента TpFIBDataSet. Происходит огромный расчет кода, который запускает и откатывает транзакцию.В свойстве «TRParams» одного компонента транзакции я нашел следующие значения: write, isc_tpb_nowait, read_committed, rec_version. Для других компонентов транзакции нет значений. –

Смежные вопросы