我知道你說沒有連接到數據集的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