我有一个大约50000行16列的数据库(至少现在是这样)。当在应用程序的主窗体中按下按钮时,程序会进行一些计算,从而计算出结果。我需要将表的当前记录定位为计算结果。
我有35500个结果。我需要把位置设为表中的记录号35500。我怎样才能快速完成?
我使用ADO(不使用SQL)并尝试使用如下指令
table.First;
table.MoveBy(35500);
但他们对这个案子反应很慢。我还必须提到,定位是在没有任何输出的情况下完成的,比如tdbgrid或其他组件,所以它必须是一种更快的方式
最佳答案
我知道你说没有数据库感知控件连接到你的数据集,但是你有没有试过比较在调用MoveBy(50000)
和.DisableControls
时执行.EnableControls
的时间?您可能认为,如果没有任何数据库感知组件,使用或不使用.DisableControls
和.EnableControls
都不会有什么区别,但事实上确实如此。
在我的系统中,对SQL服务器执行MoveBy(50000)
操作(2014)需要19+
不带.DisableControls
和.EnableControls
的秒数与带的0.2秒数相差很大。
我认为我对前一个问题的回答可能是相关的:Why does scrolling through ADOTable get slower and slower?
顺便说一句,MoveBy()
主要是在可以用它的Distance
参数来表示到达所需行的最佳方式时非常有用。正如christine ross在评论中指出的,如果您知道要移动到的行中一个或多个字段的值,那么使用booleanLocate
函数会更快,如
if AdoQuery1.Locate('CountryCode', 'US', []) then
Locate
允许您指定多个要匹配的字段,如if AdoQuery1.Locate('CountryCode;Surname', VarArrayOf(['US', 'Smith']), []) then
关于database - 在数据库表中快速定位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41191206/