以下代碼在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;