我有一个SQL Server 2008数据库,有2个表:主表和详细信息
主要字段:ID和......;
详细信息字段:ID,MasterID和......;
我已经在SQL Server中设置了Master和Detail之间的关系
我想在Master DBGrid中选择一条记录时,详细查询只返回与所选主记录相关的记录和详细信息DBGrid仅显示相关记录
每次我选择带有SQL代码的主记录时(例如),我都不想重新查询详细信息ADOQuery:
SELECT * FROM Detail WHERE MasterID = Master.ID
如何在不使用ADOTable(Master Source)的情况下执行此操作!?
换句话说,我希望这种关系在DB Layer中!
答案 0 :(得分:1)
如果要展平主详细信息关系,可以执行JOIN
查询以获取2个表中的所有数据:
SELECT m.*, d.* FROM Master m INNER JOIN Detail d ON m.Id = d.MasterId
答案 1 :(得分:1)
您只需像往常一样设置详细DataSet,并将SQL更改为参数化SQL。 SELECT * FROM details WHERE MasterID =: id
这样只会为每个主记录加载相应的详细信息,这将限制负载并使显示的数据更加实际。
答案 2 :(得分:0)
您可以在详细信息表格中使用Tadoquery的过滤器属性。
将此代码添加到AdoQuery Master的After Scroll事件中;
AdoQueryDetail.filter := 'Where MasterID = ' +inttostr(AdoQueryMaster.fieldbyname('ID').asinteger);
AdoQueryDetail.filtered := true;