我知道你说没有连接到数据集的db-aware控件,但你有没有试过比较时间去做MoveBy(50000)
有没有被.DisableControls
和.EnableControls
的呼叫包围?您可能会认为没有任何db-aware组件,使用.DisableControls
和.EnableControls
或不会产生影响,但事实上它确实如此。
在我的系统,做一个MoveBy(50000)
对SQL Server(2014)采用19+ 秒无.DisableControls
和.EnableControls
和0.2秒,这是一个巨大的差异。
我想我的回答这个以前q可以为相关:Why does scrolling through ADOTable get slower and slower?
顺便说一句,MoveBy()
主要是有用的时候会到你想要的行的最佳方式,可以通过其Distance
参数来表示。作为由克里斯汀·罗斯评论指出,如果你知道你想要移动到该行中的一个或多个字段的值,它可以更快地使用布尔Locate
功能,如
if AdoQuery1.Locate('CountryCode', 'US', []) then
Locate
允许您指定几个字段,以匹配在
if AdoQuery1.Locate('CountryCode;Surname', VarArrayOf(['US', 'Smith']), []) then
可能是因为你问微软ADO司机做35500“移动下一个记录”操作,此起彼伏。如果你确实需要ISAM操作而不是SQL(但是为什么???),也许你会用一些Delphi本地引擎(tdbf.sf.net,nexusDB或Torry.net中的任何东西)获得更多的运气,在那里你可以做一些像'DataSetObject.RecNo:= 12345;'? –
使用ClientDataSet – FLICKER
@FLICKER:实际上,对于OP在数据库服务器上提到的表的大小,ADO比TClientDataSet快得多,特别是在检索阶段。 – MartynA