Firedac master-detail зависшая транзакция

jeykey84
Дата: 04.09.2019 15:22:08
Добрый день.
Вопрос в большей степени к Dmitry Arefiev
Используется среда разработки Embarcadero® Delphi 10.1 Berlin Version 24.0.25048.9432
БД: Firebird 2.5
На сервере приложений при помощи FireDac (FDQuery) используется связка Master-detail (FDQuery1 -> DataSource -> FDQuery2)
На клиент все это дело передается через один TDataSetProvider.
На клиенте разворачивается соответственно в ClientDataSet1 (master) и ClientDataSet2 (detail)
Проблема возникает если в master таблице нет записей.
В этом случае возникает зависшая транзакция и все изменения начинают происходить в рамках этой транзакции, соответственно в БД они записываются после закрытия клиента.

Картинка с другого сайта.

Может у FDQuery есть какая-то волшебная галочка, которая исправляет эту проблему?
Я сделал тестовые БД и пример, который воспроизводится в дизайн-тайме.
Мимопроходящий
Дата: 04.09.2019 15:38:45

транзакции нужно коммитить и откатывать тогда, когда это нужно.
а не надеяться на "неестественный интеллект" библиотеки доступа.

Posted via ActualForum NNTP Server 1.5

jeykey84
Дата: 04.09.2019 16:01:40
Для воспроизведения необходимо в дизайн тайме установить свойство Active в True у ClientDataSet1
jeykey84
Дата: 04.09.2019 20:34:16
Если в таблице master нет данных, то при открытии detail не выполняется процедура TFDCustomCommand.Fetch юнита FireDAC.Comp.Client, а в ней полю FOperationFinished должно присваиваться событие FetchFinished, которое закрывает транзакцию.
В итоге остается открытая транзакция.