【问题标题】:Handling Huge data from TAdoQuery in delphi在 delphi 中处理来自 TAdoQuery 的大量数据
【发布时间】:2014-02-15 21:51:41
【问题描述】:

编程语言:Delphi 6

后端的 SQL Server。

问题:

每次我们需要一些东西时,应用程序都会点击 DB,最终为了获得某些东西而点击它超过 2000 次,导致应用程序运行缓慢。这种命中数据库发生在许多表中,每个表具有不同的结构和不同的列数。所以我正在尝试减少通话次数。 每个表一次可以有大约 4000 条记录。

建议的解决方案:

让我们一次从 DB 中获取所有数据,并在需要时使用它,这样我们就不必一直访问 DB。

到目前为止,解决方案的结果如何:

这个版本的 Delphi 没有字典。所以我们已经有了一个来自 String List 的字典的实现(让我们假设实现是好的)。

解决方案 1:

将其存储在我们创建的字典中: 作为键的唯一字段。 并将其余数据作为字符串添加到字符串列表中,如下所示: 归档名称 1:文件值,字段名称 2:字段值 2,...... 可能必须创建大约 2000 个字符串列表才能将数据映射到键。 我查看了以下链接: How Should I Implement a Huge but Simple Indexed StringList in Delphi? 看起来他们可以转移到我不可能的不同数据库。 这是一个明智的解决方案吗?

解决方案 2:

将其存储在带有 List 的字典中。 该列表将包含 Delphi Records。 记录不能直接添加,所以我看了一下这个链接: Delphi TList of records

解决方案 3:

或者鉴于我正在使用 TAdoQuery,我应该使用 Seek 还是 locate 来查找我的记录。 请建议最好的方法?

要求:

需要随机访问这些数据。 当我们获得所有数据时,数据的插入只会发生一次,每个表都需要它们。

只需要读取数据,不必修改。

经常需要根据主键进行搜索。

除了更改应用程序之外,我们已经在数据库上进行了良好的索引以处理数据库方面的事情。这更多是为了让应用程序运行良好。

【问题讨论】:

  • TClientDataSet 有什么问题?
  • 谢谢我来自 C# 背景。使用 TClientDataset 就是我所需要的。简单但不知道在哪里看。
  • 您不需要 TClientDataset。 ADO 数据集能够在断开/批处理模式下工作。
  • 谢谢 是的,昨天开始调查它。 TAdoDataSets 似乎也能胜任。

标签: delphi


【解决方案1】:

这听起来像是TClientDataSet 的完美用例。它是一个内存数据集,可以轻松地进行索引、过滤和搜索,保存您可以使用 SQL 语句从数据库中检索到的任何信息,并且在几千个合理大小的数据行中具有相当不错的性能。 (上面的链接指向当前文档,因为我没有适用于 Delphi 6 文档的文档。它们应该非常相似,尽管我不记得哪个特定版本添加了直接包含 MidasLib 的功能使用子句消除在您的应用中分发Midas.dll。)

Carey Jensen 几年前写了一系列关于它的文章,您可能会发现这些文章很有用。第一个可以在A ClientDataset in Every Database Application 中找到 - 该系列中的其他人都与它相关联。

【讨论】:

  • 太好了!感谢您的链接。
猜你喜欢
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 2019-05-19
相关资源
最近更新 更多