Delphi 7 中使用RAVE报表(五)
——和数据库连接的报表
以access数据库为例,先新建一个数据库,建立一张表包括的字段为:{[name]、[sex]、[age]、[province]},添加数据,当然不要太少了。
首先,我们不考虑Delphi程序的调用,打开rave新建一个report;
1.[File]àNew Data Objectà选择Use Connection String。选择[Microsoft Jet 4.0 OLE DB Provider],选择保存的数据库的位置并测试连接成功。[ok]后,看到报表设计导航区的Data View Dictionary增加了Database1;
2.[File]àNew Data Object Driver Data View 选择Database1 [Finish] 弹出Query Advenced Designr,将Query Advenced Designr的Tables栏的数据表拖放到layout中à[ok]à看到报表设计导航区的Data View Dictionary增加了DriveDataView1,扩展后可以看到数据字段;
3.选[Tools]àReport WizardsàSingle Table 选DriveDataView1,选择数据库字段Report Title改为“个人情况报表”。好了之后,可以看到在page中生成了报表。
4.按[F9]或者快捷按钮[Execute Report],你就可以看到连接到数据库的报表了,rave报表根据数据量的多少自动分页。根据需要更改格式,再预览,直到是你所想要的报表格式。
这时候就很简单的完成了一张报表,当然有些人也许很看到这样设计出来的报表的标题在报表的第一页显示了后,在其他页并没有显示。
怎么样让标题在每一页显示呢?
选到TitleBand,在设置BandStyle在Print Occurrence把New page打勾选中,这样在预览你就会发现,这时生成的报表每一页都会有标题。
当然,我们的报表时用程序调用的,那么我们在delphi中来设计连接数据库的报表。
1.新建工程,在窗体上放置以下组件:RvProject,RvSystem,RvDataSetConnection,ADOConnection,ADOTable,DataSource,Button,DBGrid。设置相应的数据库连接可以看到在DBGrid中显示了数据,具体的设置在这里不进行讲解了,请参考相应的数据库书。RvSystem1的Engine为RvSystem1,RvProjectFile选择保存了的为*.Rav文件。RvDataSetConnection1的DataSet属性设置为:ADOTable1。
2.打开Rave设计器打开*.Rav文件。
3.[File]àNew Data ObjectàDirect Data Viewà选择RvDataSetConnection1,[Finish]看到报表设计导航区的Data View Dictionary增加了DataView1,扩展后可以看到数据字段;
4.利用前例步骤3,同样的方法,进行报表的可视化设计。在可视化设计时,注意看生成的简单数据库代码的组成部分,注意TitleBand,DataBand, Band的属性设置。当然我们也可以不用Report Wizards自动生成也可以自己来根据需要直接做报表。步骤是:
1)添加组件页的Region组件,来描述报表的范围。
2)添加Band,Band, DataBand组件,设置相应的BandStyle 和Dataview属性。
3)在DataBand中添加,DataText选择其Dataview属性和DataFile属性。
4)预览即可,如果不能正常显示,注意查看属性的设置,尤其是Dataview属性,同时可以与Report Wizards自动生成的报表进行对比。
5.添加如下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
RvProject1.Open ;
RvProject1.ExecuteReport('Report1');
RvProject1.Close ;
end;
6.运行后,点击[确定]按钮,既显示报表设置窗体,确定后可以看到你想要得窗体。
关于和数据库连接报表的一些问题:
1)上面的例子是直接从数据库输出的报表,如果要输出的报表是根据用户的条件输出,怎么办?
如果是要根据用户的条件输出相应的报表,使用Query组件,当然要是涉及到存储过程的操作,也是一样的阿。选择相应的数据库访问组件,将RvDataSetConnection的Dataset属性连接到数据库访问组件即可。
2)我在数据库表中的字段是中文的,在Rave中连接数据库,DataView不能显示我的字段,并且提示“DataView1已经存在!” ,怎么办?
出现这样的问题主要是DataView1的name属性不支持中文名,而不能根据数据段名来命名,你将DataView1更改为相应的英文名,更改Fieldname为响应的字段中文,刷新DataView,还会有提示,同样更改name和Fieldname属性,直到你要的字段都更改好为止。
3)默认的报表时竖排的,怎么样才能将页面设置为横向的?
关于页面的设置请注意熟悉RvSystem的属性。
RvSystem1.SystemPrinter.Orientation :=poLandScape; //页面为横向的
RvSystem1.SystemPreview.FormState := wsMaximized; //预览窗体最大化
RvSystem1.SystemPreview.MarginPercent :=3; //报表页面据预览窗体的边距。
当然还有很多的设置TitleSetup,TitleStatus,TitlePreview属性可以将你的报表设置,报表预览的窗体的标题改为你想要的。当然我们最基本的是要改为中文的阿。关于怎么让你的报表预览,报表设置窗体为中文的我在后面会专门介绍。
(ps:转载请注明作者--高速公路上的鱼(cyq))