Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在Delphi中将字段添加到FDMemTable_Database_Delphi - Fatal编程技术网

Database 在Delphi中将字段添加到FDMemTable

Database 在Delphi中将字段添加到FDMemTable,database,delphi,Database,Delphi,我正在用DBGrid编写一些代码,但没有足够的数据可以通过FDQuery获得。我想自定义数据旁边的“FDQuery”数据。我发现这个组件应该能够做到这一点,它被称为FDMemTable。我可以从FDQuery到FDMemTable获取数据,但我不能添加一个可以放置不同数据的新字段。所以我的问题是如何用FDQuery连接数据并在FDMemTable中添加额外的列 procedure TWorkflowDM.Temp; var Error: string; Temp: string; beg

我正在用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;
程序TWorkflowDM.Temp;
变量
错误:字符串;
Temp:字符串;
开始
尝试
FDQuery1.开放;
FDQuery1.FetchAll;
FDMemTable1.Data:=FDQuery1.Data;

FDMemTable1.FieldDefs.Add('Test',ftString,20,False) 我们从源数据集中复制字段定义并附加其他字段。然后我们调用
CreateDataset
或。这将创建所有必要的字段并打开
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;

你为什么要这么做?您可以在SQL语句中添加空列(字段),而无需跳转或使用内存中的表。@KenWhite用于将SQL查询数据集与其他数据组合。如何在SQL查询中添加空列。我正在使用Firebird。
从MyTable中选择Column1、Column2、Column3''作为MyNewCol,其中SomeCondition添加了一个最多可接受10个字符的新字符列。然后可以在其他地方使用
FieldByName('MyNewCol')
。(当然,可以用您喜欢的任何其他列别名替换MyNewCol。)如果您使用的DBMS支持像
REPEAT
REPLICATE
这样的函数,您可以使用它们来代替空格。@KenWhite也是一个很好的解决方案。非常感谢。