实现代码:
procedure   Page1OnBeforePrint(Sender:   TfrxComponent); 
var 
    ... 
begin 
    ......         i:=20;                     
    ADOQuery2.Close; 
    ADOQuery2.SQL.Clear; 
    ADOQuery2.SQL.Add('select   name,fields   from   items   where   tables=''pay''   and   total=1');                                                         
    ADOQuery2.Open; 
    while   not   ADOQuery2.Eof   do 
    begin 
        Memo:=   TfrxMemoView.Create(ColumnFooter1); 
        //Memo.CreateUniqueName;             
        //Memo.DataSet   :=ADOQuery1; 
        Memo.Text   :='[SUM( <ADOQuery1."'+Trim(ADOQuery2.FieldByName('fields').AsString)+'"> ,MasterData1)]';  //这边不知要怎么写
        //ShowMessage(Memo.Text);       //显示正常                                                           
        Memo.Height   :=20;                                                       
        Memo.SetBounds(i,0,100,20); 
        ADOQuery2.Next; 
        i:=i+80; 
    end;       
end; 
说明一下:报表是动态生成的,报表填入的MEMO组件的数量是用代码根据表TIEM中的设置生成的.上次开的贴有朋友回答先放入MEMO组件,然后根据查找组件名赋值,因为组件数量不固定,也不知道要放几个组件.所以这种方法不好使,感谢那些热心的朋友,还请高手们帮帮忙.

解决方案 »

  1.   

    var
      v: TfrView; 
      b: TfrBandView;
    begin
    // create ColumnFooter band
        b := TfrBandView(frCreateObject(gtBand, ''));  
        b.SetBounds(0, 20, 0, 20);
        b.BandType := btColumnFooter ;
        b.Dataset := 'frDBDataSet1';
        Page.Objects.Add(b);
    // create memo
        v := frCreateObject(gtMemo, '');  
        v.SetBounds(20, 20, 200, 16);
        v.Memo.Add('[SUM(   <ADOQuery1."'+Trim(ADOQuery2.FieldByName('fields').AsString)+'">   ,MasterData1)]');
        Page.Objects.Add(v);
    end;