报表格式存入数据库

以下代码在D7+SQL 2000+FastReport 3.15版中测试通过.

之前为客户写的报表都是保存在本地,一个人修改了必须得拷贝到其它人那才能实现共享,比较麻烦,现在考虑将报表格式保存在数据库中,一个地方编辑了其它地方加载实现共享!1.将报表格式存入数据库中(用于初始化系统的时候预先存入一些报表):

procedure Ttestrp_f.Button4Click(Sender: TObject); //rptdata表字段:id、rptname、rptmemo、rptlastdate var template:TStream; begin insert_rep.SQL.Text:='select top 1 * from rptdata'; insert_rep.Open; template:=TMemoryStream.Create; template.Position:=0; if OpenDialog1.Execute then OpenDialog1.Files.SaveToStream(template); frxReport1.SaveToStream(template); insert_rep.Append; try     Insert_rep.Edit;     Insert_rep.FieldByName('rptname').AsString:=ExtractFileName(OpenDialog1.FileName);     (Insert_rep.FieldByName('rptmemo') as TBlobField).LoadFromStream(template);     Insert_rep.FieldByName('rptlastdate').AsDateTime:=Now;     Insert_rep.Post; finally     template.Free; end; end;

2.将报表从数据库中读出来并修改:

procedure Ttestrp_f.Button2Click(Sender: TObject);
var template:TStream;
begin
try
    fr_report.SQL.Text:='select * from rptdata where id='+ADOQuery2.fieldbyname('id').AsString;
    fr_report.Open;
    try
      template:=fr_report.CreateBlobStream(fr_report.FieldByName('rptmemo'),bmRead);
      template.Position:=0;
      frxReport1.LoadFromStream(template);
      frxReport1.DesignReport;
    finally
      template.Free;
    end;
except
end;
end;


 

3.修改报表,并写入数据库.

在frxDesigner1控件的OnSaveReport事件中,加入下面代码:

function Ttestrp_f.frxDesigner1SaveReport(Report: TfrxReport; SaveAs: Boolean): Boolean;
var template:TStream;
begin
template:=TMemoryStream.Create;
template.Position:= 0;
frxReport1.SaveToStream(template);
fr_report.Edit;
try
    (fr_report.FieldByName('rptmemo') as TBlobField).LoadFromStream(template);
    fr_report.FieldByName('rptlastdate').AsDateTime:=Now;
    fr_report.Post;
finally
    template.Free;
end;
end;

发布了15 篇原创文章 · 获赞 3 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章