怎么样对ClientDataSet动态增加字段?
我现在只有一个二维数组,和一个ClientDataSet,怎样把这个二维数组放到ClientDataSet中去?
我这样子做行不通:
procedure AddItIntoClientDataSet;
var
myField: TField;
myFieldType: TFieldType;
begin
ClientDataSet1.Active := false;
myField := TField.Create(nil);
myFieldType := ftString;
myField.SetFieldType(myFieldType);
myField.FieldName := 'F1';
ClientDataSet1.Fields.Add(myField);
ClientDataSet1.CreateDataSet;
ClientDataSet1.Open;
ClientDataSet1.Append;
ClientDataSet1.FieldByName('F1').Value := '1';
....
end;
5 个解决方案
就我所知道的说遗下:
clientDataSet是用来连接远端模块的,你要实现的功能可以在他说连的数据集中实现。
你可以动态的创建一个TClientDataSet,然后对这个数据集进行操作,具体步骤如下:
function CreateDataSetInMemory(AFieldDefs: TFieldDefs): TDataSet
var tmpTable: TClientDataSet;
begin
Result := nil
if AFieldDefs <> nil then
begin
tmpTable := TClientDataSet.Create(nil)
tmpTable.FieldDefs.Assigned(AFieldDefs);
Result := (tmpTable as TDataSet);
end
else
FreeAndNil(tmpTable);
end;
然后在程序里定义一个TDataSet的变量,并对其的FieldDefs属性赋值,再调用上述的方法创建内存里的数据集,你就能够对其想TQuery操作了,如果有必要的话在扩展该方法,定义索引字段等。
另外,用完后别忘了释放对象!
忘了在FreeAndNil(tmpTable)后面加一句Result := Nil了,如果这样能满足你的需求的话,有什么问题可以继续提!