Database 在Delphi中将字段添加到FDMemTable
我正在用DBGrid编写一些代码,但没有足够的数据可以通过FDQuery获得。我想自定义数据旁边的“FDQuery”数据。我发现这个组件应该能够做到这一点,它被称为FDMemTable。我可以从FDQuery到FDMemTable获取数据,但我不能添加一个可以放置不同数据的新字段。所以我的问题是如何用FDQuery连接数据并在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
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也是一个很好的解决方案。非常感谢。