在执行 DBExpress 查询时如何让我的程序响应用户输入?

发布于 2024-12-05 10:08:58 字数 333 浏览 2 评论 0原文

ibdac 查询 ( http://www.devart.com/ibdac/components.html )有一个函数executing,我可以在其中编写类似的内容:

 while MyQuery.Executing do
 begin
   application.ProcessMessages;
   Sleep(1);
 end;

如何使用 dbexpress 查询实现相同的代码(没有类似的函数)?

ibdac query ( http://www.devart.com/ibdac/components.html ) has a function executing where I can write something like:

 while MyQuery.Executing do
 begin
   application.ProcessMessages;
   Sleep(1);
 end;

how do I implement the same code with a dbexpress query (there is no similar function)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

临风闻羌笛 2024-12-12 10:08:58

没有类似的功能。但是您可以在后台线程中执行 MyQuery,主线程将在后台线程完成后等待。例如:

type
  TMyThread = class(TThread)
  private
    FQuery: TSQLQuery;
  protected
    procedure Execute; override;
  public
    constructor Create(AQuery: TSQLQuery);
  end;

constructor TMyThread.Create(AQuery: TSQLQuery);
begin
  inherited Create;
  FreeOnTerminate := False;
  FQuery := AQuery;
end;

procedure TMyThread.Execute;
begin
  FQuery.ExecSQL;
end;

var
  oThread: TMyThread;
....

  oThread := TMyThread.Create(MyQuery);
  try
    while not oThread.Finished do begin
      Application.ProcessMessages;
      Sleep(1);
    end;
  finally
    oThread.Free;
  end;

PS:顺便说一句,我正在使用 AnyDAC。它具有内置后台执行

There is no similar functionality. But you can execute MyQuery in a background thread and main thread will wait when the background thread is finished. For example:

type
  TMyThread = class(TThread)
  private
    FQuery: TSQLQuery;
  protected
    procedure Execute; override;
  public
    constructor Create(AQuery: TSQLQuery);
  end;

constructor TMyThread.Create(AQuery: TSQLQuery);
begin
  inherited Create;
  FreeOnTerminate := False;
  FQuery := AQuery;
end;

procedure TMyThread.Execute;
begin
  FQuery.ExecSQL;
end;

var
  oThread: TMyThread;
....

  oThread := TMyThread.Create(MyQuery);
  try
    while not oThread.Finished do begin
      Application.ProcessMessages;
      Sleep(1);
    end;
  finally
    oThread.Free;
  end;

PS: Btw, i am using AnyDAC. It has build-in background execution.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文