我不确定问题标题是否足够清晰,请随时编辑。
基本上,我有两个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感知控件的基本原理吗?我显然需要一个。感谢
答案 0 :(得分:4)
对详细信息(子)数据库使用参数化查询:
SELECT * FROM Order_Details od WHERE od.CustomerID = :CustomerID
然后将子查询的MasterSource
设置为父(Order
)数据源,将MasterFields
设置为CustomerID
。 (如果有多个列链接这两个列,请按;
将其分隔,如CustomerID;OrderNumber
中所示。)
每次滚动父级(更改父DBGrid中的选定记录)时,子查询将以父行的ID自动作为参数执行。