学习Rave组件的基本功能和常用属性、方法和事件掌握RaveDesinger报表设计环境的组成部分和使用方法掌握Rave组件结合报表向导开发数据报表掌握利用RaveDesinger手工制作报表第9章数据报表的制作2020/2/92在数据库项目中,设计报表是最重要的任务之一,报表就是用来概括数据的文档。例如,公司要制作一个月度报表来列出所有超过销售定额的销售人员。这样数据的分析与统计结果需要以报表的形式显示,并最终打印成文档以供领导审批或者存档。Delphi为用户设计了功能强大的软件工具,它能自动生成报表。其中RaveReport5.0数据报表集成开发环境是从Delphi7才开始引入的(以前版本的Delphi的数据报表开发技术称为QuickReport),它是一个功能强大的集成报表开发环境。Delphi7中实现报表的方法称为Rave,将Rave报表组件添加到应用中后,就可以创建各种类型的报表。本章将讨论怎样使用Rave,介绍各个Rave报表组件及其属性、方法和事件,最后举例说明如何利用Rave组件设计各种样式的报表。2020/2/939.1Rave报表组件概述Rave报表组件位于Rave组件面板中,如图9-1所示,共有13个组件。这些组件分别从左到右依次为:RvProject组件、RvSystem组件、RvNDRWriter组件、RvCustomConnection组件、RvDataSetConnection组件、RvTableConnection组件、RvQueryConnection组件、RvRenderPreview组件、RvRenderPrinter组件、RvRenderPDF组件、RvRenderHTML组件、RvRenderRTF组件和RvRenderText组件。Rave组件中的这13个组件可以被分为4个大类。lRave工程组件Rave工程组件只包含一个RvProject组件,是应用程序和Rave可视报表之间的接口,可以在RaveDesignet中设计各种格式的报表。通过RvProject组件可以在Delphi应用程序中打开已经设置好的Rave报表。2020/2/94l引擎类组件引擎类组件包括RvSystem和RvNDRWriter组件,可以从以前定义的报表文件中读取,也可以根据属性描述设定报表风格。lRender组件Render组件用来将一个RSR(RaveSnapshotReport)文件或者从RvNDRWriter产生的流转换为各种格式,并发布出来。这类组件主要包括的有:RvRenderPreview、RvRenderPrinter、RvRenderPDF、RvRenderHTML、RvRenderRTF和RvRenderText组件。l数据连接组件数据连接组件主要用于将应用程序的数据和Rave报表中的DirectDataViews相连接,它主要包括的有:RvCustomConnection、RvDataSetConnection、RvTableConnection和RvQueryConnection组件。图9-1RaveReport5.0组件2020/2/95下面重点介绍RvProject组件、RvSystem组件、RvNDRWriter组件、RvDataSetConnection组件、RvTableConnection组件、RvQueryConnection组件、RvRenderPreview组件、RvRenderPrinter组件、9.1.1RvProject组件RvProject组件是Rave报表工具中的核心组件,是访问Rave可视化报表的手段,只要使用Rave报表就要利用到RvProject组件。通常情况下应用程序中只有一个RvProject组件,如果必要的话可以有多个。下面介绍RvProject组件的主要属性和方法。ProjectFile属性:用于指定应用程序保存报表定义的Rave项目文件,这种项目文件的扩展名一般是.rav,尽管是一个文件,但是Rave项目可以保存各种报表的定义。当调用了TraveReport的Open方法后,Rave项目文件将被装入内存以准备显示或打印。在关闭应用程序之前必须关闭Rave项目文件,这可以通过调用Close方法来实现。若对报表的定义做了修改,可以调用Save方法保存所作的修改。2020/2/96在ObjectInspector中双击ProjectFile属性或者单击该属性后的“”按钮,可以打开SelectRaveProjectFile对话框,如图9-2所示。通过该对话框可以选择报表的工程文件。DLLFile属性:指明当LoadDesigner属性为True时要使用的DLL文件名。根据是否使用了packages包,文件可以是RavePack或者是RaveSolo动态链接库。这个属性只对RaveEUDL许可证有效。2020/2/97图9-2SelectRaveProjectFile对话框Engine属性:用于指定报表的引擎,该报表引擎在通过RvProject组件打印报表的时候使用,若这个属性没有被定义,一个默认的RvSystem将会被创建以填补该属性,TRvSystem和TRvNDRWriter对象都可以赋给这个属性。2020/2/98StoreRAV属性:用于指定要保存到应用程序中的报表文件。当通过该属性指定RAV文件后,该文件将被编译到应用程序中称为应用程序的一部分。在ObjectInspector中双击StoreRAV属性或者单击该属性后的“”按钮,可以打开LoadIntoExe对话框,如图9-3所示。图9-3LoadIntoExe对话框单击“”按钮打开对话框,选择要装载的RAV文件,完成后单击“”按钮将文件装载到应用程序中。单击“”按钮可以将当前应用程序中的RAV文件保存成标准的RAV文件。单击“”按钮可以清除RAV文件。2020/2/99Execute方法:用于开始打印当前选中的Rave报表。其使用方法如下。RvProject1.Execute;Open方法:用于打开指定的报表项目文件,相当于设置Active属性为True。Close方法:用于关闭指定的报表项目文件,并从内存中卸载,相当于设置Active属性为False。若调用了RvProject的Open方法,则在应用程序退出前务必调用本方法。9.1.2RvSystem组件RvSystem组件是一个功能非常强大的组件,集合了RvRenderPreview、RvRenderPrinter和RvNDRWriter组件的功能。RvSystem组件可以将报表发送到打印机或者预览窗口,也可以显示Setup和状态屏幕。RvSystem组件的常用属性如下。SystemPreview属性:用于显示在RvRenderPreview中的所有的预览类型选项。其中包含属性以及含义如下。2020/2/910lFormHwight:定义了RvSystem报表预览窗口的高度。lFormState:定义了报表预览窗口的初始状态,包括正常显示、最小化和最大化。lFormWidth:定义了RvSystem报表预览窗口的宽度。RulerType属性:指定了预览窗口中标尺的类型,可以选择的类型,如表9-1所示。表9-1预览窗口中标尺的类型2020/2/9112020/2/912SystemOptions属性:用于控制RvSystem组件的配置情况,其各个属性的取值以及含义表9-2所示。表9-1SystemOptions中各个属性的取值以及含义表9-2SystemOptions中各个属性的取值以及含义2020/2/9139.1.3RvNDRWriter组件RvNDRWriter组件用于连接RvRenderPrinter和RvRenderPreview组件,以特殊的二进制格式保存一个报表,一直到该报表准备打印或者预览时。RvNDRWriter组件的常用属性如下。Copies属性:用户指定或者返回打印到打印机时的份数。下面的代码指定打印3份报表。RvNDRWriter.Copies:=3;但并不是所有的打印机都支持此功能,尤其是一些非激光打印机。可以通过MaxCopies属性判断该功能是否可以使用。对于不支持该功能的打印机不得不多次进行打印。CurrentPage属性:用于返回当前页的页码。FirstPage属性:用于返回第一页的页码。LastPage属性:用于返回最后一页的页码。Pages属性:用于返回报表中的总页数。下面的代码将显示“第xx页,共xx页”的格式。2020/2/914WithRvNDRWriter1doBeginEdtPage.Text:=IntToStr(CurrentPage);PageLabel.Caption:='第'+IntToStr(CurrentPage-FirstPage+1)+'页,共'+IntToStr(Pages)+'页';End;MarginBottom属性:用于设置或返回页边距中的底边距。MarginTop属性:用于设置或返回页边距中的顶边距。MarginLeft属性:用于设置或返回页边距中的左边距。MarginRight属性:用于设置或返回页边距中的右边距。下面的代码用于设置页面的4个边距。2020/2/915WithRvNDRWriter1doBeginMarginBottom:=0.6;MarginTop:=0.6;MarginLeft:=0.6;MarginRight:=1.1;End;Orientation属性:用于设置页面是横向还是纵向,取值为poPortrait表示纵向设置页面,取值为poLandscape表示横向设置页面。ScaleX和ScaleY属性:分别用于设置页面的水平缩放比例和纵向缩放比例,100表示正常尺寸,50表示缩小50%,200表示放大两倍。下面的代码将页面缩小到原来的四分之一。RvNDRWriter1.ScaleX:=50;RvNDRWriter1.ScaleY:=50;2020/2/9169.1.4RvDataSetConnection组件RvDataSetConnection组件为Rave报表提供数据源,通过属性DataSet属性关联数据集。当应用程序使用了DataSet或者ADODataSet等组件时,可以使用RvDataSetConnection组件。RvDataSetConnection组件的常用属性、方法和事件如下。DataSet属性:用于关联数据数据集组件,为报表提供数据源。WriteBCDData方法:用于在OnGetRow事件中写BCD字段的内容,字段的值应当和在OnGetCols事件中定义的字段顺序一致,其语法定义为:FunctionWriteBCDData(FromatData:String;NativeData:Currency):String;其中FromatData参数定义了字段的格式,如果没有格式可以设置该参数为空。NativeData参数指定了应当包含未被修改的字段值的内容。OnEOF事件:当Rave数据系统希望数据为EOF状态时,就会触发OnEOF事件,其语法定义为:2020/2/917ProcedureOnEOF(Connection:RvCustomConnection;varEof:Boolean);OnFirst事件:当Rave数据系统希望数据的光标定位到数据的第一行时,就会触发OnFirst事件,其语法定义为:ProcedureOnFirst(Connection:TRvCustomConnection);9.1.5RvQueryConnection组件RvQueryConnection组件为Rave报表提供数据源,通过属性Query关联数据集。当应用程序中使用了Query组件时,可以使用RvQueryConnection组件。RvQueryConnection组件只有