是否可以在Delphi中显示SQL查询的进度?例如,我在Firebird中有一个很长的复杂查询,我想向用户显示系统已经完成了多少百分比的查询。是否有任何类或组件能够做到这一点?
答案 0 :(得分:4)
AFAIK,无法测量查询执行时间并显示进度指示器。 DBMS不提供此类信息。
但是您可以显示“等待”对话框,并且能够取消查询。我们用AnyDAC做到这一点。将ResourceOptions.CmdExecMode设置为amCancelDialog并删除TADGUIxFormsAsyncExecuteDialog组件。然后,用户将能够取消查询。
答案 1 :(得分:3)
它严格依赖于您的数据库。有些人发布了这些信息(即Oracle将它们放在v $ session_longops视图中),而其他人则没有。通常,您必须对查询进行处理,除非数据库在此过程中提供某种回调 - 这也是数据库特定的功能。有些允许在结束前终止长时间运行的查询,有些则不允许。检查数据库文档。如果某个功能可用,则用于访问数据库的库必须显示它,否则您可能需要直接调用数据库客户端库。
答案 2 :(得分:1)
我认为您无法展示超出流程数据检索部分进度的任何内容。当您将SQL发送到Firebird时,在您的程序准备好接收数据之前,您将不会收到回复(取决于您使用的是哪种方法/组件。)