delphi FastReport 从流(数据库)中加载和保存报表

发布时间 2023-04-15 15:33:21作者: txgh

FastReport 从流(数据库)中加载和保存报表

属性和方法

TfrxReport.LoadFromStream

procedure LoadFromStream(Stream: TStream);

从流中加载报表。

参数

Stream 来源流。

TfrxReport.SaveToStream

procedure SaveToStream(Stream: TStream);

将报表保存到流中。

参数

Stream 来源流。

TfrxDesigner.OnLoadReport

property OnLoadReport: TfrxLoadReportEvent;

该事件在加载报表时发生。借助此事件,你可以管理报表从数据库的加载。

点击报表设计器窗口的“打开报表按钮”触发

TfrxDesigner.OnSaveReport

property OnSaveReport: TfrxSaveReportEvent;

该事件在保存报表时发生。借助此事件,你可以管理报表在数据库中的保存。

点击表设计器窗口的“保存报表按钮”触发

例子

从数据库中加载和保存报表

在窗体上放置TfrxReport组件frxReport1

在窗体上放置TfrxDesigner 组件frxDesigner1,分配 OnLoadReportOnSaveReport 事件

点击按钮 Button2,弹出报表设计器窗口,点击“打开报表按钮”,从数据库中加载报表内容,点击“保存报表按钮”,将修改的报表内容保存到数据库中

procedure TForm1.Button2Click(Sender: TObject);
begin
  //调用报表设计器窗口
  frxReport1.DesignReport;
end;

//点击报表设计器窗口的“打开报表按钮”触发
function TForm1.frxDesigner1LoadReport(Report: TfrxReport): Boolean;
var
  vStream: TMemoryStream;
begin
  vStream := TMemoryStream.Create;
  try
    //从数据库中加载流
    FDQuery1.Open;
    TBlobField(FDQuery1.FieldByName('ReportFile')).SaveToStream(vStream);
    //从流中加载报表
    vStream.Position := 0;
    Report.LoadFromStream(vStream);
  finally
    vStream.Free;
  end;
end;

//点击表设计器窗口的“保存报表按钮”触发
function TForm1.frxDesigner1SaveReport(Report: TfrxReport; SaveAs: Boolean): Boolean;
var
  vStream: TMemoryStream;
begin
  //将报表保存到流中
  vStream := TMemoryStream.Create;
  try
    Report.SaveToStream(vStream);
    //将流保存到数据库中
    FDQuery1.Open;
    FDQuery1.Append;
    TBlobField(FDQuery1.FieldByName('ReportFile')).LoadFromStream(vStream);
    FDQuery1.Post;
  finally
    vStream.Free;
  end;
end;