ClientDataSet 是以多表视图显示,加入了其他表的字段,现在需要在这个ClientDataSet上去掉不属于这个表的字段,或者是保留指定字段,可以新建个ClientDataSet,也可以直接处理OleVariant,只要求在ClientDataSet.data中不存在这些字段,而不单单不显示。不知道如何处理?

解决方案 »

  1.   

    可以双击clientdataset控件,右键点击出现的窗口,Add All Field(要能连接数据库才能成功),就可以把所以字段带出来。然后可以设置每个字段的Visible属性
      

  2.   

    根据你查询的字段来显示,何必把简单问题复杂化比如
    select * from t 就是显示全部字段
    select A,B,C from t 就只有A,B,C字段
      

  3.   

    cds.Fields.Remove(cds.FieldByName('XXX'));
    这样可以不,试试。
      

  4.   

    4L朋友说得有理,若你还是坚持想那么做,可以参考下列代码:
    procedure TForm1.Button1Click(Sender: TObject);
    var fied:array[0..1]of Tfield;//括号内的范围,是指定的字段数目
        CDSet:TClientDataSet;//若要在其他过程中使用,就别在这里定义(定义为全局性)
        i:integer;
    begin
      CDSet:=TClientDataSet.Create(self);//动态建立一个用来保存指定字段的数据集(也可以静态建立)
      try
        //建立静态字段:
        for i:=0 to 1 do begin
          fied[i]:=TStringField.Create(CDSet);//指定要的两个字段为字符类型(可据实相应处理)
          with fied[i] do begin
            FieldName:=ClientDataSet.Fields[i+1].FieldName;//假定指定的字段在第 1、2
            FieldKind:=fkData;
            DataSet:=CDSet;
          end;
        end;
        CDSet.Data:=ClientDataSet.Data;//复制指定字段的数据
        //你要处理数据的语句.....
      finally
        //释放动态建立的东西(若为全局性,则在进程关闭之前执行)
        CDSet.Close;
        FreeAndNil(CDSet);
      end;
    end;
      

  5.   


    你只是对ClientDataSet显示字段做了限制, 
    CDSet.Data:=ClientDataSet.Data;Data还是原来的Data,里面的数据是不变的。
      

  6.   

    如果要从data里面去的 那得需要对data 重新 pack一次才行。
    看 clientdataset 的data属性的相关代码。
      

  7.   

    刚看了一下  看这个 TDataSetProvider.CreateDataPacket 比看 data 属性更明了。
    说白了 data 就是一二维数组。 没必要再去折腾。