FastReport报表文件保存到数据库及读取问题

qxa 2009-07-17 04:46:11
我将用Fastreport生产的报表模板文件(.fr3)保存到Access数据库中,在保存完毕后(未到数据库中重新检索)直接预览报表是没有问题的,如下面的程序:
procedure TF_Xjd.SaveClick(Sender: TObject);
var
bs:TStream;
begin
inherited;
cdsReport.Close;
cdsReport.CommandText:= 'select * from ad_Report where rptName =''frXjd.fr3''';
cdsReport.Open;
if cdsReport.RecordCount<1 then
begin
cdsReport.Append;
cdsReport.FieldByName('rptName').AsString:= 'frXjd.fr3';
cdsReport.FieldByName('rptDescript').AsString:= '询价单';
TBlobField(cdsReport.FieldByName('Content')).LoadFromFile('report\frXjd.fr3');
end
else
begin
cdsReport.Edit;
TBlobField(cdsReport.FieldByName('Content')).LoadFromFile('report\frXjd.fr3');
end;
cdsReport.ApplyUpdates(0);
{//在此显示报表没有问题,显示报表方法如下
bs:= cdsReport.CreateBlobStream(cdsReport.FieldByName('Content'),bmRead);
try
frxreport1.Clear;
frxreport1.LoadFromStream(bs);
frxreport1.ShowReport;
finally
bs.Free;
end; }
end;

但当重新从数据库中检索数据后再预览报表,报表就显示不完整了,缺少了一些东西,具体程序如下:
procedure TF_Xjd.readClick(Sender: TObject);
var
bs:TStream;
begin
inherited;
cdsReport.Close;
cdsReport.CommandText:= 'select * from ad_Report where rptName =''frXjd.fr3''';
cdsReport.Open;
if cdsReport.RecordCount>0 then
begin
bs:= cdsReport.CreateBlobStream(cdsReport.FieldByName('Content'),bmRead);
try
frxreport1.Clear;
frxreport1.LoadFromStream(bs);
frxreport1.ShowReport;
finally
bs.Free;
end;
end;
end;

研究了很久也没有解决问题,还请各位高手给予指点,在此深表感谢!
...全文
781 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingyunmm 2009-11-18
  • 打赏
  • 举报
回复
ClientDataSet 存bolb会出错,所以别用这个写Blob
qxa 2009-07-23
  • 打赏
  • 举报
回复
是不是frxreport1的某些属性需要设置?
yao1897 2009-07-21
  • 打赏
  • 举报
回复
我的也有类似问题,做好报表后,保存为 文件名.fr3,退出fast,可下次双击frxreport或运行程序时,打开的却是Untitled.fr3,相比文件名.fr3少了一些东西,在fast下选择打开,文件名.fr3依然存在,打开,那些东西都在,郁闷。。。是不是需要frxreport和fr3文件关联?
qxa 2009-07-20
  • 打赏
  • 举报
回复
怎么没人回答?
dinoalex 2009-07-18
  • 打赏
  • 举报
回复
bs:= cdsReport.CreateBlobStream(cdsReport.FieldByName('Content'),bmRead);
bs.Position := 0; // < ----------- 加这句
try
frxreport1.Clear;
frxreport1.LoadFromStream(bs);
frxreport1.ShowReport;
finally
bs.Free;
end;
qxa 2009-07-18
  • 打赏
  • 举报
回复
谢谢SmallHand(火龍)!
这个窗体是继承其它窗体的,但Read和Save这两个按钮是新添加的,即inherited;之前没有其他内容。
火龙岛主 2009-07-18
  • 打赏
  • 举报
回复
inherited;之前是怎么写的?
qxa 2009-07-18
  • 打赏
  • 举报
回复
添加
bs.Position := 0; // < ----------- 加这句
之后也不行,与原来结果相同
版本:1.0.0.1 更新日志: 1. 修正部分用户使用中用到插件的分割符号,致使插件不能正常使用,本版中间使用xml格式,不会和用户使用的符号有冲突。 2. 重新构件了ocx,jar两个地方的源码,使结构更 3. 增加图片、图表的支持 4。 增加了在线设计 5。增加对每个按纽是否可用的控制 注意事项: 1. 这个版本的功能和前一个版本的功能是一样的,如果运行得可以就可以不用更新 严重声名: 插件用到的第三方控件如果涉及版权问题,请自觉向其所再单位获得授权。 声明: 任何个人或组织可以自由使用,可以任意修改、复制、发布,但要保留本人的声明以遵重本人的劳动成果,并且不能用于任何商业目的。 本人提供的是免费报表,不与商家争长短,但希望对你有用: 使用方法: 范例使用的是access数据库,首先在odbc 注册ReportDemo.mdb 数据源,名字随你喜好, 然后修改classes文件下的 db.properties 的连接。 然后把项目放在tomcat下运行既可: 起作用的关键文件:RMVIEWP.CAB 文件,客户端插件 Lib下的两个包:rmview1.0.0.1.jar 使用接口: package common.rmview; /* * 设计的第一步,首先定义字段的类型, * 然后通过AddRow将结果加入缓存中 * */ import common.rmview.surperInterface.IDataSet; import common.rmview.until.Types; public interface IRMDataSet extends IDataSet { public void addField(String fieldName, Types.filedType type, int fieldLength, Boolean isNull);//1:将段类型加入 public void addField(String fieldName, Types type, int fieldLength);//1:将段类型加入,isNull 默认为 false public void AddRow(IRMDataRecord rmd);//2:在 IRMDataRecord实现类赋值完成一条记录后使用一次,循环加入. } package common.rmview; import common.rmview.surperInterface.IDataRecord; /* * 使用时的第二步 * 通过这个接口设置结果集 */ public interface IRMDataRecord extends IDataRecord { public void SetValue(String fieldName,Object objValue); } package common.rmview; /* * 第三步: * 前面IDataSet,IRMDataRecord实现类完成后,通过此接口的实现类向html也面输出ie到ie以方便ocx的取值使用 */ public interface IRMEngine { final int rmf=1; final int rls=2; public void SetReportFile(String urlandFileName,int fileFormat);//1:设置报表路径及文件名称 public void AddClientDataSet(String dataSourceName,IRMDataSet rmd);//2:设置数据源名称以ocx使用,并把IRMDataSet实现的结果加入 public String CreateViewer();//3:生成在html页面的编码 } 具体的使用方法请参照 index.jsp 报表的使用方法请自己参照官方的文档 RM报表的设计请另行学习。 需要更高版本 请联系作者购买 新建QQ群:29672297 有疑问请发邮件到 lujianfu123@yahoo.com.cn 下期计划:进行对 fastReport的封装。不过也要看呼声如何再决定。

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧