TClientDataset中有多个表?

时间:2020-03-06 14:30:30  来源:igfitidea点击:

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

就像

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

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

解决方案

无法像我们所引用的那样在同一个TClientDataSet中拥有多个表数据。 TClientDataSet为单个数据集保留一个光标。

唯一的方法是联接表。但是随后,我们必须通过联接的外键提供联接的条件。

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

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

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

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

本文:

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

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

"在运行时使用TFields创建`ClientDataSet'的结构"