Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16495238
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:46:44

下载本文示例代码
p>  用户在使用数据库应用程序时经常要生成报表,利用Delphi 4的QReport 部件,可以帮助我们快速方便地生成报表。这里以一个设备管理报表为例说明如何用QReport部件与Query部件设计从多个数据表中生成报表。 一、 所用数据库   这里用到三个Foxpro数据表,DLBMK(设备大类编码)、SBXHK(设备型号及配置)、BMSBK(设备所在部门),存放在D:\SB目录下。其库结构如下: (一) DLBMK 字段名称 字段类型 解释 1 DLBH N3 设备大类的编号 2 DLMC C20 设备大类的名称 (二)SBXHK 字段名称 字段类型 解释 1 XHBM N3 设备型号的编码 2 DLBH N3 同DLBMK中的DLBH字段 3 SBXH C30 设备型号 4 SBPZ C30 设备配置 5 SBSL N3 设备数量 (三)BMSBK 字段名称 字段类型 解释 1 BMMC C20 部门名称 2 XHBM N3 同SBXHK中的XHBM字段 3 SL N3 数量   利用这三个数据表,要生成一个只有电脑部有而其他部门没有的设备型号的情况。 二? 绦蛑械牟考?笆粜?/b>   程序中有两个窗体:主窗体mainForm与报表窗体repForm。主窗体mainForm中有两个TButton部件,设置如下: 部件 属性及属性值 PreviewBtn:TButton Caption:预览 PrintBtn: TButton Caption:打印   报表窗体repForm中的部件及属性设置如下: 部件 属性及属性值 Query1: TQuery DatabaseName:d:\sb Active: True Qrep1: TQuickrep Dataset:query1 TitleBand1: TQRBand BandType:rbTitle HeadBand1: TQRBand BandType:rbColumnHeader DrawLeft : True DrawRight : True DrawTop : True DrawBottom : True DetailBand1: TQRBand BandType:rbDetail DrawLeft : True DrawRight : True DrawTop : True DrawBottom : True ChildBand1: TQRChildBand ParentBand:DetailBand1 DrawLeft : True DrawRight : True DrawTop : True DrawBottom : True TitleLabel: TQRLabel Caption:设备统计表 DlmcLabel: TQRLabel Caption:类别 SbxhLabel: TQRLabel Caption:型号 SbpzLabel: TQRLabel Caption:配置 SbslLabel: TQRLabel Caption:数量 DlmcDBText: TQRDBText Dataset:Query1 Datafield: dlmc SbxhDBText: TQRDBText Dataset:Query1 Datafield: sbxh SbpzDBText: TQRDBText Dataset:Query1 Datafield: sbpz SbslDBText: TQRDBtext Dataset:Query1 Datafield: sbsl Shape1~9: TQRShape Shape:qrsVertline Top:0 Width:1 Query1的SQL属性设置为: select a.dlbh,a.dlmc,b.sbxh,b.sbpz,b.sbsl from dlbmk a,sbxhk b where a.dlbh=b.dlbh and b.xhbm not in (select xhbm from bmsbk where trim(bmmc)$#@60;$#@62;’电脑部’) order by a.dlbh    设置几个TQRband部件的DrawLeft、DrawRight、DrawTop、DrawBottom属性值为True,是为了打印表格边框及横线。利用TQRShape部件,是为了打印出表格竖线。DlmcDBText放置在DetailBand1上,其它几个TQRDBText部件放置在ChildBand1上,Shape1~3放置在HeadBand1上,Shape4~6放置在DetailBand1上,Shape7~9放置在ChildBand1上。 三、 为程序增加代码 1.mainForm窗体中的两个按钮事件 procedure TmainForm.PreviewBtnClick(Sender : TObject) begin repForm.Qrep1.Preview; end; procedure TmainFormPrintBtnClick(Sender : TObject) begin repForm.Qrep1.Print; end; 2.HeadBand1、DetailBand1及ChildBand1的BeforePrint事件 procedure TrepForm.HeadBand1BeforePrint(Sender : TQRCustomBand; Var PrintBand : Boolean) Begin Shape1.Height:=HeadBand1.Height; Shape2.Height:=HeadBand1.Height; Shape3.Height:=HeadBand1.Height; End; procedure TrepForm.DetailBand1BeforePrint(Sender : TQRCustomBand; Var PrintBand : Boolean) begin PrintBand:=bh$#@60; $#@62;Query1[‘dlbh’]; if PrintBand then begin bh:=Query1[‘dlbh’]; Shape4.Height:=DetailBand1.Height; Shape5.Height:=DetailBand1.Height; Shape6.Height:=DetailBand1.Height; end end; procedure TrepForm.ChildBand1BeforePrint(Sender : TQRCustomBand; Var PrintBand : Boolean) Begin Shape7.Height:=ChildBand1.Height; Shape8.Height:=ChildBand1.Height; Shape9.Height:=ChildBand1.Height; End;   bh应在变量定义部分定义: Var bh : shortint=0;   几个TQRShape部件的高度(Height)与所在TQRBand 部件保持一致,使竖线打印得整齐。如果在设计阶段调整了TQRBand部件的高度,也不会出现竖线断线或过长的情况。   在DetailBand1的BeforePrint事件中用PrintBand进行控制,可使每个设备大类名称只需打印一次,而不是每个型号都对应打印一次大类名称。因为dlbh字段的值都大于0,bh初值设为0使它与任一记录的dlbh字段的值都不同,以确保第一个大类名称被打印。这样就生成了一个从多个数据表中提取数据,并带有表格线的数据报表。   注:本例工程文件为sbgl.dpr,原程序文件为main.pas和sbrep.pas,若要测试请将dlbmk.dbf、sbxhk.dbf、bmsbk.dbf三个文件放在d:\sb目录下。 p>  用户在使用数据库应用程序时经常要生成报表,利用Delphi 4的QReport 部件,可以帮助我们快速方便地生成报表。这里以一个设备管理报表为例说明如何用QReport部件与Query部件设计从多个数据表中生成报表。 一、 所用数据库   这里用到三个Foxpro数据表,DLBMK(设备大类编码)、SBXHK(设备型号及配置)、BMSBK(设备所在部门),存放在D:\SB目录下。其库结构如下: (一) DLBMK 字段名称 字段类型 解释 1 DLBH N3 设备大类的编号 2 DLMC C20 设备大类的名称 (二)SBXHK 字段名称 字段类型 解释 1 XHBM N3 设备型号的编码 2 DLBH N3 同DLBMK中的DLBH字段 3 SBXH C30 设备型号 4 SBPZ C30 设备配置 5 SBSL N3 设备数量 (三)BMSBK 字段名称 字段类型 解释 1 BMMC C20 部门名称 2 XHBM N3 同SBXHK中的XHBM字段 3 SL N3 数量   利用这三个数据表,要生成一个只有电脑部有而其他部门没有的设备型号的情况。 二? 绦蛑械牟考?笆粜?/b>   程序中有两个窗体:主窗体mainForm与报表窗体repForm。主窗体mainForm中有两个TButton部件,设置如下: 部件 属性及属性值 PreviewBtn:TButton Caption:预览 PrintBtn: TButton Caption:打印   报表窗体repForm中的部件及属性设置如下: 部件 属性及属性值 Query1: TQuery DatabaseName:d:\sb Active: True Qrep1: TQuickrep Dataset:query1 TitleBand1: TQRBand BandType:rbTitle HeadBand1: TQRBand BandType:rbColumnHeader DrawLeft : True DrawRight : True DrawTop : True DrawBottom : True DetailBand1: TQRBand BandType:rbDetail DrawLeft : True DrawRight : True DrawTop : True DrawBottom : True ChildBand1: TQRChildBand ParentBand:DetailBand1 DrawLeft : True DrawRight : True DrawTop : True DrawBottom : True TitleLabel: TQRLabel Caption:设备统计表 DlmcLabel: TQRLabel Caption:类别 SbxhLabel: TQRLabel Caption:型号 SbpzLabel: TQRLabel Caption:配置 SbslLabel: TQRLabel Caption:数量 DlmcDBText: TQRDBText Dataset:Query1 Datafield: dlmc SbxhDBText: TQRDBText Dataset:Query1 Datafield: sbxh SbpzDBText: TQRDBText Dataset:Query1 Datafield: sbpz SbslDBText: TQRDBtext Dataset:Query1 Datafield: sbsl Shape1~9: TQRShape Shape:qrsVertline Top:0 Width:1 Query1的SQL属性设置为: select a.dlbh,a.dlmc,b.sbxh,b.sbpz,b.sbsl from dlbmk a,sbxhk b where a.dlbh=b.dlbh and b.xhbm not in (select xhbm from bmsbk where trim(bmmc)$#@60;$#@62;’电脑部’) order by a.dlbh    设置几个TQRband部件的DrawLeft、DrawRight、DrawTop、DrawBottom属性值为True,是为了打印表格边框及横线。利用TQRShape部件,是为了打印出表格竖线。DlmcDBText放置在DetailBand1上,其它几个TQRDBText部件放置在ChildBand1上,Shape1~3放置在HeadBand1上,Shape4~6放置在DetailBand1上,Shape7~9放置在ChildBand1上。 三、 为程序增加代码 1.mainForm窗体中的两个按钮事件 procedure TmainForm.PreviewBtnClick(Sender : TObject) begin repForm.Qrep1.Preview; end; procedure TmainFormPrintBtnClick(Sender : TObject) begin repForm.Qrep1.Print; end; 2.HeadBand1、DetailBand1及ChildBand1的BeforePrint事件 procedure TrepForm.HeadBand1BeforePrint(Sender : TQRCustomBand; Var PrintBand : Boolean) Begin Shape1.Height:=HeadBand1.Height; Shape2.Height:=HeadBand1.Height; Shape3.Height:=HeadBand1.Height; End; procedure TrepForm.DetailBand1BeforePrint(Sender : TQRCustomBand; Var PrintBand : Boolean) begin PrintBand:=bh$#@60; $#@62;Query1[‘dlbh’]; if PrintBand then begin bh:=Query1[‘dlbh’]; Shape4.Height:=DetailBand1.Height; Shape5.Height:=DetailBand1.Height; Shape6.Height:=DetailBand1.Height; end end; procedure TrepForm.ChildBand1BeforePrint(Sender : TQRCustomBand; Var PrintBand : Boolean) Begin Shape7.Height:=ChildBand1.Height; Shape8.Height:=ChildBand1.Height; Shape9.Height:=ChildBand1.Height; End;   bh应在变量定义部分定义: Var bh : shortint=0;   几个TQRShape部件的高度(Height)与所在TQRBand 部件保持一致,使竖线打印得整齐。如果在设计阶段调整了TQRBand部件的高度,也不会出现竖线断线或过长的情况。   在DetailBand1的BeforePrint事件中用PrintBand进行控制,可使每个设备大类名称只需打印一次,而不是每个型号都对应打印一次大类名称。因为dlbh字段的值都大于0,bh初值设为0使它与任一记录的dlbh字段的值都不同,以确保第一个大类名称被打印。这样就生成了一个从多个数据表中提取数据,并带有表格线的数据报表。   注:本例工程文件为sbgl.dpr,原程序文件为main.pas和sbrep.pas,若要测试请将dlbmk.dbf、sbxhk.dbf、bmsbk.dbf三个文件放在d:\sb目录下。 下载本文示例代码


用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表用Delphi4的QReport部件生成报表
阅读(235) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~