try
  if tmpdbs<>nil then
    tmpdbs:=nil;
  if tmpdbs<>nil then
    tmpdbs.Free;
  tmpdbs:=TclientDataSet.Create(application);
  with tmpdbs.FieldDefs do
  begin
    //表头字段定义
    add('kfmc',ftstring,100,false);
    add('lxr',ftstring,20,false);
    add('xsy',ftstring,20,false);
    add('lxdh',ftstring,20,false);
    add('fhdz',ftstring,200,false);
    add('yss',ftstring,50,false);
    add('ydhm',ftstring,30,false);
    add('fhr',ftstring,20,false);
    add('yfje',ftstring,20,false);
    add('yfzf',ftstring,10,false);
  end;
  tmpdbs.CreateDataSet;
  tmpdbs.Append;
  tmpdbs.FieldByName('kfmc').AsString:=adoquery1.fieldbyname('cname').AsString;
  tmpdbs.FieldByName('lxr').AsString:=adoquery1.fieldbyname('cpname').AsString;
  tmpdbs.FieldByName('xsy').AsString:=adoquery1.fieldbyname('sales').AsString;
  tmpdbs.FieldByName('lxdh').AsString:=adoquery1.fieldbyname('mobi').AsString;
  tmpdbs.FieldByName('fhdz').AsString:=adoquery1.fieldbyname('address').AsString;
  tmpdbs.FieldByName('yss').AsString:=adoquery1.fieldbyname('yssname').AsString;
  tmpdbs.FieldByName('ydhm').AsString:=adoquery1.fieldbyname('ysdh').AsString;
  tmpdbs.FieldByName('fhr').AsString:=adoquery1.fieldbyname('fhrname').AsString;
  tmpdbs.FieldByName('yfje').AsString:=adoquery1.fieldbyname('ypay').AsString;
  tmpdbs.FieldByName('yfzf').AsString:=adoquery1.fieldbyname('ypaytype').AsString;
  tmpdbs.Post;
  RvDataSetConnection2.DataSet:=tmpdbs; 
  RvP1.Execute;  //将断点设在这里,这样程序运行到这里时内存表就一定是建立好的。
  finally
    if tmpdbs<>nil then
      tmpdbs.Free;
  end;用上面的代码运行到断点位置。然后打开RAVE,打开设置好的报表,里面的DATAVIEW字段列表中空的,Refresh也没用。删除重建一个也不行,如果不用内存表,直接用ADOQUERY就没问题可以列出字段。
请教是什么原因呀?刚开始是好用的,不知道怎么搞的就不好用了。