1

是否可以将来自多个表的多个查询的结果放入 TClientDataset 中?

就像

SELECT * from t1;
SELECT * from t2;
SELECT * from t3;

我似乎无法找到一种方法来让数据提供者 (SetProvider) 一次从多个表中提取结果。

4

3 回答 3

12

ClientDatasets可以包含本身就是其他数据集的字段。因此,如果您想在单个数据集中创建三个表,请创建三个ClientDatasets包含您想要的三个结果集,然后您可以将它们放入一个ClientDataSet.

本文:

http://dn.codegear.com/article/29001

向您展示如何在运行时和设计时执行此操作。请特别注意标题为:

“使用”在运行时创建ClientDataSet's结构TFields

于 2008-09-21T21:19:38.223 回答
4

唯一的方法是加入表格。但是你必须通过加入的外键提供加入的标准。

select * from t1, t2, t3 where t1.key = t2.key and t2.key = t3.key;

现在假设您想出了一个允许这种连接的键(如 LineNr)。然后,您可以使用完全外连接来包含所有记录(如果不是所有表都具有相同的行数,这很重要)。但这在某种程度上是一个黑客行为。确保不要将 auto_number 作为键,因为它不会重复使用键,因此往往会在编号中留下漏洞,从而导致许多行仅部分填充了值。

如果要从具有相同字段集的多个表中填充客户端数据集,可以使用 UNION 运算符来执行此操作。这将只使用相同的列并将所有行合并到一个表中。

于 2008-09-21T16:11:53.987 回答
0

没有办法像您引用的那样在同一个 TClientDataSet 中拥有多个表数据。TClientDataSet 为单个数据集保存一个游标。

于 2008-09-21T16:05:47.433 回答