Сценарий мастер-детали Firedac Firebird - PullRequest
0 голосов
/ 03 марта 2019

У меня есть основная деталь

CachedUpdates для мастера true
CachedUpdates для детали true
DetailCascde для детали true

Мастер имеет дело с одной записью:

select * from orders where order_id=:order 

Сначала я передаю -1 в качестве фиктивного параметра, чтобы получить пустую основную запись:

orders.Close;
orders.Params[0].AsInteger := -1;
orders.Open;

Чем я заполняю идентификатор заказа с помощью -1, чтобы построить отношения между мастером и деталью:

orders.Append;
orders.Fields[0].AsInteger := -1;
orders.Post;

Я успешно вставляю в детали с Append и Post

Проблема в базе данных Firebird, которую я имеюэта строка включена перед триггером вставки для мастера

new.order_id = coalesce((select max(order_id) from orders) + 1, 1);

I ApplyUpdates

Orders.ApplyUpdates(-1);
dOrder.ApplyUpdates(-1);

Поэтому, когда я применяю ApplyUpdates для мастера, детали не будут применяться, потому что идентификатор мастера изменяетсясервер.

Как решить такой сценарий?

...