一个component声明了一个datasource的属性,有
published
    property DataSource: TDataSource Read FDataSource Write SetDataSource default nil;  
然后我想在一个函数里面以它的dataset为参数更改该dataset的属性却提示
constant object cannot be passed as var parameter,
函数调用为SetMode(FDataSource.DataSet) 声明为SetMode(var D:TClientDataSet)我该怎样实现它?

解决方案 »

  1.   

    var D:TClientDataSet
    begin
      D:= TClientDataSet.Create;
      SetMode(D);
      FDataSource.DataSet := D;
      FreeAndNil(D);
    end;
    试试这样调用。
      

  2.   

    问题出在SetMode(var D:TClientDataSet)
    用VAR声音的参数,实参类型必需与声音类型严格一,你完全可以SetMode(var D:TClientDataSet)
    中的var去掉;
    SetMode(D:TClientDataSet)
      

  3.   

    忘了说明了,FDataSource.DataSet的类型是TClientDataSet,开始编译就出这个提示的,先谢谢madyak(无天) ,suncheng(sun_cheng) 用你的方法可以,d:=FDataSource.DataSet as TClientDataSet;然后SetMode(d),但我这样FreeAndNil(d)会把dataset给free了,关闭程序时又出现Invalid pointer operation,这可能是别的错误了。