P> Benutzer generieren häufig Berichte, wenn Sie Datenbankanwendungen verwenden. Hier verwenden wir einen Geräte -Governance -Bericht als Beispiel, um zu veranschaulichen, wie die QReport -Komponente und die Abfragekomponente zum Design verwendet werden, um Berichte aus mehreren Datentabellen zu generieren.
1. Datenbank verwendet
Hier verwenden wir drei FOXPRO -Datentabellen, DLBMK (Gerätekategorie -Code), SBXHK (Gerätemodell und Konfiguration) und BMSBK (Ausrüstungsabteilung), die im D:/SB -Verzeichnis gespeichert sind. Die Bibliotheksstruktur lautet wie folgt:
(I) DLBMK -Feldname Feldtyp Erläuterung 1 DLBH N3 Gerätekategorie Nummer 2 DLMC C20 -Gerätekategorie Name (ii) SBXHK -Feldname Feldtyp Erläuterung 1 XHBM N3 Gerätemodellcode 2 DLBH N3 DLBH -Feld im selben DLBMK 3 SBXH C30 -Gerätemodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodellmodell -Modell 4 SBPZ C30 -Gerätekonfiguration 5 SBSL N3 Anzahl der Geräte (iii) BMSBK -Feldname Feldname Erläuterung 1 BMMC C20 Abteilungsname 2 XHBM N3 XHBM -Felder in SBXHK 3 SL N3 Menge Verwenden Sie diese drei Datentabellen, um ein Gerätemodell zu generieren, das nur verfügbar ist, das nur verfügbar ist, das nur verfügbar ist, das nur verfügbar ist, das nur verfügbar ist, das nur verfügbar ist, das nur verfügbar ist, das nur verfügbar ist in der Computerabteilung, aber nicht in anderen Abteilungen.
2?
Es gibt zwei Formulare im Programm: MainForm Mainform und Report Form Reporm. In der Mainform Mainform befinden sich zwei Tbutton -Teile, und die Einstellungen sind wie folgt:
Teileigenschaften und Attributwerte
Vorschau: TBUTTON CITTION: Vorschau
PRINTBTN: TBUTTON CITTION: Die Komponenten und Eigenschaften in der Reporation des Druckberichts sind wie folgt festgelegt:
Teileigenschaften und Attributwerte
Query1: TQuery DatabaseName: d:/sb
Aktiv: Richtig
QREP1: TQUICKREP -Datensatz: Abfrage1
Titelband1: Tqrband BandType: RBTITLE
Stadband1: Tqrband BandType: rbcolumnHeader
Drasing: Richtig
Drawright: Richtig
Drawtop: Richtig
Drawbottom: Richtig
DetailBand1: TQRband BandType: RBDetail
Drasing: Richtig
Drawright: Richtig
Drawtop: Richtig
Drawbottom: Richtig
Childband1: Tqrchildband Parentband: Detailband1
Drasing: Richtig
Drawright: Richtig
Drawtop: Richtig
Drawbottom: Richtig
Titlelabel: TQRLabel Caption: Gerätestatistiktabelle
Dlmclabel: tqrlabel caption: kategorie
Sbxhlabel: tqrlabel caption: modell
Sbpzlabel: tqrlabel caption: Konfiguration
SbLLlabel: tqrlabel caption: Menge
DLMCDBTEXT: TQRDBTEXT -Datensatz: Query1
DataField: DLMC
SBXHDBTEXT: TQRDBTEXT -Datensatz: Query1
DataField: SBXH
SBPZDBTEXT: TQRDBTEXT -Datensatz: Query1
DataField: SBPZ
SBSLDBTEXT: TQRDBTExt -Datensatz: Abfrage1
DataField: SBSL
SHAPE1 ~ 9: TQRSHAPE -Form: qrsvertline
Oben: 0
Breite: 1
Die SQL -Eigenschaft von Query1 ist festgelegt auf:
Select A.Dlbh, A.Dlmc, B.Sbxh, B.Sbpz, B.Sbsl
von dlbmk a, sbxhk b
wo a.dlbh = b.dlbh und b.xhbm nicht in
(Wählen Sie XHBM von BMSBK WHERE TRIM (BMMC) $@60; $#@62; 'Computerabteilung')
Bestellen Sie durch A.DLBH die Drawleft-, Drawright-, Dractop- und Drawbottom -Attributwerte mehrerer TQRBand -Komponenten auf True, um die Tabellenrand- und horizontale Linien zu drucken. Die TQRSHape -Komponente wird verwendet, um die vertikalen Linien der Tabelle auszudrucken. DLMCDBTEXT wird auf Detailband gesetzt.
3. Fügen Sie dem Programm Code hinzu
1. Zwei Schaltflächenereignisse in MainForm -Prozedur tmainForm.PreviewBtnclick (Absender: Tobject)
Beginnen
reporm.qrep1.preview;
Ende;
Prozedur TMainFormprintBtnClick (Absender: Tobject)
Beginnen
reporm.qrep1.print;
Ende;
2. Vorabdruckereignisse von Stadband1, DetailBand1 und Childband1 werden verarbeitet.
Beginnen
Shape1.Height: = Stadband1.Height;
SHAPE2.Height: = Stirnband1.Height;
Shape3.Height: = Stirnband1.Height;
Ende;
Prozedur Trepform.DetailBand1BeforePrint (Absender: tqrcustomBand; var printband: boolean)
Beginnen
Printband: = bh $#@60;
Wenn Druckband dann
Beginnen
bh: = query1 ['dlbh'];
Shape4.Height: = detailBand1.Height;
Shape5.height: = detailBand1.Height;
Shape6.Height: = detailBand1.Height;
Ende
Ende;
Prozedur Trepform.ChildBand1BeforePrint (Absender: TqrcustomBand; var printband: boolean)
Beginnen
Shape7.height: = kindband1.height;
SHAPE8.HEITH: = MILDBAND1.HEIT;
SHAPE9.HEIT: = MILDBAND1.HICHTH;
Ende;
BH sollte im Abschnitt Variable Definition definiert werden: var bh: Shortint = 0;
Die Höhe mehrerer TQRShape -Teile stimmt mit den Tqrband -Teilen überein, sodass die vertikalen Linien ordentlich gedruckt werden. Wenn die Höhe der TQRband -Komponente während der Entwurfsphase eingestellt wird, gibt es keinen vertikalen Linienbruch oder eine übermäßige Länge.
Der Hauptkategorienname jedes Geräts wird im Vorabdruck -Ereignis von DetailBand1 mit Printband gesteuert und kann nur einmal gedruckt werden, anstatt der Hauptname der Hauptkategorien, der jedem Modell entspricht. Da die Werte des DLBH -Feldes größer als 0 sind, wird der Anfangswert von BH auf 0 gesetzt, so dass es sich von den Werten des DLBH -Felds eines beliebigen Datensatzes unterscheidet, um sicherzustellen, dass der erste große Klassenname gedruckt wird . Dies generiert einen Datenbericht, in dem Daten aus mehreren Datentabellen extrahiert werden und Tabellenzeilen enthält.
Hinweis: Die Projektdatei in diesem Beispiel ist sbgl.dpr, und die ursprünglichen Programmdateien sind main.pas und sbrep.pas. im Verzeichnis d:/sb.