【发布时间】:2016-12-16 19:26:19
【问题描述】:
我有一个大约 50000 行和 16 列的数据库(至少现在是这样)。当在应用程序的主窗体中按下按钮时,程序会进行一些计算,从中计算出结果。我需要将表的当前记录定位为计算结果。
例子:我的结果是35500。我需要将位置设置为表中的记录号35500。我怎样才能快速做到这一点? 我使用 ADO(无 SQL),我尝试过类似的指令
table.First;
table.MoveBy(35500);
但在这种情况下它们非常慢。我还必须提到,定位是在没有任何组件(如 TDBGrid 或其他任何组件)中完成的,因此它必须是一种更快的方式
【问题讨论】:
-
可能是因为您要求 Microsoft ADO 驱动程序一个接一个地执行 35500 次“移动下一条记录”操作。如果你真的需要 ISAM 操作而不是 SQL(但为什么???)也许你会更幸运地使用一些 Delphi-native 引擎(tdbf.sf.net、nexusDB 或 Torry.net 中的任何东西),你可以做类似
DataSetObject.RecNo := 12345;的事情? -
使用客户端数据集
-
@FLICKER:实际上,对于数据库服务器上 OP 提到的大小的表,ADO 比 TClientDataSet 快得多,尤其是在检索阶段。
-
不需要在你的问题标题中重复你的标签。标签系统在这里工作得非常好 - 请停止尝试帮助它。它不需要帮助。
-
@KenWhite 好的,我会记住的