Delphi, Master-Detail с DetailFields в условии where (не в select-part) - PullRequest
0 голосов
/ 31 августа 2018

Я использую соединение master-detail для отображения списка назначенных столбцов таблицы данных. Кроме того, я хочу показать вторую сетку с неназначенными столбцами подробностей

Пример Мастер-таблица t_human: idHU, nameHU (как Джон, Оскар, ...)
Деталь-таблица t_property: idPO, namePO (как мужчина, женщина, светлые волосы, борода, голубые глаза ...)
Таблица соединения t_hu_po: idHU, idPO
-> Джон - мужчина, светлые волосы
-> Оскар - кобель, голубые глаза, борода

Когда я выбираю строку основной таблицы, я хочу показать назначенные свойства, а также не назначенные. Основная деталь для назначенных свойств работает нормально. Но для неназначенных свойств не работает.

Detail-SQL: select p.idPO, p.namePO from t_property p where not exists (select * from t_hu_po hp where hp.idHU = :idHU and hp.idPO = p.idPO)

Мастер-SQL: select idHU, nameHU from human

Когда я пытаюсь выбрать подробное поле в компоненте delphi (Devart, SDAC, TMSQuery), оно показывает только поля для p.idPO и p.namePO. Параметр: idHU в инструкции настроен как параметр для запроса в компоненте. Когда я вручную набираю idHU в свойстве DetailFields набора данных (TMSQuery), я получаю Неверное имя столбца 'idHU' .. из delphi при активации запроса.

Кто-нибудь знает лучшее решение, чем делать это с событиями для datachange и вручную устанавливать параметр детали и обновлять запрос детали. Я думал, что master-detail будет делать то же самое, но только в фоновом режиме, так что мне не придется его кодировать.

Спасибо
Stephan

1 Ответ

0 голосов
/ 02 сентября 2018

Вместо использования where not exists try where p.idPO not in (Select idPO from t_hu_po where idHU=:idHu)

Сделав подзапрос просто вернуть все idPO, которые существуют для выбранного idHu, ваш запрос теперь ищет свойства, которых нет в этом списке.

...