从服务器返回一个Variant类型,然后使用TClientDataSet来解析,出现错误
var
  cds:TclientDataSet;
begin
   cds:=TClientDataSet.Create(nil);
   //通过服务器取得查询结果集(使用Corba技术),定义为Variant类型VarResult
   cds.Data:=VarResult;
   cds.Filtered:=true;
   cds.Filter:='ParentID=-1';
end;
   当执行到最后一句时报错。暴力访问的错误。
   但是如果TclientDataSet拖到窗体上并设置Filter和Filtered属性就能正确得出结果,为何把它放到程序中就不行呢?

解决方案 »

  1.   

    你象下面这样执行一下,呵呵,没问题的
       cds.Filtered:=false;
       cds.Filter:='ParentID=-1';
       cds.Filtered:=true;
      

  2.   

    cds.Filtered:=false;
       cds.Filter:='ParentID=-1';
       cds.Filtered:=true;
    这样应该没有什么问题的。
      

  3.   

    在窗体里加TclientDataSet,TdataSource,TDBGrid,并设置他们之间的关联和Filter,Filtered,在dbgrid完全看得到预期的结果,但是删除TclientDataSet控件,在程序
    中创建TclientDataSet时,执行到Filter='ParentID=-1'时报出Invalid floating Point Operation的错误。
      

  4.   

    我用以下的代码试过了,没有问题的
    var
      cds:TclientDataSet;
    begin
       cds:=TClientDataSet.Create(nil);
       //通过服务器取得查询结果集(使用Corba技术),定义为Variant类型VarResult
       cds.Data:=ClientDataSet1.Data;
       DataSource1.DataSet:=cds;
       cds.Filtered:=false;
       cds.Filter:='PlanNum=3';
       cds.Filtered:=true;
    end;ParentID是什么数据类型的?
      

  5.   

    你的cds没有设置:remoserver和providername没有设置
      

  6.   

    同意楼上的意见
    Filter='ParentID=-1'中间的ParentID可能会有问题的,是不是数字形的字段,有待察看。
      

  7.   

    to xxmmmx(踢踏) :ParentID是Oracle数据库中定义的Number类型。to  Erice(白雪公猪) :cds的数据是从服务器(中间层使用Corba技术)返回的variant类型,因此不需要设置providername和remoserver;
      

  8.   

    而且有一点我非常的不明白,如果过滤条件为ParentID=0即取ParentID>0怎样的条件话,就没有任何问题,为什么小于0的值就不行?是数据库的问题,还是TclientDataSet有Bug?
      

  9.   

    救我,为什么仅ParentID小于0时自己创建TclientDataSet对象就不行(ParentID>0时可以正确运行),但是拖TclientDataSet到窗体上无论大于0还是小于就行呢?这问题太怪了。我无法解决。
      

  10.   

    跟Borland的老板商量下也好啊,靠!怎么开发软件的!!!!