关于Fast Report报表设计器的存盘问题(100分)

  • 主题发起人 主题发起人 冰鸟
  • 开始时间 开始时间

冰鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
我的报表模板保存在数据库中,这样用Fast Report报表设计器就可以随时修改,但是当我
修改完报表模板后,点击Fast Report报表设计器的存盘按钮,这是显示的是保存到磁盘文件
中,而不是我想要的保存到数据库中,请问哪位高手可以解决这个问题?或者是有什么更好
用的可以让客户在使用时自己制作报表而不用重新编译的好东东,谢谢!
 
我也想知道,幫你up.
 
真的没有人知道吗?
另外我最近下了一个QRDesign,是QuickReport的最终用户报表设计器,似乎这个东东可以
直接将设计器的报表模板保存到数据库中,正在研究中...
 
不太了解你所说的报表模板是什么??
是不是FRF文件,
如果是那为什么要保存到数据库里?
我没明白你的思路到底要做什么?
 
我说报表模板的就是在软件交给客户后,客户可以自己增加、修改、删除报表,而不用我再
重新修改编译软件,报表的模板可以保存到文件中或数据库中,我要的是在Fast Report的
报表设计器点击保存直接将客户增加(或修改后的)报表模板保存到数据库表中,而
Fast Report是显示一个保存到文件的提示对话框,我只能点击取消后再将报表保存到数据
库表中。
 
哈哈!我以前考虑过这个问题!
你需要修改报表控件!要不然没有办法的!
 
兄弟,我这里已经用了Fast Report了,他就是报表设计器啊,你不会不知道吧?[8D]
 
看看!在fr里添加一个savetofield函数!
然后改一下fr的savetofile过程!蛮麻烦的!让他存到数据库对应的字段中!
 
原理很简单,就是要先将数据库中的报表读取出来保存成一个临时文件,
然后再design。
下面是代码:
procedure TReportManagerForm.ModiSpeedButtonClick(Sender: TObject);
var Rname :string;
begin
try
Rname := ReportNameEdit.Text;
showmessage(Rname);
with MainDataModule.FreeQuerydo
begin
Close;
SQL.Add('select * from ReportTable where 报表名称=:rname');
Parameters.ParamByName('rname').Value := Rname;
Open;
TBlobField(FieldByName('报表内容')).SaveToFile('temp.rmf');
Close;
RMReport1.LoadFromFile('temp.rmf');
RMReport1.DesignReport;
end;
With MainDataModule.FreeADOQuerydo
begin
Close;
SQL.Clear;
SQL.Add('update ReportTable set 报表内容=:rp where 报表名称=:rname');
Parameters.ParamByName('rname').Value := Rname;
Parameters.ParamByName('rp').LoadFromFile('temp.rmf',ftBlob);
ExecSQL;
Close;
end;
except
MainDataModule.FreeADOQuery.Close;
MainForm.Mshowmessage('系统错误','显示报表时出现错误!',1);
end;

end;
 
[:D]我找到答案了,原来FR的FAQ中就有答案,请看:
2.30. 我的报表存储在Bolb字段中。如何修改设计器的中“打开/保存”对话框?
查看TfrDesigner组件,它有一个必须的事件: OnLoadReport和OnSaveReport。下面是个小示例:
原文:
Q: 2.30. I store my reports in a BLOb. How to change the "Open/Save" dialogs in the designer?
A: Look at TfrDesigner component. It has necessary events: OnLoadReport and OnSaveReport. Here is a small example:
procedure TForm1.frDesigner1LoadReport(Report: TfrReport;
var ReportName: String;
var Opened: Boolean);
begin
with MyOpenDialogdo
begin
Opened := ShowModal = mrOk;
if Opened then
begin
Report.LoadFromBlobField(...);
ReportName := ...;
end;
end;
end;

procedure TForm1.frDesigner1SaveReport(Report: TfrReport;
var ReportName: String;
SaveAs: Boolean;
var Saved: Boolean);
begin
if SaveAs then
with MySaveDialogdo
begin
Saved := ShowModal = mrOk;
if Saved then
begin
Report.SaveToBlobField(...);
ReportName := ...;
end;
end
else
Report.SaveToBlobField(...);
end;

 
给分,虽然我自己找到答案了[:)]。
 
后退
顶部