不要用TField,应该用TStringField,TFloatField等。

解决方案 »

  1.   

    试一下以下代码,是动态创建clientdataset的
      for i := 0 to dm1.QryMain.FieldCount - 1 do
      begin
        with dm1.CDSTmp.Fielddefs.AddFieldDef do
        begin
          name := dm1.QryMain.Fields[i].FieldName;
          datatype := dm1.QryMain.Fields[i].DataType;
          required := dm1.QryMain.Fields[i].required;
        end;
      end;而且你的代码犯了逻辑性错误,你应该是创建了clientdataset之后才赋值的,而你现在吧创建的代码也写在其中,会出问题的        aField := TField.Create(nil);
            aField.SetFieldType(query2.Fields[0].DataType) ;
            aField.FieldName := query2.fields[1].fieldname ;
            cds1.Fields.add(afield);
            cds1.CreateDataSet ;     while not query2.Eof do
          begin
            cds1.InsertRecord([query2.fieldbyname('JGMC').asstring]);
            cds1.post;
            query2.Next;
          end;