fastreport存入数据库的问题?在ManualBuild中生成的报表怎样存入数据库?值得大家来看看!!!!在线讨论!!(100分)

  • 主题发起人 主题发起人 jackeysen
  • 开始时间 开始时间
J

jackeysen

Unregistered / Unconfirmed
GUEST, unregistred user!
现处理一个报表,主要的目的是想要把最终生成的报表,也就是预览时能看到的报表写入数据库中,使用流来存储报表,
1。如果我直接在fastreport的编辑里加上数据表的字段,直接显示报表的记录,代码如下:form1.frReport1.ShowReport;
Table1.Open;
Table1.Append;
Table1['aa']:=form1.Edit1.Text;
form1.frReport1.SaveToBlobField(Table1.FieldByName('report'));
Table1.Post;
这样的话数据库对应得字段可以保存报表,然后可直接从数据库中取出并浏览
2。但是我的报表不是每个字段值都是从表中得来,还有还要控制每页的记录数等等....的条 件,这样就要在fastreport中定义一些变量,然后在fastreport.ManualBuild中做一些工作,这时问题就出来了,代码如下:
点击按钮后:
form1.frReport1.ShowReport;
Table1.Open;
Table1.Append;
Table1['aa']:=form1.Edit1.Text;
form1.frReport1.SaveToBlobField(Table1.FieldByName('report'));
Table1.Post;
......
procedure TForm1.frReport1ManualBuild(Page: TfrPage);
var //这里举个简单的例:'V1'是在FASTREPORT中定义的
i:integer;
// 变量,
begin
for i:=1 to form1.Table2.RecordCountdo
begin
frvariables['v1']:=inttostr(i+1);
page.ShowBandByName('main');
end;
end;
这样后,我在预览中可看到生成的报表,但是却保存不到数据库中,取出来是空的!!!
为甚么呢???哪位大大这样做过的呀,给点意见啊!!!!!能这样作的吗???
 
Table1跟Table2是什么关系?
用ManualBuild的作用是什么?仅仅传递变量?
 
to ty123,
Table1跟Table2沒有任何的关系?
用ManualBuild的作用我这里只是举个例,实际做时里面不光只是传递变量
 
搞了几天还是没搞定,今天换了个方法,先把报表存在硬盘的指定位置,保存为.frp的文件,然后在通过流保存在数据库里,保存是可以了,但是show不出来??我是这样写的:
procedure TForm1.savetodataClick(Sender: TObject);//保存到数据库
var
mss:Tmemorystream;
begin
mss:=Tmemorystream.Create;
mss.LoadFromFile('C:/temp/bbb.frp');
mss.Position:=0;
Table1.Open;
Table1.Append;
Table1['nomber']:=form1.Edit1.Text;
TBlobField(Table1.FieldByName('report')).LoadFromStream(mss);
try
Table1.Post;
finally
mss.Free;
end;
end;

procedure TForm1.showreportClick(Sender: TObject);//show报表
var
ms:TMemoryStream;
begin
ms:=TMemoryStream.Create;
TBlobField(Table1.FieldByName('report')).SaveToStream(ms);
ms.Position:=0;
form1.frReport2.LoadFromStream(ms);
form1.frReport2.StoreInDFM:=true;
form1.frReport2.ShowReport;
ms.Free;
end;
可是这样show不出来,各位还有甚么方法吗??我确定.frp已经写到数据的了!!!
 
是不是真的没办法了吗??难道只有再一次写到一个暂存文件了!!
 
首先,您的钻研精神令人钦佩!令我学习!你的代码经测试(D6+Access),在我这里没有
问题。我没有用下面这一句:
form1.frReport2.StoreInDFM:=true;

不知道你用什么数据库,建议你将数据库中存储的报表写到1个文件中,然后用UltraEdit比较
两个文件有什么差别。FastReport有其特定的格式,不能随意改变。
另外,从你的设计方案来讲,我想说点看法,仅供参考。
因为没有更多的线索,只能就你提供的代码分析。你想在每次预览后存储报表到数据库
中的report字段中,就是说仅调用数据库中存储最后一次报表的格式、内容(?)。
这有什么意义呢?
特别是你仅用ShowReport,而不是DesignReport,不允许用户干涉报表格式,意义就更不明确了。
 
to ty123
我用的sql 2000作后台数据,您说的不要form1.frReport2.StoreInDFM:=true;这一句我也式过的,不行,另外我之所以要这样处里我说明一下,程序三层的结构,跨局域网,总公司的业务输入订单数据,在工厂内读取定单数据,还要加上生产的一些数据,共同计算等....然后产生报表,业务人员主要通过ie来输入数据,因为报表的产生很嘛烦,主要是代码的很多,不想容进.ocx里,那样可能会增加2.M,而且报表的数据本来就不允许业务去更改,只能以生产的为准,所以就想着这样处里了
 
读取报表时也需要将它保存成为一个物理文件,然后SHOW出来。
 
to ty123 lphjj
一直没有做成直接保存的,现只好改部份的fr_class让他先保存在指定的位置然后在写入数据库,在远端读出时先暂存为frp文件,然后在show出来,
看看其他人还有更好的方法没,没的话我就派分了。。。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
751
SUNSTONE的Delphi笔记
S
S
回复
0
查看
758
SUNSTONE的Delphi笔记
S
后退
顶部