我将用Fastreport生产的报表模板文件(.fr3)保存到Access数据库中,在保存完毕后(未到数据库中重新检索)直接预览报表是没有问题的,如下面的程序:
procedure TF_Xjd.SaveClick(Sender: TObject);
var
  bs:TStream;
begin
  inherited;
  cdsReport.Close;
  cdsReport.CommandText:= 'select * from ad_Report where rptName =''frXjd.fr3''';
  cdsReport.Open;
  if cdsReport.RecordCount<1 then
  begin
    cdsReport.Append;
    cdsReport.FieldByName('rptName').AsString:= 'frXjd.fr3';
    cdsReport.FieldByName('rptDescript').AsString:= '询价单';
    TBlobField(cdsReport.FieldByName('Content')).LoadFromFile('report\frXjd.fr3');
  end
  else
  begin
    cdsReport.Edit;
    TBlobField(cdsReport.FieldByName('Content')).LoadFromFile('report\frXjd.fr3');
  end;
  cdsReport.ApplyUpdates(0);
  {//在此显示报表没有问题,显示报表方法如下
  bs:= cdsReport.CreateBlobStream(cdsReport.FieldByName('Content'),bmRead);
  try
    frxreport1.Clear;
    frxreport1.LoadFromStream(bs);
    frxreport1.ShowReport;
  finally
    bs.Free;
  end; }
end;但当重新从数据库中检索数据后再预览报表,报表就显示不完整了,缺少了一些东西,具体程序如下:
procedure TF_Xjd.readClick(Sender: TObject);
var
  bs:TStream;
begin
  inherited;
  cdsReport.Close;
  cdsReport.CommandText:= 'select * from ad_Report where rptName =''frXjd.fr3''';
  cdsReport.Open;
  if cdsReport.RecordCount>0 then
  begin
    bs:= cdsReport.CreateBlobStream(cdsReport.FieldByName('Content'),bmRead);
    try
      frxreport1.Clear;
      frxreport1.LoadFromStream(bs);
      frxreport1.ShowReport;
    finally
      bs.Free;
    end;
  end;
end;研究了很久也没有解决问题,还请各位高手给予指点,在此深表感谢!

解决方案 »

  1.   

    谢谢SmallHand(火龍)! 
    这个窗体是继承其它窗体的,但Read和Save这两个按钮是新添加的,即inherited;之前没有其他内容。
      

  2.   

        bs:= cdsReport.CreateBlobStream(cdsReport.FieldByName('Content'),bmRead); 
        bs.Position := 0;                //    < ----------- 加这句
        try 
          frxreport1.Clear; 
          frxreport1.LoadFromStream(bs); 
          frxreport1.ShowReport; 
        finally 
          bs.Free; 
        end; 
      

  3.   

    添加
    bs.Position := 0;                //    < ----------- 加这句 
    之后也不行,与原来结果相同
      

  4.   

    我的也有类似问题,做好报表后,保存为 文件名.fr3,退出fast,可下次双击frxreport或运行程序时,打开的却是Untitled.fr3,相比文件名.fr3少了一些东西,在fast下选择打开,文件名.fr3依然存在,打开,那些东西都在,郁闷是不是需要frxreport和fr3文件关联?
      

  5.   

    是不是frxreport1的某些属性需要设置?
      

  6.   

    ClientDataSet 存bolb会出错,所以别用这个写Blob