本帖最后由 sung001 于 2010-02-23 23:02:01 编辑

解决方案 »

  1.   

       begin
                                IntegerField := TIntegerField.Create(dm);
                                IntegerField.FieldKind :=fkInternalCalc ;
                                IntegerField.FieldName := '序号';
                                IntegerField.Name := 'ID';
                                IntegerField.DisplayWidth :=4;
                               
                                IntegerField.DataSet := dm;
                                
                               end;                          begin
                                Field := TStringField.Create(dm);
                                Field.FieldKind := fkData ;
                                Field.FieldName := 'ID1';
                                Field.Name := 'ID1';
                                Field.DisplayWidth :=10;
                                Field.Size :=20;
                                //Field.DisplayLabel :='部门编号' ;
                                Field.DataSet := dm;
                               end;我估计你的字段都不存在
      

  2.   


    for i := 0 to Query.FieldCount - 1 do
        begin
          cds.Fields[i].AsVariant := Query.Fields[i].AsVariant;
        end;
    改成for i := 0 to Query.RecordCount - 1 do
        begin
          for i := 0 to Query.FieldCount - 1 do
        begin
    cds.append;
          cds.Fields[i].AsVariant := Query.Fields[i].AsVariant;
    cds.post;    
    end;    end;应该就行了!
      

  3.   

    以上答案均不对。
    问题出在这一段:
    for i := 0 to Query.FieldCount - 1 do
        begin
          aDataType := Query.Fields[i].DataType;
          cds.FieldDefs.Add(Query.Fields[i].FieldName, aDataType);
        end;这里的aDataType在add的时候要根据实际的aDataType不同,定义不同的长度等选项。具体add的语法不同。计算datatype的size也不相同。
    我的数据比较简单,用了下面的代码,简单处理了几种类型for i := 0 to Query.FieldCount - 1 do
        begin
          aDataType := Query.Fields[i].DataType;
          case aDataType of
            ftString: cds.FieldDefs.Add(Query.Fields[i].FieldName, aDataType, Query.Fields[i].Size);
            ftBCD: cds.FieldDefs.Add(Query.Fields[i].FieldName, ftString, Query.Fields[i].Size);
            ftWideString: cds.FieldDefs.Add(Query.Fields[i].FieldName,aDataType,Query.Fields[i].Size);
          else
            cds.FieldDefs.Add(Query.Fields[i].FieldName, aDataType);
          end;    end;    具体数据类型非常多,有ftUnknown, ftString, ftSmallint, ftInteger, ftWord,
        ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime,
        ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo,
        ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString,
        ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob,
        ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd,这里只处理了用到的一部分。