怎样向clientdataset动态建立字段


我用如下方法,向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..
就是字段类型不匹配
 这问题怎么解决啊?



10 个解决方案

#1



      ClientDataSet_Master.FieldDefs.Add('BH',ftstring,8);
      ClientDataSet_Master.FieldDefs.Add('path',ftstring,50);
      ClientDataSet_Master.IndexFieldNames:='BH';
      ClientDataSet_Master.CreateDataSet;                     //建立数据集
      ClientDataSet_Master.Active;

#2


为什么要这样动态创建字段呢?
从提示上看你的pc_no字段应该是TWideStringField类型,而不是像你所声明的Tstringfield类型。

#3


为什么要这样动态创建字段呢?
从提示上看你的pc_no字段应该是TWideStringField类型,而不是像你所声明的Tstringfield类型。

#4


先不管为什么要这样建字段,能不能用tfield来建?该怎样建?

#5


自己顶上...
求最终答案..

#6


var
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; 

#7


  for i:=0 to qry.FieldCount - 1 do
  begin
    cds1.FieldDefs.Add(qry.Fields[i].FieldName,qry.Fields[i].DataType,
    qry.Fields[i].Size);
  end;

#8



 with cds do
  begin
    with FieldDefs.AddFieldDef do
    begin
      DataType := ftBoolean;
      Name := 'ColA';
    end;
    with FieldDefs.AddFieldDef do
    begin
      DataType := ftString;
      Size := 16;
      Name := 'ColB';
    end;
  end;
  cds.CreateDataSet;

#9


看错,原来要用tfield

#10


解决了...散分

  判断一下就好了
  if fquery.fields[i].datatype=ftstring then
  Tstringfield.create
  if ........................=ftfloat then
  Tfloatfield.cretae
散分

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告