我使用的是从基于文件的数据存储切换到基于数据库的应用程序。它有大量专门写入基于文件系统的代码。为了使交换机实现与旧系统一样的功能,计划将在新代码中更好地使用数据库。数据集检索另一个数据集的数据
一个问题是基于文件的系统经常读取单个记录,并重复读取它们以进行报告。这已经成为很多对数据库的查询,这很慢。
我一直试图充实的想法是使用两个数据集。一个数据集用于检索整个表格,另一个数据集用于查询第一个数据集合,从而减少与数据库服务器之间的通信开销。
我试着去看TADODataSet
的DataSource
属性,但是数据集似乎仍然需要连接,如果Connection
被分配,它会直接询问数据库。
我宁愿在另一个数据集中得到结果,而不是导航第一个数据集的原因是,已经实现了大量用于模拟旧系统的逻辑。该逻辑基于具有仅包含用旧界面查询的结果的数据集。
该功能只需要支持读取数据,而不是写回数据。
如何使用一个数据集来提供另一个数据集的值以供选择?
我使用的是Delphi 2007和MSSQL。
TADODataSet的DataSource属性的用途是允许Data Aware控件连接到TDataSet,而不必知道使用了哪种TDataSet后代。要链接数据集,您可以使用MasterSource和MasterFields属性。但是,即使在主控和细节之间的1-1也不允许您使用“从TDataSet1中选择”作为其他数据集的选择。 – 2011-05-11 11:09:33
@Marjan我虽然TADODataSet的DataSource属性是让TADODataSet成为Data Aware组件。 VCL参考文献说:“表示为数据集提供值的另一个数据集的数据源。” – MGH 2011-05-11 11:28:20
你是对的。我纯粹以“DataSource”为名进行回复。数据感知控件的数据源是将其连接到其数据集的数据源。但是数据集的数据源确实是一个完全不同的野兽。我查看了TClientDataSet,显然这是唯一具有MasterSource的数据集。其他的TDataSet后代确实有一个DataSource,这似乎是MasterSource用于TClientDataSet的东西,因为TADODataSet/TSQLDataSet没有MasterSource但有MasterFields属性。 – 2011-05-11 11:43:09