【发布时间】:2010-08-25 14:28:36
【问题描述】:
是否可以在 Delphi 中显示 SQL 查询的进度?例如,我在 Firebird 中有一个很长的复杂查询,我想向用户显示系统已经完成了多少百分比的查询。是否有任何类或组件能够做到这一点?
【问题讨论】:
-
handle期间如何查看查询执行进度? stackoverflow.com/questions/4237112/…
是否可以在 Delphi 中显示 SQL 查询的进度?例如,我在 Firebird 中有一个很长的复杂查询,我想向用户显示系统已经完成了多少百分比的查询。是否有任何类或组件能够做到这一点?
【问题讨论】:
AFAIK,无法测量查询执行时间并显示进度指示器。 DBMS 不提供此类信息。
但您可以显示“等待”对话框以取消查询。我们通过 AnyDAC 做到这一点。将 ResourceOptions.CmdExecMode 设置为 amCancelDialog 并删除 TADGUIxFormsAsyncExecuteDialog 组件。然后用户将能够取消查询。
【讨论】:
这完全取决于您的数据库。有些发布这些信息(即 Oracle 将它们放在 v$session_longops 视图中),有些则不发布。通常您必须对查询进行线程化,除非数据库在此过程中提供某种回调 - 这也是数据库特定的功能。有些允许在结束之前终止长时间运行的查询,有些则不允许。检查您的数据库文档。并且如果某个功能可用,您用来访问数据库的库必须将其显示出来,否则您可能需要直接调用 DB 客户端库。
【讨论】:
我认为除了流程中数据检索部分的进度之外,您无法展示任何内容。当您将 SQL 发送到 Firebird 时,您将不会收到回复,直到您的程序准备好接收数据(取决于您使用的方法/组件。)
【讨论】: