数据库网格:如何使用当前行的一列作为另一个的索引?

时间:2012-11-28 01:49:56

标签: delphi dbgrid tdbgrid

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

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

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

比方说,例如,表orders有一个列customer_id,我想填充第二个表(让我们称之为order_details),其中包含该客户的所有订单的详细信息,一个每行订购。

我可以连接2个@ datasource,查询和连接到两个TDbGrid,但我对如何编码order_details SQL感到困惑。

orders的SQL只是SELECT * from orders,而另一个?

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

有人可以帮我处理一些Delphi代码吗?

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

P.s我知道不再有books标签了(更可惜),但有人可以推荐一本好书来解释编程DB感知控件的基本原理吗?我显然需要一个。感谢

1 个答案:

答案 0 :(得分:4)

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

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

然后将子查询的MasterSource设置为父(Order)数据源,将MasterFields设置为CustomerID。 (如果有多个列链接这两个列,请按;将其分隔,如CustomerID;OrderNumber中所示。)

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