大家帮我看看我的FastReport保存是否出现了什么问题,保存不了哦!

努力偷懒 2006-09-27 09:18:47
过程是这样的:
procedure Tfrm_Print_New.L_ChangeDblClick(Sender: TObject);
var
strSQL:string;
aStream:TMemoryStream;
begin
inherited;
//从数据库中获取流信息,如果不存在,则把当前的报表保存进去,否则直接读取出来修改后再保存。
strSQL:='select count(*) from fr_Field where Fr_Name='+QuotedStr(self.ClassName+'.fr');
if dm.findID(strsql)=0 then
begin
aStream:=TMemoryStream.Create;
fr.SaveToStream(aStream);
strSQL:='insert into fr_Field(Fr_Name) values ('+quotedstr(self.ClassName+'.fr')+') select @@error';
if dm.GetErrorforUpdate(strSQL)<>0 then
exit;
dm.SaveStreamIntoDB('fr_Field','fr_Name',self.ClassName+'.fr','fr_data',astream,dm.Con);
end
else
begin
aStream:=TMemoryStream.Create;
aStream.LoadFromStream(dm.GetStreamFromDB('fr_Field','fr_Name',self.ClassName+'.fr','fr_data',dm.Con));
fr.LoadFromStream(aStream);
end;
fr.DesignReport;
fr.SaveToStream(aStream);
dm.SaveStreamIntoDB('fr_Field','fr_Name',self.ClassName+'.fr','fr_data',astream,dm.Con);

现在的问题是,我DesignReport后的报表没有保存下来。(但是,dm.SaveStreamIntoDB是没问题的,因为第一次执行这个过程的时候,数据库里面是没那记录的,现在数据库已经存在了那条记录。)我现在反复执行这个过程,它的报表格式和原来根本就没变化。是不是我设计完以后,保存到流里面的还是原来的那个报表的东西,而不是新的报表?
...全文
167 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
努力偷懒 2006-09-27
  • 打赏
  • 举报
回复
虽然你的答案不是重点,但是,让我想到了某些东西,还是给分吧!
:)
努力偷懒 2006-09-27
  • 打赏
  • 举报
回复
不好意思!我忘记了流的特性了。下面是正确的代码:
procedure Tfrm_Print_New.L_ChangeDblClick(Sender: TObject);
var
strSQL:string;
aStream:TMemoryStream;
begin
inherited;
//从数据库中获取流信息,如果不存在,则把当前的报表保存进去,否则直接读取出来修改后再保存。
strSQL:='select count(*) from fr_Field where Fr_Name='+QuotedStr(self.ClassName+'.fr');
try
if dm.findID(strsql)=0 then
begin
aStream:=TMemoryStream.Create;
fr.SaveToStream(aStream);
strSQL:='insert into fr_Field(Fr_Name) values ('+quotedstr(self.ClassName+'.fr')+') select @@error';
if dm.GetErrorforUpdate(strSQL)<>0 then
exit;
dm.SaveStreamIntoDB('fr_Field','fr_Name',self.ClassName+'.fr','fr_data',astream,dm.Con);
end
else
begin
aStream:=TMemoryStream.Create;
aStream.LoadFromStream(dm.GetStreamFromDB('fr_Field','fr_Name',self.ClassName+'.fr','fr_data',dm.Con));
fr.LoadFromStream(aStream);
end;
if fr.PrepareReport then
begin
fr.DesignReport;
aStream.Clear;
fr.SaveToStream(aStream);//如果不aStream不Clear的话,由于流是在末尾处继续加东西进去的,所以必须Clear.
dm.SaveStreamIntoDB('fr_Field','fr_Name',self.ClassName+'.fr','fr_data',astream,dm.Con);
end;
finally
freeandnil(aStream);
end;
end;
piaoqifeng 2006-09-27
  • 打赏
  • 举报
回复
沙发。
TMemoryStream光create,无Free??

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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