我有一个 ADOQuery1 是我的主表,现在我想在另一个 ADOQuery2 中使用我的详细表,但我真的找不到正确的方法来解决这个问题。
ADOQuery1 nr- Autonum 名称本地量化。ADOQuery2 Nro_Autonum 名称
l1 l2
l3
有人可以帮忙吗谢谢
我有一个 ADOQuery1 是我的主表,现在我想在另一个 ADOQuery2 中使用我的详细表,但我真的找不到正确的方法来解决这个问题。
ADOQuery1 nr- Autonum 名称本地量化。ADOQuery2 Nro_Autonum 名称
l1 l2
l3
有人可以帮忙吗谢谢
对于 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 参数,它与主数据源中的 ID 字段同名。现在,每当您浏览主数据源中的记录时,Delphi 都会自动检索 ID 字段的值,并将其用作明细数据集中的 ID 参数值,并重新查询明细数据集。您不需要显式设置参数值和重新查询。这将自动为您完成。
我希望这能让您了解如何使用 AdoQuery 数据集建立主从关系。
问候
我有一些组件可以自动执行此操作,但是在使用原始 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 帮助中有关于该属性的更多信息。