RvProject1.Open;
RvTableConnection1.Table:= Tables[ITabSheet];
MyDataView:=RvProject1.ProjMan.NewDataObject(TRaveDataView) as TRaveDataView;
MyDataView.ConnectionName := 'RvTableConnection1';
MyDataView.FullName:='DataView1';以前看到的帖子是这样做的:
CreateFields(trdv,nil,nil,true);
但是我的CreateFields后面只有一个参数Tlist;
MyDataView .CreateFields(Tlist);
我该怎样根据不同的数据表来创建DataView 下面的字段?

解决方案 »

  1.   

    这样吧。你用Travestringfield.create来创建吧。
    给你一个函数,在我机子上运行正常。
    procedure Tfrm_SearchResult.CreateDataField(fieldname,dataviewName: string);
    var mypage: Travepage;
       myDataView: TraveDataView;
       myfield: TRaveStringField;
    begin
       MyPage:=RvProject1.ProjMan.FindRaveComponent('Report2.mainPage',nil)  as  TRavePage;
       myDataView:=RvProject1.ProjMan.FindRaveComponent(DataViewName,mypage)  as  TRavedataview;   myfield:=TRaveStringField.Create(myDataView);
       myfield.Parent:=myDataView;
       myfield.Name:='datafield'+inttostr(fieldorder)+'new';
       fieldorder:=fieldorder+1;
       myfield.FieldName:=FieldName;
       myfield.FullName:=FieldName;
       addcomponent(myfield);
       //建立新的字段,tStringfield,字段。
    end;顺便我也问一个问题交流一下吧:  我在某些引用了count函数的时候,RAVE编绎会出错,说是类型不匹配:
      DataType Excepted: dtstring DataType found: dtInteger 我翻来翻去就是没有找到那个ravedatatext(或者是ravedatamemo)的关于
    类型的属性设定。 这几天RAVE是把我给搞惨了我再发一贴,能回答得分吧。
      

  2.   

    呵呵,我也是遇到了这样的问题,ravedatatext没有属性设置,属性设置是在DataView下面创建的字段控制的。因为你创建的那个TRaveStringField字段是String类型的,因此只能在创建完DataView根据所选的数据表再动态创建字段,我就是在这里over了,不过我考虑还是有一个笨办法:分别创建StringField、IntegerField、folatField等不同类型字段,然后根据数据表中的字段类型分别创建DataView下面的字段。
      

  3.   

    : ybs9999(ybs9999) 呵呵。我的问题已经解决了。 不过不用你那么麻烦。因为我用的是adoquery,所以,数据来源是SQL语句。
     于是我就在SQL语句里把它转化了。str,就这么一个简单的函数,但我编晕了就
    给忘了。 顺便邀请到http://expert.csdn.net/Expert/topic/2346/2346993.xml?temp=7.520694E-02
    去领点小分。 另,交个朋友如何啊? 一个人思考这些问题太苦闷了。QQ:588527
      

  4.   

    ybs9999(ybs9999) :呵呵。