我有一个包含~50000行和16列的数据库(至少目前为止)。当在应用程序的主窗体中按下按钮时,程序会进行一些计算,从中计算结果。我需要将表的当前记录定位为计算结果。
示例:我的结果是35500.我需要将位置设置为表格中的记录编号35500。我怎样才能快速实现这一目标? 我使用ADO(没有SQL),我尝试过像
这样的指令table.First;
table.MoveBy(35500);
但是对于这种情况它们非常慢。我还必须提到定位是在任何组件(如TDBGrid或其他任何组件)中没有任何输出的情况下完成的,所以它必须是一种更快的方式
答案 0 :(得分:3)
我意识到你说没有数据集连接到你的数据集的数据集感知控件,但你是否尝试比较MoveBy(50000)
的时间与.DisableControls
和.EnableControls
的调用包围.DisableControls
?您可能认为没有任何支持db的组件,使用.EnableControls
和MoveBy(50000)
或不会产生任何影响,但事实上确实如此。
在我的系统上,针对Sql Server(2014)执行.DisableControls
需要19+
没有.EnableControls
和MoveBy()
的秒数和0.2秒,这是一个巨大的差异。
我认为我之前q的回答可能是相关的:Why does scrolling through ADOTable get slower and slower?
顺便说一句,Distance
主要用于前往所需行的最佳方式,可以用Locate
参数表示。正如Christine Ross的评论中所指出的,如果您知道要移动到的行中的一个或多个字段的值,则使用布尔if AdoQuery1.Locate('CountryCode', 'US', []) then
函数可以快得多,如
Locate
if AdoQuery1.Locate('CountryCode;Surname', VarArrayOf(['US', 'Smith']), []) then
允许您指定几个要匹配的字段,如
07:30 - 07:45PMTS09526052 | Sev9 | Location| | Due: 12/23/2016
NON PC HARDWARE - TROUBLESHOOT SW
Complete this Job