FDQuery CloneCursor引发访问冲突

时间:2019-06-08 11:58:37

标签: delphi-xe firedac

我需要在自定义线程中将数据获取到FDQuery中。 FireDac中有一个示例。它将数据分配给FDMemTable。我需要相同但将数据分配给给定的FDQuery。

它运行正常,但是当我尝试将其分配给Grid时,它将引发访问冲突异常。我已经研究了FireDac文档,但是CloneCursor可以与FDMemTable一起使用,而不能与FDQuery一起使用。

constructor TQueryThread.Create(SQLText: string; QueryName: TFDQuery);
begin
  inherited Create(True);
  FDConnection := TFDConnection.Create(nil);
  FDConnection.ConnectionDefName := 'IBConn';
  FDConnection.LoginPrompt := False;
  FDConnection.Open;
  FDQuery := TFDQuery.Create(nil);
  FDQuery.Connection := FDConnection;
  FDQuery.SQL.Text := SQLText;
  FDQuery.ResourceOptions.CmdExecMode := amBlocking;
  FFDQuery := QueryName;
end;
procedure TQueryThread.Execute;
begin
  FDQuery.Open;
  Synchronize(procedure
              begin
                FFDQuery.CloneCursor(FDQuery, True);
              end);
end;

所以我需要两个选项之一:

  1. 作为参数传递的FDQuery(qryClients)应该做的工作(打开) 在一个线程中。但是我不知道如何将其传递给执行过程 来自构造函数参数。
  2. 某些Temp查询(qryTempThread)应该完成工作,然后复制 数据到参数查询中。

此后,应将查询分配给DataSource,这不会产生任何错误。最后,应该将DataSource分配给Grid(在我的情况下为CustomersGrid.DataController.DataSource:=DataModel.dtsrcClients),这会导致访问冲突。

0 个答案:

没有答案