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,分配 OnLoadReport
和 OnSaveReport
事件
点击按钮 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;