Delphi,具有DetailFields的Master-Detail在where条件下(不在select-part中)

问题描述 投票:0回答:1

我正在使用master-detail连接来显示详细信息表的已分配列的列表。另外,我想显示第二个没有分配详细列的网格

示例Master-Table t_human:idHU,nameHU(像John,Oscar,......) 细节表t_property:idPO,namePO(如男性,女性,金发,胡须,蓝眼睛......) Join-Table t_hu_po:idHU,idPO - >约翰 - 男,金发 - >奥斯卡 - 男,蓝眼睛,胡须

当我选择主表格行时,我想显示已分配的属性以及未分配的属性。指定属性的主 - 细节工作正常。但是对于未分配的属性不起作用。

详细-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)中选择detailfield时,它只显示p.idPO和p.namePO的字段。语句中的:idHU参数被配置为组件中查询的参数。当我手动在数据集(TMSQuery)的DetailFields属性中键入idHU时,我在激活查询时从delphi获得无效列名'idHU'..

有人知道比使用datachange事件和手动设置detail-parameter并刷新detail-query更好的解决方案。我的想法是,主 - 细节会做同样的事情,但只在背景中,所以我没有做代码。

谢谢 斯蒂芬

delphi master-detail devart tdataset
1个回答
0
投票

而不是使用where not exists尝试where p.idPO not in (Select idPO from t_hu_po where idHU=:idHu)

通过makinge,子查询只返回所选idHu存在的所有idPO,您的查询现在查找不在该列表中的属性。

© www.soinside.com 2019 - 2024. All rights reserved.