如何从ADO查询中获取记录计数?

时间:2012-10-19 09:08:54

标签: sql sql-server-2008 delphi delphi-2009

  

可能重复:
  How to see progress of query execution during handle?

我想显示一个进度条,指示从数据库中获取结果需要多长时间。

我使用TADOQuery并在异步模式下打开它。查询状态为stFetching时,有没有办法知道[获取的记录数/总记录数]?

2 个答案:

答案 0 :(得分:4)

OnFetchProgress事件编写处理程序。来自参考文献:

  

编写一个OnFetchProgress事件处理程序以在其中执行特定操作   异步数据检索操作。 OnFetchProgress事件   在数据检索期间定期触发以提供指示   它的进步。为此事件创建一个处理程序以对此做出反应   定期通知,例如为用户提供视觉效果   表明数据检索的进展。

请注意,将传递给MaxProgress事件的OnFetchProgress值是最佳猜测。来自How To Use the ADO FetchProgress and FetchComplete Events

  

MaxProgress不等于实际的记录数   回。 ADO必须获取记录才能获得此值。   这意味着MaxProgress只是最好的猜测。 MaxProgress通常   等于进度加背景提取大小。

您可以在打开查询之前向Diego answer中提到Select Count() ..发送数据库,以获取将要检索的确切记录总数,但这并不总是令人满意的导致冗余表扫描和复杂查询的大量执行时间。

答案 1 :(得分:1)

不要以为你能预测未来:)

在加载之前,向数据库提交一个计数,以了解将加载多少条记录。

在批次和每批次上构建负载,将批次的大小*批次数量与记录总数进行比较。