1

我不确定问题标题是否足够清晰,请随时编辑。

基本上,我有两个数据库网格,它们反映了两个数据库表,每个网格显示一个。

当用户在第一个表中选择一行时(我们称之为oders),我想用与第一个表的选定行的列匹配的任何行的详细信息来更新第二个。

比如说,该表orders有一个列customer_id,我想order_details用该客户的所有订单的详细信息填充第二个表(我们称之为它),每行一个订单。

我可以连接 2@datasource、查询和连接到这两个TDbGrids,但我对如何编写order_detailsSQL 感到困惑。

SQL for ordersis just SELECT * from orders,但另一个?

我想要类似的东西SELECT * from order_details WHERE cutomer_id=<orderQuery>.currentRow.FieldByName("customer_id").AsInteger-但我不知道该怎么做...

有人可以帮我一些德尔福代码吗?

另外,一旦我建立了这种关系,在orders数据库网格中选择一个新行会自动更新order_details数据库网格吗?还是我需要为此添加代码。

Ps 我知道不再有books标签了(更遗憾的是),但是有人可以推荐一本好书来解释编程 DB 感知控件的基础知识吗?我显然需要一个。谢谢

4

1 回答 1

4

对详细(子)数据库使用参数化查询:

SELECT * FROM Order_Details od WHERE od.CustomerID = :CustomerID

然后将子查询设置MasterSource为父 ( ) 数据源,Order并将. (如果有多个列将两者联系起来,用 分隔它们,如。)MasterFieldsCustomerID;CustomerID;OrderNumber

每次滚动父项时(更改父 DBGrid 中的选定记录),子查询将自动执行,并将父行的 ID 作为参数传递。

于 2012-11-28T02:28:11.373 回答