我需要在自定义线程中将数据获取到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;
所以我需要两个选项之一:
此后,应将查询分配给DataSource,这不会产生任何错误。最后,应该将DataSource分配给Grid(在我的情况下为CustomersGrid.DataController.DataSource:=DataModel.dtsrcClients
),这会导致访问冲突。