在delphi中处理来自TAdoQuery的大量数据

时间:2014-02-15 21:51:42

标签: delphi

编程语言:Delphi 6

后端的SQL Server。

问题:

每次我们需要时,应用程序都会用来命中数据库,为了得到某些东西,它会超过2000次,导致应用程序运行缓慢。这个命中DB发生在很多表中,每个表都有不同的结构和不同的列数。所以我正在努力减少通话次数。 我们每张桌子一次可以有大约4000条记录。

建议的解决方案:

让我们立刻从DB获取所有数据并在需要时使用它,这样我们就不必继续使用数据库了。

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

此版本的Delphi没有字典。所以我们已经从String List中实现了一个字典(让我们假设实现很好)。

解决方案1:

将其存储在我们创建的字典中: 一个独特的领域作为关键。 并将其余数据添加为String List中的字符串,分隔如下: FiledName1:FileValue,FieldName2:FieldValue2,... .. 可能必须创建大约2000个字符串列表以将数据映射到键。 我看了下面的链接: How Should I Implement a Huge but Simple Indexed StringList in Delphi? 看起来他们可以转移到我不可能的另一个DB。 这是一个理智的解决方案吗?

解决方案2:

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

解决方案3:

或者鉴于我正在使用TAdoQuery,我应该使用Seek或找到我的记录。 请告知最好的方法吗?

要求:

需要随机访问此数据。  当我们根据需要获取所有数据时,数据的插入只会发生一次。

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

不断需要按主键搜索。

除了更改应用程序之外,我们已经在DB上做了很好的索引来处理数据库方面的事情。这更能使应用程序运行良好。

1 个答案:

答案 0 :(得分:1)

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

Carey Jensen几年前写了一系列关于它的文章,你可能会觉得它很有用。第一个可以在A ClientDataset in Every Database Application中找到 - 系列中的其他人都可以从中链接。