P> Delphi 4のQREPORTコンポーネントを使用する場合、ユーザーは多くの場合、レポートを生成します。ここでは、デバイスガバナンスレポートを例として使用して、QREPORTコンポーネントとクエリコンポーネントを使用して設計して複数のデータテーブルからレポートを生成する方法を説明します。
1。使用されるデータベース
ここでは、D:/SBディレクトリに保存されている3つのFOXPROデータテーブル、DLBMK(機器カテゴリコード)、SBXHK(機器モデルと構成)、およびBMSBK(機器部門)を使用します。ライブラリ構造は次のとおりです。
(i)DLBMKフィールド名フィールドタイプ説明4 SBPZ C30デバイス構成5 SBSL N3デバイス数(III)BMSBKフィールド名フィールドタイプ説明コンピューター部門では、他の部門ではありません。
2?
このプログラムには、MainForm MainformとReport Form Repformの2つのフォームがあります。 MainForm MainFormには2つのTbutton部品があり、設定は次のとおりです。
部品プロパティと属性値
previewbtn:tbuttonキャプション:プレビュー
printbtn:tbuttonキャプション:印刷レポートフォームのコンポーネントとプロパティは、次のように設定されています。
部品プロパティと属性値
query1:tquery databasename:d:/sb
アクティブ:真
QREP1:Tquickrep Dataset:query1
TitleBand1:tqrband bandtype:rbtitle
headband1:tqrband bandtype:rbcolumnheader
drawleft:true
ドローライト:真
ドロートップ:本当です
DrawBottom:本当です
詳細band1:tqrband bandtype:rbdetail
drawleft:true
ドローライト:真
ドロートップ:本当です
DrawBottom:本当です
ChildBand1:tqrchildband parentband:detailband1
drawleft:true
ドローライト:真
ドロートップ:本当です
DrawBottom:本当です
TitleLabel:tqrlabelキャプション:デバイス統計テーブル
dlmclabel:tqrlabelキャプション:カテゴリ
sbxhlabel:tqrlabelキャプション:モデル
SBPZLABEL:TQRLABELキャプション:構成
sbsllabel:tqrlabelキャプション:数量
dlmcdbtext:tqrdbtextデータセット:query1
データフィールド:DLMC
sbxhdbtext:tqrdbtextデータセット:query1
データフィールド:SBXH
sbpzdbtext:tqrdbtextデータセット:query1
データフィールド:SBPZ
sbsldbtext:tqrdbtextデータセット:query1
データフィールド:SBSL
shape1~9:tqrshape shape:qrsvertline
上:0
幅:1
Query1のSQLプロパティは次のように設定されています。
SELECT A.DLBH、A.DLMC、B.SBXH、B.SBPZ、B.SBSL
dlbmk a、sbxhk bから
ここで、a.dlbh = b.dlbhおよびb.xhbmがありません
(BMSBKからXHBMを選択しますWHERE TRIM(BMMC)$#@60; $#@62; 'Computer Department')
A.DLBHによる注文。テーブルの境界線と水平線を印刷するために、いくつかのTQRBANDコンポーネントのDrawleft、Drawright、Drawtop、およびDrawbottom属性値をTrueに設定します。 TQRShapeコンポーネントは、テーブルの垂直線を印刷するために使用されます。 dlmcdbtextはdetailband1に配置され、他のいくつかのtqrdbtextコンポーネントはchildband1に配置され、shape1〜3はheadband1に配置され、shape4〜6はdetailband1に配置され、shape7〜9はchildband1に配置されます。
3.プログラムにコードを追加します
1。 Mainform Procedure Tmainform.previewBtnclick(送信者:tobject)の2つのボタンイベント
始める
repform.qrep1.preview;
終わり;
手順tmainformprintbtnclick(sender:tobject)
始める
repform.qrep1.print;
終わり;
2。 headband1、detailband1、およびchildband1のプリントイベントはprocessedure trepform.headband1beforeprint(sender:tqrcustomband; var printband:boolean)です。
始める
shape1.height:= headband1.height;
shape2.height:= headband1.height;
shape3.height:= headband1.height;
終わり;
手順TREPFORM.DETAILBAND1BEFOREPRINT(SENDER:TQRCUSTOMBAND; var PrintBand:boolean)
始める
printband:= bh $#@60; query1 ['dlbh'];
PrintBandの場合
始める
bh:= query1 ['dlbh'];
shape4.height:= detailband1.height;
shape5.height:= detailband1.height;
shape6.height:= detailband1.height;
終わり
終わり;
手順trepform.childband1beforeprint(sender:tqrcustomband; var printband:boolean)
始める
shape7.height:= childband1.height;
shape8.height:= childband1.height;
shape9.height:= childband1.height;
終わり;
BHは、変数定義セクションで定義する必要があります。VARBH:SHORTINT = 0;
いくつかのTQRShape部品の高さはTQRBAND部品と一致しており、垂直線をきれいに印刷します。設計段階でTQRBANDコンポーネントの高さが調整されている場合、垂直線の破損や過度の長さはありません。
詳細なband1の前のプリントイベントでprintbandで制御されている場合、各デバイスの主要なカテゴリ名は、各モデルに対応する主要なカテゴリ名ではなく、1回だけ印刷できます。 DLBHフィールドの値は0より大きいため、BHの初期値は0に設定されているため、最初の主要なクラス名が印刷されるように、レコードのDLBHフィールドの値とは異なります。 。これにより、複数のデータテーブルからデータを抽出し、テーブルラインがあるデータレポートが生成されます。
注:この例のプロジェクトファイルはsbgl.dprで、元のプログラムファイルはmain.pasおよびsbrep.pasです。 d:/sbディレクトリ。