SQL Server 2008主/细节(使用Delphi和ADOQuery)

时间:2013-12-26 09:48:45

标签: sql-server-2008 delphi delphi-2010 master-detail tadoquery

我有一个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中!

3 个答案:

答案 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

这样只会为每个主记录加载相应的详细信息,这将限制负载并使显示的数据更加实际。

enter image description here

答案 2 :(得分:0)

您可以在详细信息表格中使用Tadoquery的过滤器属性。

将此代码添加到AdoQuery Master的After Scroll事件中;

AdoQueryDetail.filter := 'Where MasterID = ' +inttostr(AdoQueryMaster.fieldbyname('ID').asinteger);
AdoQueryDetail.filtered := true;