我用如下方法,向clientdataset动态建立字段, clientdataet指向fquery..
var
i:integer;
a:Tfield;
begin
fcds.Close;
for i:=0 to fquery.FieldCount-1 do
begin
a:=Tstringfield.Create(fcds);
a.FieldName:=fquery.Fields[i].FieldName;
a.DataSet:=fcds;
a.FieldKind:=fkdata;
end;
fcds.FieldDefs.Update;
fcds.open;
end;
但运行时出现错误,:type mismatch for field "pc_no".expecting string, actual is widestring..
就是字段类型不匹配
这问题怎么解决啊?
var
i:integer;
a:Tfield;
begin
fcds.Close;
for i:=0 to fquery.FieldCount-1 do
begin
a:=Tstringfield.Create(fcds);
a.FieldName:=fquery.Fields[i].FieldName;
a.DataSet:=fcds;
a.FieldKind:=fkdata;
end;
fcds.FieldDefs.Update;
fcds.open;
end;
但运行时出现错误,:type mismatch for field "pc_no".expecting string, actual is widestring..
就是字段类型不匹配
这问题怎么解决啊?
估计是因为这句你写死了字段类型的原因
i:integer;
a:Tfield;
begin
fcds.Close;
for i:=0 to fquery.FieldCount-1 do
begin
a:=TFieldClass(fquery.Fields[i].ClassType).Create(fcds);
a.FieldName:=fquery.Fields[i].FieldName;
a.DataSet:=fcds;
a.FieldKind:=fkdata;
end;
fcds.FieldDefs.Update;
fcds.open;
end;
function TDocRoleManage_RealDetail_f.UF_CreateDataSet(): TClientDataSet;
var
cds: TClientDataSet;
lfd_FieldDef: TFieldDef;
lid_IndexDef: TIndexDef;
begin
//result := Nil;
cds := TClientDataSet.Create(nil); lfd_FieldDef := cds.FieldDefs.AddFieldDef;
lfd_FieldDef.Name := 'LBDM';
lfd_FieldDef.DataType := ftString;
lfd_FieldDef.Size := 10; lfd_FieldDef := cds.FieldDefs.AddFieldDef;
lfd_FieldDef.Name := 'XH';
lfd_FieldDef.DataType := ftString;
lfd_FieldDef.Size := 2; lfd_FieldDef := cds.FieldDefs.AddFieldDef;
lfd_FieldDef.Name := 'DM';
lfd_FieldDef.DataType := ftString;
lfd_FieldDef.Size := 10; lfd_FieldDef := cds.FieldDefs.AddFieldDef;
lfd_FieldDef.Name := 'DES';
lfd_FieldDef.DataType := ftString;
lfd_FieldDef.Size := 50; //lid_IndexDef.Options := 'ixDescending'; cds.CreateDataSet;
result := cds; // cds.IndexDefs;
end;