麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

用Delphi4的QReport部件生成報表

2019-11-17 05:07:02
字體:
來源:轉載
供稿:網友
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目錄下。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 日本成人在线播放 | 美女黄网站免费观看 | 97超碰资源站 | 成人情欲视频在线看免费 | 亚洲欧美国产视频 | 中文有码一区二区 | 视频h在线 | 欧美视频一区二区三区四区 | 史上最强炼体老祖动漫在线观看 | 日本va在线观看 | 国产午夜精品久久久久婷 | 亚洲一区二区三区四区精品 | 久久国产91 | 欧美日韩一区二区综合 | 亚洲性生活免费视频 | 毛片视频大全 | 91精品国产福利尤物免费 | 久草在线手机观看 | 色视频在线播放 | 在线中文字幕播放 | 黄色片网页 | 久久精品a一级国产免视看成人 | 一级黄色片在线看 | 欧美高清在线精品一区二区不卡 | 国产妞干网 | 一级看片免费视频 | 欧美一级特黄aaaaaa在线看首页 | 国产成人高清在线 | 久色亚洲 | 一夜新娘第三季免费观看 | av不卡免费观看 | 亚洲精品91 | 在线成人免费观看视频 | 午夜伦情电午夜伦情电影 | 免费国产人成网站 | 色中色激情影院 | 久久艹一区 | 羞羞视频入口 | 久久亚洲第一 | 成人免费看视频 | 亚洲成人免费视频在线 |