我放一个Database1、query1、frreport1、frDBDataSet1、Button1放在窗口上,
然后设置相关的属性如:
    frReport.Dataset:=frDBDataSet;
    frDBDataSet.DataSet:=query1;
在报表中能添加相应的字段,并打印。我现在想做动态报表。
就是说我不在报表设计器中添加字段。我想用程序添加。
function TForm1.DataSetToReport(frReport: TfrReport;
  frDBDataSet: TfrDBDataSet; FirstTitle, SecondTitle: String;
  DataSet: TDataSet): Boolean;
var
  frPage: TfrPage;
  frBandView: TfrBandView;
  frMemoView: TfrMemoView;
  i,Left:integer;
  Ls_Field:string;
begin
  if (not DataSet.Active) or (DataSet.RecordCount < 1) then
  begin
    Result:=False;
    Exit;
  end;  try
    frReport.Dataset:=frDBDataSet;
    frDBDataSet.DataSet:=DataSet;
 
    frReport.Pages.Clear;      
    frReport.Pages.Add;         
    frPage := frReport.Pages[0]; 
    frBandView := TfrBandView.Create;
    frBandView.SetBounds(0, 300, 800, 30);
    frBandView.BandType := btMasterData;
    frBandView.Dataset := frDBDataSet.Name;
    frPage.Objects.Add(frBandView);    Left:=20;
    for i := 0 to DataSet.FieldCount - 1 do
    begin
      frMemoView := TfrMemoView.Create;
      frMemoView.FrameTyp:=15;
      if i > 0 then
      begin
        Left:=Left + DataSet.Fields[i -1].DisplayWidth;
      end;
      frMemoView.SetBounds(Left, 300, DataSet.Fields[i].DisplayWidth, 30);
      frMemoView.Prop['Alignment'] := frtaMiddle;       
//为什么这样写不行,该怎么写啊??????
      Ls_Field:='['+  DataSet.Name + '."' + DataSet.Fields[i].FieldName + '"]';
      frMemoView.Memo.Add(ls_field);
//
      frPage.Objects.Add(frMemoView);
    end;  
    frReport.ShowReport;
    Result:= True;
  except
    Result:=False;
  end;
end;
调用该函数时报错:
计算时发生错误
["姓名"]报表:
对象符号没定义"姓名"
为什么 ???????请帮忙。。我发现只要是用程序绑定:
    frReport1.Dataset:=frDBDataSet;
    frDBDataSet.DataSet:=query1;
并设置:frreport1.modifyprepared:=true;
在运行程序时,运行frReport.ShowReport后,双击进入设计状态,插入一个矩形对象,再双击
该对象,再点插入表达式,再点字段进行字段选择,但里面是空,没有可选字段??????
如果不是用程序设置各个控件的对应关系,而是直接在窗口中设置,则可以。

解决方案 »

  1.   

    运行frReport.ShowReport后,双击进入设计状态,//这时应该算做是一种修改状态,而不是设计状态,不能象设计时那样再选择字段
      

  2.   

    你的代码在我这儿能执行,没错啊,嘿不知你为什么这样做,你这样做,太麻烦,报表的样子很难看,不好调整,如果只是想动态的改值,最好还是用变量,你好好看看fastreport自带的demo,那些不是动态调整的他们都设成了变量