在数据库表中快速定位

时间:2016-12-16 19:26:20

标签: database delphi position

我有一个包含~50000行和16列的数据库(至少目前为止)。当在应用程序的主窗体中按下按钮时,程序会进行一些计算,从中计算结果。我需要将表的当前记录定位为计算结果。

示例:我的结果是35500.我需要将位置设置为表格中的记录编号35500。我怎样才能快速实现这一目标? 我使用ADO(没有SQL),我尝试过像

这样的指令
table.First;
table.MoveBy(35500);

但是对于这种情况它们非常慢。我还必须提到定位是在任何组件(如TDBGrid或其他任何组件)中没有任何输出的情况下完成的,所以它必须是一种更快的方式

1 个答案:

答案 0 :(得分:3)

我意识到你说没有数据集连接到你的数据集的数据集感知控件,但你是否尝试比较MoveBy(50000)的时间与.DisableControls.EnableControls的调用包围.DisableControls?您可能认为没有任何支持db的组件,使用.EnableControlsMoveBy(50000)或不会产生任何影响,但事实上确实如此。

在我的系统上,针对Sql Server(2014)执行.DisableControls需要19+ 没有.EnableControlsMoveBy()的秒数和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