用Delphi4的QReport部件生成报表

2016-02-19 18:36 76 1 收藏

下面,图老师小编带您去了解一下用Delphi4的QReport部件生成报表,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - 编程语言 】

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

来源:http://www.tulaoshi.com/n/20160219/1618301.html

延伸阅读
标签: excel
Excel如何设置自动生成分页报表   详细操作步骤: ①图老师小编先在网上下载了一份原始数据表格,我们用Excel2007打开,单击菜单栏--插入--数据透视表,弹出创建数据透视表对话框,选择表区域以及放置的位置,确定。 ②右侧出现数据透视表字段列表,将地区和城市拖到报表筛选中,姓名拖到列标签中,类别名称拖到行标签中...
标签: Delphi
  19.3.2 创建图形部件 图形控制是一类简单的部件。因为纯图形部件从不需要得到键盘焦点,所以它没有也不要窗口句柄。包含图形控制的应用程序用户仍然可以用鼠标操作控制,但没有键盘界面。 在本例中提供的图形部件是 TShape 。 Shape 部件位于 Component Palette 的 Additional 页。本例中的 Shape 部件有所...
标签: Delphi
  Delphi 除了支持使用可视化部件所见即所得地建立应用程序外,还支持为开发应用而设计自己的部件。 在本章中将阐述如何为 Delphi 应用程序编写部件。这一章将达到两个目的: ● 教你如何自定义部件 ● 使你的部件成为 Delphi 环境的有机组合部分 19.1 Delphi 部件原理 19.1.1 什么是部件...
标签: Delphi
  19.2.2 Delphi 部件编程 19.2.2.1 创建属性 属性( Property )是部件中最特殊的部分,主要因为部件用户在设计时可以看见和操作它们,并且在交互过程中能立即得到返回结果。属性也很重要,因为如果将它们设计好后,将使用户更容易地使用,自己维护起来也很容易。 为了使你在部件中更好地使用属性,本部分将...
标签: Java JAVA基础
  问题的由来 前不久做了一个通过JSP生成PDF报表的小项目,算得上开了一次眼界。企业的一些信息通过网络形成Html报表,虽然IE可以直接打印显示在其中的内容,但是从界面上来看,如果直接将Html的显示结果打印出来,显得不太美观。如果将它转成PDF文件再打印,则打印效果会好很多。 iText简介 iText是一个开放源码的Java类...

经验教程

894

收藏

52
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部