我正在用 DBGrid 编码一些东西,但我用 FDQuery 获得的数据不足。我想要“FDQuery”数据旁边的自定义数据。我找到了应该能够做到这一点的组件,它被称为 FDMemTable。我可以从 FDQuery 获取数据到 FDMemTable,但我不能添加一个新字段,我可以在其中放置不同的数据。所以我的问题是如何正确连接数据与 FDQuery 并在 FDMemTable 中添加额外的列。

procedure TWorkflowDM.Temp;
var
  Error: string;
  Temp: string;
begin
  try
    FDQuery1.Open;
    FDQuery1.FetchAll;
    FDMemTable1.Data:= FDQuery1.Data;
    FDMemTable1.FieldDefs.Add('Test', ftString, 20, False);        <-ERROR (Error 'FDMemTable1: Field ''Test'' not found')
    FDMemTable1.Open;
    FDMemTable1.First;
    while not FDMemTable1.Eof do
    begin
      Temp:= FDMemTable1.FieldByName('Test').AsString;
      FDMemTable1.Next;
    end;
  except
    on E: Exception do
      Error:= E.Message;
  end;
end;

最佳答案

我们从源数据集中复制字段定义并附加附加字段。然后我们调用 CreateDatasetoptionally set Active to true 。这将创建所有必需的字段并打开 FDMemTable 。然后我们通过 CopyDataset 方法填充它。此代码有效:

procedure TWorkflowDM.Temp;
var
  Error: string;
  Temp: string;
begin
  try
    FDQuery1.Open;
    // FDQuery1.FetchAll;
    FDMemTable1.FieldDefs := FDQuery1.FieldDefs;
    FDMemTable1.FieldDefs.Add('Test', ftString, 20{, False}); // default parameter
    FDMemTable1.CreateDataSet;//or just Open that sets Active to true;
    FDMemTable1.CopyDataSet(FDQuery1);
    FDMemTable1.First;
    while not FDMemTable1.Eof do
    begin
      Temp := FDMemTable1.FieldByName('Test').AsString;
      FDMemTable1.Next;
    end;
  except
    on E: Exception do
      Error := E.Message;
  end;
end;

关于database - 在 Delphi 中将字段添加到 FDMemTable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34789723/

10-11 00:06