4

可能重复:
如何在处理期间查看查询执行的进度?

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

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

4

2 回答 2

4

OnFetchProgress为事件编写一个处理程序。从参考:

编写 OnFetchProgress 事件处理程序以在异步数据检索操作期间执行特定操作。OnFetchProgress 事件在数据检索期间定期触发以指示其进度。为此事件创建一个处理程序以响应此定期通知,例如为用户提供数据检索进度的可视指示。

请注意,MaxProgress将传递给OnFetchProgress事件的值是最佳猜测值。从如何使用 ADO FetchProgress 和 FetchComplete 事件

MaxProgress 不等于将返回的实际记录数。ADO 必须获取记录才能获得该值。这意味着 MaxProgress 只是一个最好的猜测。MaxProgress 通常等于 Progress 加上 Background Fetch Size。

您可以在打开查询之前向 Diego 的回答Select Count() ..中提到的数据库发出 a以获取将被检索的确切记录总数,但这并不总是可取的,因为它可能会导致冗余表扫描和复杂查询的大量执行时间.

于 2012-10-19T09:12:08.287 回答
1

不要认为你可以预测未来:)

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

构建批次和每个批次的负载,比较批次大小 * 批次数量与记录总数。

于 2012-10-19T09:15:59.607 回答