我有一个ADOQuery1,这是我的主表,现在我想在我的详细信息表中使用另一个ADOQuery2,但实际上我找不到合适的方法来解决这个问题。
ADOQuery1
nr- Autonum
名称
本地
定量。
ADOQuery2
Nro _ Autonum
命名
L1
L2
L3
可以帮助一些人 thank's
答案 0 :(得分:1)
对于AdoQuery,您应该使用DataSource属性。这是你应该做的:
1-在表单上删除AdoQuery作为主数据集,并使用其SQL属性编写查询。
2-删除表单上的DataSource组件,并将其连接到您在步骤1中构建的主AdoQuery。
3-在表单上删除另一个AdoQuery作为详细数据集。
4-将详细数据集的DataSource属性设置为连接到主数据集的数据源(参阅步骤2)。
5-为您的详细信息编写SQL查询 数据集,使用其SQL属性;在查询中,您应该有一个WHERE子句,它使用与主数据源中的一个字段同名的参数来过滤您的详细数据集。 例如,假设您的主数据集中有一个ID字段,并且您的明细数据集中有一个名为MasterID的字段,该字段是主数据集的ID字段的外键。现在要将详细数据集连接到主数据集,使用这些字段,您可以编写详细数据集的查询,如下所示:
SELECT * FROM DetailTable WHERE MasterID = :ID
如您所见,我们有一个名为ID的SQL参数,它与master数据源中的ID字段同名。现在,无论何时浏览主数据源中的记录,Delphi都会自动检索ID字段的值,并将其用作详细数据集中ID参数的值,并重新查询详细数据集。您无需显式设置参数值和重新查询。这将自动为您完成。
我希望这可以澄清如何使用AdoQuery数据集建立主 - 细节关系。
此致
答案 1 :(得分:0)
我有一些自动执行此操作的组件,但在使用原始TADOQuery时,我就是这样实现的:
在Master TADOQuery.AfterScroll事件上执行此操作:
myDetailQuery.Active := False;
myDetailQuery.Params.ParamByName('ID').Value := DataSet.FieldsByName('ID').AsString;
myDetailQuery.Active := True;
Detail TADOQuery的查询如下所示:
SELECT * FROM DetailTable
WHERE ID = :ID;
如果有更好的方式,我也很乐意看到它。
TADOTable内置了此功能,因此您可以考虑使用它。设置TADOTable.MasterSource。有关Delphi帮助中该属性的更多信息。