1

我有一个带有 2 个表的 SQL Server 2008 数据库:Master 和 Detail

主字段:ID 和 ...;

详细信息字段:ID、MasterID 和 ...;

我已经在 SQL Server 中设置了 Master 和 Detail 之间的关系

我希望当我在 Master DBGrid 中选择一条记录时,Detail Query 仅返回与所选主记录相关的记录,而 Detail DBGrid 仅显示相关记录

我不想每次使用 SQL 代码(例如)选择主记录时都重新查询详细信息 ADOQuery:

SELECT * FROM Detail WHERE MasterID = Master.ID

如果不使用 ADOTable(主源),我怎么能做到这一点!?

换句话说,我希望这种关系在 DB 层中!

4

3 回答 3

1

您只需要像往常一样设置详细数据集并将 SQL 更改为参数化的。 SELECT * FROM details WHERE MasterID =: id

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

在此处输入图像描述

于 2013-12-26T14:25:44.060 回答
1

如果你想扁平化主从关系,你可以做一个JOIN查询来获取2个表中的所有数据:

SELECT m.*, d.* FROM Master m INNER JOIN Detail d ON m.Id = d.MasterId 
于 2013-12-26T13:38:19.253 回答
0

You can use filter propery of Tadoquery on detail table.

add this code to AfterScroll event of AdoQueryMaster;

AdoQueryDetail.filter := 'Where MasterID = ' +inttostr(AdoQueryMaster.fieldbyname('ID').asinteger);
AdoQueryDetail.filtered := true;
于 2013-12-26T13:58:18.940 回答