言归正传,在咱们要给用户编写的软件中往往需要生成各类各样的报表,报表是数据库中数据的最终表现形式,在Delphi 6以前,编写报表都在利用Qusoft公司的Quick report,而且在Delphi中集成了Quick report。 在Borland Delphi™ 7 Studio 集成开发环境(IDE)的控件面板中取消了Quick report项,取而代之以Nevrona公司Rave Reports项,且在Tools中有Rave Designer 。
打开Rave Designer ,咱们能够如下图的一个报表设计界面,开发人员能够开发出符合用户要求的报表来,而且那个报表的设计、利用与Delphi集成开发环境几乎是完全的一样,这可能是Rave与其它的报表组件最大的外观上的不同。
我在利用中了Rave Reports ,你能够在 或 下载,在写这篇文章时,上已经发布了Rave Reports ,只是文章仍是以Rave Reports 为准。打开Delphi,能够控件面板看到如图:
Delphi7下的Rave
打开Tools中的Rave,看到的报表设计界面如图:
Rave5的报表设计界面
一、Rave5的报表设计界面
第一,介绍一下Rave的报表设计器的各组件和相关的属性。Rave Designer集成开发环境的界面包括题目栏、菜单栏、快捷工具栏、组件栏和一些窗口:
·题目栏显示了当前的工程名,位于最上部。
·菜单栏,一些功能可通过菜单栏的菜单命令实现。
·快捷工具栏为位图按钮,一些经常使用的菜单命令用这些按钮实现。
·报表组件栏分页显示各类组件(Standard、Report、Zoom、Colors、Lines、Fills、Fonts、Drawing、Bar Code、Alignment),在利用Rave开发应用程序的进程中,正确、合理地利用组件超级重要。用它可设计基于数据库和文本的复杂报表。
·左侧半部份像Delphi的object inspector工具,可设置报表元件的属性,它的下部份有对应属性的简短提示。
·正中部份为设计区域,开发者可在上面添加各类设计元件,如Drawing的横线、直线、矩形、椭圆,Barcode中各类经常使用的条码,Standand 中的Text、Memo、Section、Bitmap、Metafile等等。
·右边为设计导航区,可查看报表的各元件的更多信息,如报表库和数据显示目录,设计时也可快速定位元件位置。
二、Rave的报表设计器,组件栏的各组件:
1、Drawing (画图) 组件页:
Line component :画线组件,所画的线较灵活 。能够看到其属性入图,有颜色、线宽、线行等属性,设计者依照需要更改属性。改变线的长短位置,选中线条后,选择一个端点那么光标会变成十子型,拖动即可。
Hline component :画水平线组件 。
Vline component :画垂直线组件 。
Rectangle component :画长方形组件,能够利用fill组件填充。
Square component :画正方形组件,能够利用fill组件填充。
Ellipse component :画椭圆组件,能够利用fill组件填充。
Circle component :画圆形组件,能够利用fill组件填充。
2、Bar Code(条形码)组件页:
PostNetBarCode :打印邮件标签上包括 POSTNET 条码 。
I2of5BarCode :打印 Interleaved 2 of 5条码。
Code39BarCode :打印standard and extended Code 39条码。
Code128BarCode :打印 A, B and C Code 12码。
UPCBarCode :打印 UPC-12条码。
EANBarCode :打印 EAN-13条码。
3、Standard()组件页:
Text :那个组件是在报表上固定的文字,例如报表的题目等,能够设置字体的大小、
颜色,Rotation属性能够使要显示的字为任意角度。
Memo :Memo组件提供了多行文本的文字,与delphi中的相似,属性很多,但咱们应用的不多,能够利用text属性添加文本。
Section : 那个组件是其他组件的容器,将其他组件固定在此组件中。
Bitmap : 那个组件是在报表中放置bmp文件 (*.bmp), FileLink属性连接bmp文件。
MetaFile : 那个组件在报表中放置meta文件 (*.wmf),FileLink属性连接meta文件。
FontMaster : 那个组件操纵报表中的任何的text字的属性。在要利用该字体的text组件或memo组件的fontmirrot属性选择FontMaster。
PageNumInit :报表显示页码的初始页码。如图的InitValue的值为5,那么报表的初始页为5,页码从5开始。
4、Report(报表)组件页:
若是报表需要的是数据库的数据,那么那个组件页中的组件利用比较频繁。
DataText:用来显示数据库中内容比较短的信息,要用它显示相应的数据库字段信息,那么要利用到DataField 和DataView两个属性,用来连接数据库和字段。DataText用来设计主从报表时,LookupDataView是相应的数据连接、LookupDisplay是显示内容、LookupField是主报表相应的数字段进行关联的字段的内容,也确实是主数据字段进行连接的字段。LookupInvalid是操纵相应错误产生后的情形。
DataMemo:在Memo的基础上支持了数据库的字段显示, 利用DataField 和DataView两个属性,用来连接数据库和字段。除输出相应的文本内容外,还能够输出RTF格式,显示RTF格式,需要设置ContainsRTF属性为True。
CalcTex:那个组件用来统计报表字段的最大值、最小值、总和、统计值等内容直接利用,只需要通过CalcType属性来设置,CalcType属性包括了ctAverage(求平均值)、CtCount(求个数)、ctMax(求最大值)、ctMin(求最小值)、ctSum(求累加和)。
DataMirror Section:和Section组件相似。
Region:若是要进行报表的打印,Region组件规定了打印区域,能够设置Columns来分栏。
Band:那个组件算是一个容器组件,包括text、Memo组件等,包括的是非数据库库信息,Band组件要放置在Region中,选择BandStyle属性后,显现如以下图的属性对话框。左侧为报表中Band的列表,右面的PrintLocation包括:Body Header(页眉)、Group Header(组眉)、 Row Header(行眉)、Detail(表体)、Row Footer(行脚)、Group Footer(组脚) 和Body Footer(页脚),BandStyle属性能够多项选择。Print Occurrence属性包括: First(首页打印)、New Page(打印新一页)、New Column(新分栏)。选择First(首页打印)也确实是Band包括的内容只在第一页打印,选择New Page(打印新一页),Band包括的内容必需在新的一页打印,选择New Column(新分栏),Band包括的内容必需在新的分栏中打印。
DesignerHide属性:当一个报表有多个Band时,选择查找Band变得比较麻烦,设置DesignerHide属性为True时,没有选择到的Band内容被隐藏。
GroupDataView 和GroupKey属性:若是想要以相应的数据结果作为报表分组的依据,那么就必需设置这两个属性,GroupDataView是相应的数据源,GroupKey是数据
源的索引,分组是靠GroupKey中的值进行分组的。
DataBand:是直接作用于数据库,且能够在其中摆放相应数据库报表组件,如此通过它就能够够让相应的报表具有数据库书库打印功能。其中DataView属性是设置相应的数据源,GroupDataView是相应的报表中的分组数据源。
DataCycle:与DataBand相似的地址在于循环的显示数据,DataBand是数据库内容的循环打印,而DataCycle不需要利用Region,它打印的区域为页面,每页只能打印一个组件设计好的内容。利用DataBand是依照Region的范围来分页,而DataCycle那么是每一页只现实一条信息依照数据的多少分页。
CalcOp:该组件提供了报表相应的计算功能,具体的利用会在以后讲解。
CalcTotal:与CalcOp结合利用来完成日常报表的统计功能。
5、Zoom(缩放)组件:在设计报表时,放大、缩小报表页面。
6、Colors(颜色)组件:对选择的对象快速的设置颜色。
7、Lines(线型)组件:关于选择的线,更改其线型。
8、Fills (填充)组件:关于正方形等图形填充样式。
9、Fonts(字体)组件:进行字体的设置。
10、Alignment(队列)组件:调整对齐组件和组建的层次。
隔了好长时刻终于有时刻继续向大伙儿介绍RAVE了,这次要紧介绍7下的Rave组件。打开Delphi7,看到的rave页如下:
Delphi7下的Rave
包括有RvProject、RvSystem、RvNDRWriter、RvCustomConnection、RvDataSetConnection、RvTableConnection、RvQueryConnection、
RvRenderPreview、RvRenderPrinter、RvRenderPDF、RvRender、RvRenderRTF、
RvRenderText这几个组件。
一、RvProject组件
在利用rave报表中,那个组件是最为重要的一个,是利用频率最高的一个组件,开发人员能够通过那个报表完成报表的打印、文件的生成、输出,土过此事能够利用设计状态,也能够通过它来点用相应的报表设计器。
1、属性:
DLLFile:发行报表时需要的dll文件,在以后用户不需要单独发行相应的动态链库文件了。
Engine: 指定相应报表生成的目的地,一样的情形下,是RvSystem,也确实是说它能够打印、打印预览、生成打印文件。固然也能够选择RvNDRWriter组件,那么报表输出的结果是RTF、HTML、PDF、TXT其中的一种。
LoadDesigner: 许诺用户挪用报表设计器,若是它的值为true,那么最终用户就能够够挪用报表设计器;若是它的值为False,那么最终用户就没有权利挪用报表设计器。
ProjectFile:相应报表项目文件,指定详细目录途径。
StoreRAV:要将报表文件嵌入到exe文件中,在那个地址就要填入相应的报表项目文件。
2、要紧方式:
(1)SelectReport方式:
Function SelectReport(ReportName:String; FullName:Boolean):Boolean;
ReportName是相应的报表名称,FullName那么表示是不是以报表的全程作为报表的名称。
(2)Execute方式:
打印选择的相应报表文件,报表时被SelectReport选择的。
;
(3)ExecuteReport方式:
(ReportName:String);
ReportName是相应的报表的名称。
(4)Open方式:
; 打开相应的报表以共操作。
(5)Close方式:
; 关闭一个报表的操作。
二、RvSystem组件
打印或预览报表时,进行打印参数设置的。利历时与RvProject结合。
1、属性:
DefaultDest:指定打印的方式。
rdPreview:预览;
rdFile:文件;
rdPrinter:打印机。
RulerType:相应的标尺单位。
rtNone:没有标尺;
rtHorizCm:横向标尺,单位为厘米;
rtVertCm:纵向标尺,单位为厘米;
rtBothCm:先是所有的标尺,单位为厘米;
rtHorizIn: 横向标尺,单位为英寸;
rtVertIn: 纵向标尺,单位为英寸;
rtBothIn:所有标尺,单位为英寸;
SystemFiler:报表打印文件参数的设置。若是DefaultDest属性为rbFile,那么需要设置那个地址的属性值。
SystemOptions:所有报表输出设置属性。
SystemPreview:报表预览参数的设置。若是DefaultDest属性为rdPreview,那么需要设置那个地址的属性值。
SystemPrinter:报表打印参数的设置。若是DefaultDest属性为rdPrinter ,那么需要设置那个地址的属性值。
SystemSetup:是对是不是许诺打印,是不是许诺打印机设置等参数的设置。
TitlePreview:更改报表预览的窗体的名称,例如能够将Report Preview改成报表预览。
TitleSetup:更改报表输出窗体的名称,例如能够将Output Options改成输出设置。
TitleStatus:报表状态窗体名称,例如能够将Report Status改成报表状态。
2、要紧方式:
OverridePreview方式,OverrideSetup方式,OverrideStatus方式:这三个方式能够对报表设置、打印设置、报表预览窗体进行覆盖,在后面会介绍如何通过这几个方式是窗体为中文。
三、NDRWriter组件
利用该组件实现自概念报表预览。
四、RvDataSetConnection组件,RvTableConnection组件, RvQueryConnection组件
利用这三个组件实现数据库的连接。
五、RvRenderPDF组件, RvRenderHTML组件, RvRenderRTF组件,RvRenderText组件
报表生成相应文件的组件,可让报表生成相应的pdf、html、rtf、text文件。但生成文件对中文不支持,会显现乱码。
前面两篇,向大伙儿介绍了RAVE的组件,从今天开始向大伙儿介绍如何成立报表。第一要感激li jack等列位朋友给我发的电子邮件,鼓舞我继续写下去。今天也查了一下RAVE一词的意思。
RAVE在辞典上的翻译为“咆哮”。 rave-up喧闹的宴会, 狂欢聚会,我们经常也听到锐舞派对,也就是RAVE PARTY。
要对Rave文化追根溯源其实不太容易,并非是因为其无从追溯,恰恰相反,正因为它涵盖的面太广,根基太深,所以反而让人有些无从入手。从远的来说,Rave与各块上土著部落的祭典仪式有着相当的渊源,因为这些祭典通常也是通过音乐与紧密的鼓点而使人进入某种超验状态;从近的来说,Rave又与60年代的嬉皮文化与迷幻实验有着密不可分的关系,两代年轻人除了装扮不同,许多心理状态与行为方式其实都有值得注意的相似之处。
真正当代的将新式音乐与舞曲相结合的Rave运动起源于英国。10多年前,Rave首先出现在曼彻斯特和伊比沙岛(英国著名度假胜地)。1987年末及1988年初,两个并无关系的团体--Schoom和Genesis P开始在英国组织彻夜的舞会,前者是以house音乐为主,而后者以hardcore为主。与此同时,Rave在德国登陆,在柏林等大城市很受欢迎。很快,Rave在英德两地吸引了数以万计的青少年,更吸引了许多来自美国的DJ。
此刻Rave已是欧、美、日,乃至港台最时兴、最UNDERGROUND的一种青青年娱乐形式,Rave 文化从一开始便被打上了高科技的烙印,从急速疯狂的前卫电子舞曲,新奇剌激的影像视觉,到Sh得眼花缭乱的装束,Rave与E-Life,已经成为科技对青年文化阻碍的见证。
当然我也不知道为什么Nevrona公司把这个报表组件叫做rave,也许和锐舞有着一定的关系吧,就像java咖啡。
一、成立一张简单的报表
言归正传,咱们开始成立一张简单的报表,打开7, 新建一个工程,打开Tools下的Rave Designer,在Rave 设计器的page1中,拖放Text,咱们在text属性中写入文字
内容,例如,“我的第一张报表” ,通过Font属性更改字体和字的大小,颜色等。拖放Memo组件,在text属性中输入文字能够看到一个多行的文本。拖放Bitmap组件,在FileLink属性当选取插入图片的位置,就能够够看到在报表中显示了一张图片。
点击[Execute Report]或F9,那么查看到运行后报表。
接下来,对在可视环境中设计好的报表保留,可视化的报表就保留为*.rav文件。那么在delphi程序中如何挪用呢?在delphi中拖放RvProject、RvSystem组件,而且把RvProject的Engine属性连接为RvSystem1。RvProject1的ProjectFile属性,选择为咱们适才保留的.rav文件。再在form1上放置一个Button,添加click 事件,代码如下:
procedure (Sender: TObject);
begin
; fm}
procedure (Sender: TObject);
var
I1: integer;
S1: string[20];
S2: string[20];
Bitmap: TBitmap;
PolyLineArr: array[1..6] of TPoint;
begin
with Sender as TBaseReport do begin
{ 打印表头和表尾 }
SectionTop := ; ;
SetFont('Times New Roman',12);
Println(#9 + IntToStr(I1) + #9'$' + S1 + #9'$' + S2);
end; { for }
{ 打印具有阴影的数据 }
ClearTabs;
SetTab,pjLeft,,2,BOXLINENONE,0);
SetTab(NA,pjCenter,,2,BOXLINENONE,0);
SetTab(NA,pjRight,,2,BOXLINENONE,0);
SetTab(NA,pjRight,,2,BOXLINENONE,0);
for I1 := 11 to 20 do begin
If Odd(I1) then begin
TabShade := 0;
end else begin
TabShade := 15;
end; { else }
Str(I1 * :2:2,S1);
Str(I1 * :2:2,S2);
Print(#9'LastName' + IntToStr(I1) + ', ');
SetFont('Times New Roman',8);
Print('FirstName M.');
SetFont('Times New Roman',12);
Println(#9 + IntToStr(I1) + #9'$' + S1 + #9'$' + S2);
end; { for }
ClearTabs;
{ 分栏报表 }
ClearTabs;
SetTopOfPage;
SectionBottom := ;
Home;
SetFont('宋体',12);
Bold := true;
Underline := true;
Print(' 分栏报表 (LinesLeft/ColumnLinesLeft/LineNum/ColumnNum)');
SetTopOfPage; { Set top of page to current YPos }
Bold := false;
Underline := false;
Italic := false;
Home; { Goto home position }
SetColumns(4,; { Create 4 columns with \" between each }
while ColumnLinesLeft > 0 do begin
Println(IntToStr(LinesLeft) + '/' + IntToStr(ColumnLinesLeft) + '/' +
IntToStr(LineNum) + '/' + IntToStr(ColumnNum));
end; { while }
{ 具有边框的分栏报表 }
ClearTabs;
SetTopOfPage;
SectionBottom := ;
Home;
SetFont('Times New Roman',12);
Bold := true;
Italic := true;
Print('Boxed Columns');
SetTopOfPage; { Set top of page to current YPos }
Bold := false;
Italic := false;
Home; { Goto home position }
ClearTabs;
SetPen(clBlack,psSolid,1,pmCopy);
SetTab,pjCenter,,0,BOXLINEALL,0);
SetTab(NA,pjCenter,,0,BOXLINEALL,0);
SetTab(NA,pjCenter,,0,BOXLINEALL,0);
SetTab(NA,pjCenter,,0,BOXLINEALL,0);
SetColumns(4,; { Create 4 columns with \" between each }
while ColumnLinesLeft > 0 do begin
if LineNum = 1 then begin
TabShade := 15;
Println(#9'LL'#9'CLL'#9'L#'#9''); { 打印题目栏 }
end else begin
TabShade := 0;
Println(#9 + IntToStr(LinesLeft) + #9 + IntToStr(ColumnLinesLeft) +
#9 + IntToStr(LineNum) + #9 + IntToStr(ColumnNum));
end; { else }
end; { while }
SetColumns(1,0);
{ 在指定位置绘出文本 }
NewPage;
OriginX := ; { Set origin to normal }
OriginY := ;
GotoXY,;
Print('Text @ ,');
GotoXY,;
Println('Text @ ,');
GotoXY,;
Println('Text @ ,');
GotoXY,;
Println('Text @ ,');
{*** 图形 图片***}
NewPage;
ResetSection;
SetFont('Arial',24);
Underline := true;
Home;
PrintCenter('Graphics Page Demo',PageWidth / 2);
SetFont('Times New Roman',8);
SectionBottom := ; { Temporarily move the section bottom down }
PrintFooter('Page ' + IntToStr(CurrentPage),pjLeft);
PrintFooter('Date 01/20/95',pjRight);
SectionBottom := ; { Reset section bottom }
OriginX := ;
OriginY := ;
SetFont('Arial',10);
{ 半圆 弧线}
SetPen(clBlack,psSolid,-2,pmCopy); { Set pen to black 2/100ths\" wide }
YPos := ;
PrintCenter('Arc() and Chord()',;
Arc,,,,,,,;
SetBrush(clBlack,bsClear,nil);
Chord,,,,,,,;
{ 饼图 }
YPos := ;
PrintCenter('Pie()',;
SetPen(clBlack,psSolid,-2,pmCopy); { Set pen to black 2/100ths\" wide }
SetBrush(clBlack,bsHorizontal,nil);
Pie,,,,,,,;
SetBrush(clBlack,bsVertical,nil);
Pie,,,,,,,;
SetBrush(clBlack,bsBDiagonal,nil);
Pie,,,,,,,;
{ Bitmap 图片}
YPos := ;
PrintCenter('PaintBitmapRect()',;
Bitmap := ;
('');
PrintBitmapRect,,,,Bitmap);
;
end;
end;
procedure (Sender: TObject);
begin
;
好了,这样我们并没有使用rave,仅仅利用程序实现了报表。
一、新建一个数据库
以access数据库为例,先新建一个数据库,成立一张表包括的字段为:{[name]、[sex]、[age]、[province]},添加数据,固然不要太少了。
首先,我们不考虑程序的调用,打开rave新建一个report。
1.[File]àNew Data Objectà选择Use Connection String。选择[ Jet 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 (Sender: TObject);
begin
;
('Report1');
;
end;
6.运行后,点击[确定]按钮,既显示报表设置窗体,确定后可以看到你想要得窗体。
三、关于和数据库连接报表的一些问题:
1.上面的例子是直接从数据库输出的报表,若是要输出的报表是依照用户的条件输出,
如何办?
如果是要根据用户的条件输出相应的报表,使用Query组件,当然要是涉及到过程的操作,也是一样的阿。选择相应的数据库访问组件,将RvDataSetConnection的Dataset属性连接到数据库访问组件即可。
2.我在数据库表中的字段是中文的,在Rave中连接数据库,DataView不能显示我的字段,并且提示“DataView1已经存在!” ,怎么办?
出现这样的问题主要是DataView1的name属性不支持中文名,而不能根据数据段名来命名,你将DataView1更改为相应的英文名,更改Fieldname为相应的字段中文,刷新DataView,还会有提示,同样更改name和Fieldname属性,直到你要的字段都更改好为止。
3.默认的报表是竖排的,怎么样才能将页面设置为横向的?
关于页面的设置请注意熟悉RvSystem的属性。
:=poLandScape; sString :='陕西';
;
:=True;
end;
运行点击后,可以查看到DBGrid显示了查看的结果,这样完成了第一步---动态查询的过程。
将程序运行,[查询],然后打开Rave,记住不要关掉查询的程序。
[File]=〉New Data Object=〉Direct Data View=〉选择RvQueryConnection1=〉 [Finish]=〉看到报表设计导航区的Data View Dictionary增加了DataView1,扩展后可以看到数据字段;
选[Tools]=〉Report Wizards=〉Single Table=〉选DataView1,选择数据库字段=〉Report Title改为“个人情况报表”。好了之后,可以看到在page中生成了报表。
然后,保留*.rav文件关闭程序,添加[报表预览]按钮事件和RvQueryConnection1的GetCols和GetRow事件。
procedure (Sender: TObject);
begin
With do
begin
;
; alue);
('',[1].value);
('',[2].value);
('',[3].value);
end;
在运行程序,这样就完成了一个根据动态查询生成的报表。
使用存储过程的报表方法如下:
首先你要建立你的存储过程,建立存储如下,虽然这样的简单的查询用存储过程没有必要,这里也只是简单的示例:
ALTER procedure pr_test
as
DECLARE @chrnSQL nvarchar(1000)
SELECT @chrnSQL='select * FROM InfoTable where age>21'
EXEC sp_ExecuteSql @chrnSQL
在上例的程序中,增加DBGrid2, StoredProc1,DataSource2,
RvDataSetConnection1,[运行存储过程]按钮,和[报表预览]按钮。DataSource2的dataset属性设置为StoredProc1,DBGrid2的DataSource设置为DataSource2。StoredProc1连接数据库,StoredProcName := 'pr_test'; RvDataSetConnection1的dataset属性设置为StoredProc1,[运行存储过程]按钮的click事件为:
with StoredProc1 do begin
prepare;
:=True;
end;
运行程序,看到DBGrid2显示了存储过程查询的结果。
将程序运行,[运行存储过程],然后打开Rave,记住不要关掉查询的程序。然后,用和上例相同的方法,添加如下代码:
[File]=〉New Data Object=〉Direct Data View=〉 选择RvDataSetConnection1=〉 [Finish]=〉
看到报表设计导航区的Data View Dictionary增加了DataView2,扩展后可以看到数据字段;
选[Tools]àReport WizardsàSingle Tableà 选DataView2,选择数据库字段àReport Title改为“个人情况报表”。好了之后,可以看到在page中生成了报表。
保存文件,关闭程序,添加[报表预览]按钮事件。以及RvDataSetConnection1的GetCols和GetRow事件。
procedure (Sender: TObject);
begin
With do
begin
;
; alue);
('',[1].value);
('',[2].value);
('',[3].value);
end;
好了,这篇的讲解应该大家都明白和数据库有关的报表怎么设计了,总结一下:通过DBGrid数据感应组件得到查询的结果,通过和rave的连接组件(RvDataSetConnection、RvQueryConnection等)的GetCols和GetRow事件往报表当中添加数据。
作为《 7 中利用RAVE报表》的最后,整理一些技术给大伙儿。
1.设计好的Rave报表文件如何打包到EXE文件中?
在Rvproject的属性中有一个StoreRav,只要load对应的rav文件即可!同时最好把对应rvproject的ProjectFile属性清空。
2.如何显示中文化的打印预览对话框?
1)拷贝C:\\Rave5\\Source目录中的和到对应的项
目目录中。
2)把加入到对应的项目文件中,把对应窗体的名字从
RavePreviewForm更改为SCRavePreviewForm;将文件另存为
。
3)把窗体SCRavePreviewForm中的对应文字从英文更改为中文。
4)在主窗体上加上 RvProject和 RvSystem部件,通过设定为
RvSystem部件来把两者挂接。
5)设置RvSystem部件的OverridePreview事件过程为以下代码:
procedure (ReportSystem: TRvSystem;
OverrideMode: TOverrideMode; var OverrideForm: TForm);
begin
Case OverrideMode Of
omCreate:
Begin
OverrideForm := (self);
eportSystem := ReportSystem;
End;
omShow:
Begin
As
TSCRavePreviewForm).RvRenderPreview);
If Assigned Then
Begin
((OverrideForm As
TSCRavePreviewForm).RvRenderPreview);
End; { if }
(OverrideForm As TSCRavePreviewForm).InputFileName :=
(OverrideForm As TSCRavePreviewForm).InputStream :=
(OverrideForm As TSCRavePreviewForm).InitFromRPSystem;
(* *)
If soPreviewModal In Then
Begin
;
End
Else
Begin
;
End; { else }
End;
omWait:
Begin
If Not (soPreviewModal In Then
Begin
(OverrideForm As TSCRavePreviewForm). :=
Nil;
End; { if }
FreeAndNil(OverrideForm);
End;
End; { case }
end;
6)编译运行这个项目,其打印预览窗口就会变成中文的了。
备注:这种方式进行中文化不会受到RAVE版本升级的影响。
3.如何显示中文化的打印设置对话框?
1)拷贝C:\\Rave5\\Source目录中的和到对应的项目目
录中。
2)把加入到对应的项目文件中,把对应窗体的名字从RPSetupForm更改
为SCSetupForm;将文件另存为。
3)把窗体SCSetupForm中的对应文字从英文更改为中文。
4)在主窗体上加上 RvProject和 RvSystem部件,通过设定为
RvSystem 部件来把两者挂接。
5)设置RvSystem部件的OverrideSetup事件过程为以下代码:
procedure (ReportSystem: TRvSystem;
OverrideMode: TOverrideMode; var OverrideForm: TForm);
begin
case
OverrideMode of
omCreate:
begin
OverrideForm := (nil);
eportSystem := ReportSystem;
end;
omShow:
begin
with OverrideForm as TSCSetupForm, ReportSystem do
begin
PreviewSetup := False;
Aborted := ShowModal = mrCancel;
end;
end;
omWait:
begin
{because showModal: no wait necessary!}
end;
omFree:
begin
;
end;
end;
end;
6)编译运行这个项目,其打印设置对话框就会变成中文的了!
这种方式进行中文化不会受到RAVE版本升级的影响!对于其它对话框应该可以同法炮制吧!
4.如何自已做预览窗口?
1)创建一个窗口,在上面放RvProject组件、RvNDRWriter组件、RvRenderPreview组件和ScrollBox组件,设定以下几个部件间的联系关系:
:=RvNDRWriter;
:=ScrollBox;
2)设定为 ;进行预览的代码为:
var
NDRStream:TMemoryStream;
begin
fm}
procedure (Sender: TObject);
var
MyPage: TRavePage;
MyText: TRaveText;
begin
;
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务