AnyDAC (FireDAC) - открытая транзакция после TBlobField.GetAsString
В настоящее время мы переносим компонент базы данных нашего приложения Delphi7 из компонентов BDE в компоненты AnyDAC (FireDAC) версии 8.0.5.
Предоставляются следующие предпосылки:
- В нашей форме у нас есть одно TADConnection, одно TADQuery и одно TADTable. TADQuery является главным источником для TADTable. Никаких специальных изменений в настройках компонентов AnyDAC внесено не было, поэтому режим AutoCommit активен.
- Более того, у нас есть одна TDBMemo в нашей форме, которая связана с полем ftMemo в TADTable (Firebird FieldType = Blob / Size = 240 / Subtype = Text)
Во время загрузки содержимого текстового поля BLOB-объекта (TBlobField.GetAsString) TADTable автоматически запускает транзакцию, которая не будет зафиксирована.
Это нормальное поведение? Есть ли у нас возможность избежать этой открытой транзакции? Обратите внимание, что отключение AutoCommit на данный момент не вариант.
Любая помощь приветствуется.
1 ответ
Да, это нормальное поведение. До тех пор, пока вы не извлекаете BLOB-данные вместе с подробным кортежем, AnyDAC запускает неявную транзакцию для извлечения этих BLOB-данных.