计算机世界日报
返回首页 产品报价 实用技巧 国产软件 技术天地 站点精选

计算机世界展览会日报

  综合要闻
  企业&人.com
  产品与技术
  网络与通信
  市场与渠道
  99全文检索

CCW网站

  网络世界
  微电脑世界
  IT经理世界
  CCW展览
  信息服务中心   家用电脑世界

兄弟刊物

  电子与信息化
  今日电子
  中国新闻科技
  电子知识产权
  电子产品世界

网上专递

  Linux园地
  友情链接
  冬涛谈法
Dongtao on Law

98内容总汇



实用技巧

用Delphi4的QReport部件生成报表

河北证券公司电脑部
师承

---- 用户在使用数据库应用程序时经常要生成报表,利用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       数量

---- 利用这三个数据表,要生成一个只有电脑部有而其他部门没有的设备型号的情况。

---- 二、 程序中的部件及属性

---- 程序中有两个窗体:主窗体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)<>’电脑部’)
  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.HeadBand1Before
Print(Sender : TQRCustomBand;
   Var  PrintBand : Boolean)
Begin
   Shape1.Height:=HeadBand1.Height;
   Shape2.Height:=HeadBand1.Height;
   Shape3.Height:=HeadBand1.Height;
End;
procedure  TrepForm.DetailBand1Before
Print(Sender : TQRCustomBand;
   Var  PrintBand : Boolean)
begin
   PrintBand:=bh< >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.ChildBand1Before
Print(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目录下。

 
免 费 订 阅

实用技巧分类

Office应用
CAD
C、C++
数据库应用
Delphi
Internet应用
Java
Notes应用
操作系统应用
PowerBuilder
VB
Visual Foxpro
其他类
上周 排行榜
如 何 投 稿 ?

编者的话

在日常的工作生活中, 我们对计算机软硬件技术的应用开发肯定有许多的心得体会, 拿来和众人分享:让别人得到他们想要的,使自己找到苦苦寻觅的; 小的点点滴滴,大的工程系统,这里都需要。投稿 的关键在“技巧”二 字,知他人所不知,这样的稿件本栏最最欢迎! 大家公认的 好文章自然会有好的奖励。希望每个人 在这里都有所收获...

r2.gif (980 bytes)
  中国惠普
  3Com中国
  Motorola中国
  CA中国
  Cabletron
  Sony在中国
  西门子WinCC
  爱普生中国
  中国建设银行
  德州仪器(TI)
  问博医药


中国计算机世界出版服务公司版权所有