我找到了一些教程,但它们仍然给我留下了问题。
让我们以 2 个表的经典示例为例,一个用于客户详细信息,一个用于订单详细信息。
数据库中的customers
表有:
- 一个自动递增的整数
customer_id
作为主键 - 客户名称的文本字段
- 联系方式的文本字段
orders
桌子上有 :
- 一个整数
customer_id
,它是引用customers
表的外键 - 其他一些东西,比如对一堆项目编号的引用
- 一个整数
order_value
,用于存储订单的现金价值
我需要两个数据集组件、两个查询和一个连接。
到现在为止还挺好?还是我已经错过了什么?
现在,教程说我必须将与数据库网格相对应的数据源的 MasterSource 设置为与表相对应orders
的数据源,在这种情况下,设置为.customers
MasterFields
customer_id
还要别的吗?例如,我是否应该将与表Detailfields
对应的数据源的查询设置为?customers
customer_id
我应该使用属性还是参数化查询?
好的,至此,我们已经按照经典教程进行操作,可以滚动浏览customers
DB 网格,查看 DB 网格中显示的当前客户的所有订单orders
。当用户单击customers
数据库网格时,我必须关闭();然后打开();orders
查询以刷新其相应的数据库网格。
然而,那些教程似乎总是假设一个静态数据库,其中包含永远不会改变的现有内容。
当我问另一个问题时,我举了一个例子,我正在使用命令INSERT INTO orders...
,并被告知这是一件坏事,我应该:
- OrdersQuery.Append();
- OrdersQuery.FieldByName('customer_id') := [一些值]';
- OrdersQuery.FieldByName('item_numbers') := [某个值]';
- OrdersQuery.FieldByName('order_value') := [某个值]';
- OrdersQuery.Post();
那是对的吗?
我问是因为在我看来,命令将数据放入,而查询只应将其取出,但我可以看到命令没有通过数据源的查询链接到数据库网格。
这是一个选择问题,还是必须使用查询?
如果是这样,我似乎不能在查询中使用简单的 SQL 函数,例如 SUM、MIN< AVG、MAX,而必须将它们移到我的代码中。
如果我必须使用查询,我该如何实现 SQLUPDATE
和DROP
?
最后,我可以建立主/细节/细节关系吗?
假设我想要一个第三个 DB 网格,它显示客户所有订单的总数和平均值。它从orders
表中获取数据(但不能使用 SUM 和 AVG),每次用户选择不同的客户时,该表都会更新,从而给出主/明细/明细关系。我是否只是将其设置为两个主/从关系?IE,数据库网格,数据源,总订单和平均订单查询仅orders
引用并且没有引用customers
,即使它确实使用customer_id
?
在此先感谢您的帮助和澄清。我希望这个问题将来能成为其他人的参考(所以,请随时编辑它)。