3

ibdac クエリ ( http://www.devart.com/ibdac/components.htmlexecuting ) には、次のような記述ができる関数があります。

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

dbexpress クエリで同じコードを実装するにはどうすればよいですか (同様の関数はありません)。

4

1 に答える 1

5

同様の機能はありません。ただし、バックグラウンド スレッドで 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を使用しています。バックグラウンド実行が組み込まれています。

于 2011-09-19T10:34:50.010 に答える