clientdataset数据集操作,cds1.field[i].assign(cds2.field[j]);
或者cds1.field[i].value := cds2.field[j].value;
int型可以正常附值,widestring型不行,为空,怎么办?其实是想在不改变数据库字段的情况下,在取到的本地数据集加一个选择的boolean字段
新建个cds,把取到的cds field复制过去..
cds.FieldDefs.Add('选中', ftBoolean, 0,false);
--

解决方案 »

  1.   

    可以用Dataset的Assign,原来用过,就是直接A.Data := B.Data;这个要求两个数据库控件是统一类型,
    比如TADOQuery对TADOQuery,不能TClientDataSet和TADOQuery的混用,要进行转换,转换的控件是DataSetProvider
      

  2.   

    Bear_hx大哥a.data := b.data;是可以,但是我现在想做的是  a多加一个字段boolean型“选择”,作为fields[0],b的字段从fields[0]到fields[n]作为a的fields[1]到fields[n + 1],并把b的 fields[0]到fields[n]的值赋值给 a的fields[1]到fields[n + 1]a
      选择 姓名 年龄 ...
    b
      姓名 年龄 ...////*****************************************************************cds := TClientDataSet.Create(self);
      cds.FieldDefs.Add('选中', ftBoolean, 0,false);
      for i := 0 to cdsMain.FieldCount - 1 do
      begin
        cds.FieldDefs.Add(cdsMain.Fields[i].FieldName, cdsMain.Fields[i].DataType, 0,false);
      end;
      cds.CreateDataSet;for i := 0 to cdsMain.RecordCount - 1 do
      begin
        cds.Append;    for j := 0 to cdsMain.FieldCount - 1 do
        begin
          cds.Fields[j + 1].Value := cdsMain.Fields[j].AsVariant;  //跟踪了下,float类型正常,widestring类型不行..
          //cds.fields[j + 1].assign(cdsMain.fields[j]);
          //cds.fields[j + 1].Value := cdsMain.fields[j].value;
          //ShowMessage(cds.Fields[j].AsString);
        end;
        cds.Post;
        cds.Next;
        cdsMain.Next;  end;                            }  cds.data := cdsMain.Data;
      

  3.   

    begin
      ClientDataSet1.FieldDefs.Add('A', ftFloat);
      ClientDataSet1.FieldDefs.Add('B', ftWideString, 20);
      ClientDataSet1.CreateDataSet;
      ClientDataSet1.Append;
      ClientDataSet1.FieldByName('A').AsFloat := 0.90;
      ClientDataSet1.FieldByName('B').AsString := '法律';
      ClientDataSet1.Post;
      ClientDataSet2.FieldDefs.Add('A', ftFloat);
      ClientDataSet2.FieldDefs.Add('B', ftWideString, 20);
      ClientDataSet2.CreateDataSet;
      ClientDataSet2.Append;
      ClientDataSet2.FieldByName('A').AsVariant := ClientDataSet1.FieldByName('A').AsVariant;
      ClientDataSet2.FieldByName('B').AsString := ClientDataSet1.FieldByName('B').AsString;
      ClientDataSet2.Post;
    end;
    你在添加WideString字段的时候要加上长度,我这测试通过,是可以的。
    cds.FieldDefs.Add(cdsMain.Fields[i].FieldName,   cdsMain.Fields[i].DataType,   0,false); 
    WideString类型长度不能为0
      

  4.   

    bear_hx大哥,多谢,果然是size的问题
    for   i   :=   0   to   cdsMain.FieldCount   -   1   do 
        begin 
            cds.FieldDefs.Add(cdsMain.Fields[i].FieldName,   cdsMain.Fields[i].DataType,   0,false);  //这里size不能为0...
        end; 
        cds.CreateDataSet; 
    改为for   i   :=   0   to   cdsMain.FieldCount   -   1   do 
        begin 
            cds.FieldDefs.Add(cdsMain.Fields[i].FieldName,   cdsMain.Fields[i].DataType,   cdsMain.Fields[i].size,false);  
                                                                                              //这里size不能为0...
        end; 
        cds.CreateDataSet;