我必须在一个更大的数据集中加入 2 个或更多数据集



我正在使用 delphi 和 我想在一个更大的.我将在数据库网格中显示合并的结果。

最好的解决方案是什么?

提前谢谢你

使用Sql Server,您可以在其 TransactSQL 中构造一个 SQL 查询,该查询使用 JOIN 构造将两个表"连接"在一起。 例如,请参阅前面的答案:SQL Server:带有 WHERE 子句的多个表连接。

您应该查看MSDN上的TransactSQL文档,例如

https://msdn.microsoft.com/en-us/library/zt8wzxy4.aspx。

以下是从 演示 Pubs 数据库 SQL Server:

use pubs
select
a.au_id, 
a.au_fname,
a.au_lname,
t.title
from
authors a
join titleauthor x on a.au_id = x.au_id
join titles t on x.title_id = t.title_id
order by
a.au_lname, a.au_fname

您可以使用New Query在 SqlServer Management Studio 中执行它以试用它,然后尝试将其粘贴到 Delphi 项目中的 TAdoQuery 中。

可视化 JOIN 结果的一个好方法是使用 TBGrid。 但是,如果要编辑 JOIN 的一个或多个表的内容,则并不总是一件好事。 例如,业务任务可能是编辑作者书籍的详细信息。 为此,比 JOIN 更方便的做法是使用 AdoQuery 连接应用程序中的"作者"和"标题"表,方法是在它们之间设置所谓的"大纲-从"关系。 有多种方法可以做到这一点,也许你最好的选择是谷歌一个关于如何设置和使用它们的Delphi教程。

在 SQL 中,UNION 构造是从两个单独的表中获取数据的另一种方法。

顺便说一句,Ado 组件,例如 TAdoQuery,对于您想要做的事情来说可以正常工作。 如果你有一个版本的Delphi,你也可以尝试一下,但如果你以前没有做过这种事情,可能会更令人生畏。

更新您在评论中说过要从两台服务器获取数据 最终在一个数据集中,而不使用 Sql Server 的"链接服务器"方法。

要做到这一点非常简单:它需要一些设置,但合并 的数据可以用两行代码完成。 方法如下:

  1. 对于每个服务器,将以下内容放在表单/数据模块上:AdoConnection, AdoQuery、DataSetProvider 和 ClientDataSet。配置要连接到的 AdoConnection 其中一台服务器,将 AdoQuery 设置为使用 AdoConnection,并设置 DataSet 属性 的 DataSetProvider 到 AdoQuery。 设置 ClientDataSet to the DataSetProvider。 添加数据源并将其数据集属性设置为 连接到数据源的客户端数据集和 DBGrid。 给这些组件的 名称 A 和 B 后缀。

使用 Pubs 数据库示例,设置 AdoQuery 的 SQL。文本属性到

select
[Source] = 'ServerA',  -- and ServerB for the other one of course
*
from
authors
  1. 通过设置两组 CDS 的活动来检查两组组件是否正常工作 属性为 True。 在窗体的 FormCreate 事件中,添加代码以打开两个 CDS。

  2. 将第三个 ClientDataSet 'cdsMergedData' 添加到表单中,并赋予它自己的 数据源和数据库。 将 cdsMergedData 的 IndexFieldNames 设置为 'au_lname;au_fname'。

  3. 在窗体上放置一个 TButton 'btnMerge',并将以下代码添加到其 OnClick 中 事件 :

    cdsMergedData.Data := cdsServerA.Data;

    cdsMergedData.AppendData(cdsServerB.Data, True);

仅此而已。AppendDataTrue论点告诉cdsMergedData没有更多要加载的数据。 如果要从第三台服务器添加数据, 您可以将其设置为False表示cdsServerBTrue将其设置为cdsServerC

没有无代码的方法可以将cdsMergedData中所做的数据更改反馈回 源服务器。 您需要将更改复制到对应行 在相关cdsServerCDS中,然后调用ApplyUpdates

你可以试试这个: FIREDAC LOCALSQL

它就像一个魅力。 但要注意

  1. 我不确定它是否适用于 XE7。你必须检查它。在西特尔,它是可用的。
  2. 不能推荐它用于大量数据。 3-4千条记录可能会很慢。
  3. 我知道一个错误。 当制作 SUM(字段) 并使用分组时,由于某种原因,总和成为字符串字段。

相关内容

最新更新