学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
ASP ASP.NET PHP JSP SQL MYSQL Java VB

您的位置:学院 >> 编程开发 >> Delphi >> 用Delphi4的QReport部件生成报表


用Delphi4的QReport部件生成报表


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目录下。



技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·CGI
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
媒体动画
·Director ·Authorware ·Maya
·视频处理    


相关软件 产品库推荐
·笔记本 ·台式机 ·服务器
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU ·硬盘 ·内存
·主板 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

还没人留言,抢个先,哈哈!
对"用Delphi4的QReport部件生成报表"的评论 - 快速回贴
内容:
  [完成后可按Ctrl+Enter发布]

百度中 用Delphi4的QReport部件生成报表 相关内容
Google搜索中 用Delphi4的QReport部件生成报表 相关内容
雅虎中 用Delphi4的QReport部件生成报表 相关内容
Sogou搜索中 用Delphi4的QReport部件生成报表 相关内容

相关软件 最新回复帖子:

·Windows Vista 中卸载软件的不同方式
·没有mysql支持时的替代方案
·一个可以发送附件及HTML格式邮件的PHP类
·AutoCAD打造精致三维鸟笼实例详解
·Photoshop自定义水晶字特效样式
·AutoCAD三维基础实例教程
·PS为黑背景长发美女照片抠图换背
·用Photoshop自制个性摩托车贴花小经验
·轻松几步将美女照片处理为手工素描
·巧用Photoshop画笔轻松绘制创意特效


  相关软件 用Delphi4的QReport部件生成报表相关文章
也谈为Delphi中数据库报表加网格 在Dephi中使用TStream读写数据的技巧
Delphi中的消息处理 在DEPHI程序中使用ADO对象存取ODBC数续
在DELPHI程序中使用ADO对象存取ODBC数 在DELPHI程序中动态设置ODBC数据源
精简DELPHI数据库系统的补充 如何对数据流 INSERT、APPEND
定制任务栏上的系统菜单 活用 SetSelTextBuf
捕捉来自 Thread 的异常 在DEPHI 4.0中实现动画功能
修改与克隆对象属性 控制系统菜单
怎样建立简单的任务栏应用程序 用修改文件时间的方法来加密文件
用Dephi程序维护Paradox 数据表的索引 有“背景”的窗体
自定义快速报表的打印预览窗口 用Delphi实现自定义颜色对话框及其构件