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'的结构"