powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Firedac master-detail зависшая транзакция
4 сообщений из 4, страница 1 из 1
Firedac master-detail зависшая транзакция
    #39857262
jeykey84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Вопрос в большей степени к 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 есть какая-то волшебная галочка, которая исправляет эту проблему?
Я сделал тестовые БД и пример, который воспроизводится в дизайн-тайме.
...
Рейтинг: 0 / 0
Firedac master-detail зависшая транзакция
    #39857273
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
транзакции нужно коммитить и откатывать тогда, когда это нужно.
а не надеяться на "неестественный интеллект" библиотеки доступа.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Firedac master-detail зависшая транзакция
    #39857299
jeykey84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для воспроизведения необходимо в дизайн тайме установить свойство Active в True у ClientDataSet1
...
Рейтинг: 0 / 0
Firedac master-detail зависшая транзакция
    #39857492
jeykey84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если в таблице master нет данных, то при открытии detail не выполняется процедура TFDCustomCommand.Fetch юнита FireDAC.Comp.Client, а в ней полю FOperationFinished должно присваиваться событие FetchFinished, которое закрывает транзакцию.
В итоге остается открытая транзакция.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Firedac master-detail зависшая транзакция
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]