我使用的应用程序是从基于文件的数据存储切换到基于数据库的应用程序。它具有大量专门针对基于文件的系统编写的代码。为了实现切换,我正在实现将作为旧系统运行的功能,然后计划在新代码中更好地使用数据库。
一个问题是基于文件的系统经常读取单个记录,并重复读取报告。这已成为很多对数据库的查询,这很慢。
我一直试图充实的想法是使用两个数据集。一个数据集用于检索整个表,另一个数据集用于查询第一个数据集,从而减少与数据库服务器的通信开销。
我试图查看DataSource
的{{1}}属性,但数据集似乎仍然需要连接,如果分配了TADODataSet
,它会直接询问数据库。
我希望将结果导入另一个数据集而不是导航第一个数据集的原因是,已经实现了大量用于模拟旧系统的逻辑。此逻辑基于具有仅包含使用旧接口查询的结果的数据集。
该功能只需支持读取数据,而不是回写数据。
如何使用一个数据集为另一个数据集提供值以供选择?
我正在使用Delphi 2007和MSSQL。
答案 0 :(得分:1)
您可以使用ClientDataSet / DataSetProvider对从现有DataSet中获取数据。您可以在源数据集上使用过滤器,对ClientDataSet和提供程序事件过滤,以仅将数据集修剪为有趣的记录。
我已经成功地在几个迁移项目中使用了这种技术,并缓解了类似的情况,其中旧的SQL Server 7数据库被查询数千次以检索具有痛苦性能成本的单个记录。仅查询一次,然后将单个记录提取到客户端数据集,当时不仅是一个优雅的解决方案,而且对特定应用程序的性能提升很大:最好的例子是将8小时的过程缩短为15分钟。可怜的用户那时爱我。
ClientDataSet只是一个TDataSet,可以无缝集成到现有代码和UI中。