可能重复:
如何在处理期间查看查询执行的进度?
我想显示一个进度条,指示从数据库中获取结果需要多长时间。
我TADOQuery
在异步模式下使用并打开它。当查询状态为stFetching
时,有没有办法知道[获取的记录数/总记录数]?
可能重复:
如何在处理期间查看查询执行的进度?
我想显示一个进度条,指示从数据库中获取结果需要多长时间。
我TADOQuery
在异步模式下使用并打开它。当查询状态为stFetching
时,有没有办法知道[获取的记录数/总记录数]?
OnFetchProgress
为事件编写一个处理程序。从参考:
编写 OnFetchProgress 事件处理程序以在异步数据检索操作期间执行特定操作。OnFetchProgress 事件在数据检索期间定期触发以指示其进度。为此事件创建一个处理程序以响应此定期通知,例如为用户提供数据检索进度的可视指示。
请注意,MaxProgress
将传递给OnFetchProgress
事件的值是最佳猜测值。从如何使用 ADO FetchProgress 和 FetchComplete 事件:
MaxProgress 不等于将返回的实际记录数。ADO 必须获取记录才能获得该值。这意味着 MaxProgress 只是一个最好的猜测。MaxProgress 通常等于 Progress 加上 Background Fetch Size。
您可以在打开查询之前向 Diego 的回答Select Count() ..
中提到的数据库发出 a以获取将被检索的确切记录总数,但这并不总是可取的,因为它可能会导致冗余表扫描和复杂查询的大量执行时间.
不要认为你可以预测未来:)
在加载之前,向数据库提交一个计数以了解将加载多少条记录。
构建批次和每个批次的负载,比较批次大小 * 批次数量与记录总数。