Добрый день.
Заметил одну интересную проблему при работе с компонентами: мне никто не запрещает делать Transaction.StartTransaction хоть 10 раз.
При этом если сделать вот так
[code]Transaction.StartTransaction
...какие-то действия
Transaction.StartTransaction
...какие-то действия[/code]
То с большой долей вероятности вторая группа действий закончится с ошибкой. В частности в FB например иногда ошибок не бывает, но вылетает скажем DeadLock и указывает номер транзакции.
При этом AutoCommit выключен, включён только AutoStart. Т.е. по сути мне даже стартовать транзакцию не надо. В нужный момент всё само запустится. Но даже при таком раскладе иногда бывают случаи когда выполняется следующий код.
[code]If not Transaction.Active then
Transaction.StartTransaction.
...Какие-то действия.
[/code]
И далее действия которые по сути могут породить старт транзакции приводят к тому что транзакция запускается и опять же получается ошибка.
Также к проблемам у меня приводил вот такой код
[code]
Transaction.CommitRetaining;
Transaction.StartTransaction;
[/code]
Я в принципе понимаю, то что транзакция не закрывается, но либо тогда чтобы внутри не выполнялся старт либо как-то ещё сигнализировать о том что есть проблема.
Можно включить проверку на двойной старт транзакции или сделать с вашей стороны проверку что если траназакция запущена, то не надо выполнять повторно старт транзакции?
P.S. а всё потому что перешёл с FIBPlus на AnyDAC. И перевод проекта не проходит даром, вылазит куча проблем с транзакциями.
↧