報表格式存入數據庫

以下代碼在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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章