P> Les utilisateurs génèrent souvent des rapports lors de l'utilisation d'applications de base de données. Ici, nous utilisons un rapport de gouvernance de périphériques comme exemple pour illustrer comment utiliser le composant QReport et le composant de requête pour concevoir pour générer des rapports à partir de plusieurs tables de données.
1. Base de données utilisée
Ici, nous utilisons trois tables de données FOXPRO, DLBMK (code de catégorie d'équipement), SBXHK (modèle d'équipement et configuration) et BMSBK (Département d'équipement), qui sont stockés dans le répertoire D: / SB. La structure de la bibliothèque est la suivante:
(I) DLBMK Nom de champ Type de champ Explication 1 DLBH N3 Catégorie de périphérique Numéro 2 DLMC C20 Nom de catégorie de périphérique (II) Nom de champ SBXHK Type de champ Explication 1 XHBM N3 Code de modèle de périphérique 2 DLBH N3 Fiel 4 SBPZ C30 Configuration du périphérique 5 SBSL N3 Nombre de périphériques (III) BMSBK Nom de champ Type de champ Explication 1 BMMC C20 Nom du département 2 XHBM N3 Fields XHBM dans SBXHK 3 SL N3 Quantité Utilisez ces trois tables de données pour générer un modèle de périphérique qui n'est disponible que disponible dans le service informatique mais pas dans d'autres départements.
2?
Il existe deux formulaires dans le programme: Mainform Mainform et Report Form Reform. Il y a deux pièces TBUTTON dans la mainforme Mainform, et les paramètres sont les suivants:
Propriétés des pièces et valeurs d'attribut
PreviewBtn: TBUTTON LÉGENDE: Aperçu
PrintBtn: TBUTTON LÉGE: Les composants et les propriétés du formulaire de rapport d'impression sont définis comme suit:
Propriétés des pièces et valeurs d'attribut
Query1: TQuery Databasename: D: / SB
Actif: vrai
QREP1: ensemble de données TQUICKREP: Query1
TitleBand1: Tqrband BandType: RBtitle
Bandeau 1: tqrband bandType: rbColumnHeader
DrawLeft: vrai
Vérification: vrai
Drawtop: vrai
Drawbottom: vrai
Detailband1: Tqrband BandType: RBDETAIL
DrawLeft: vrai
Vérification: vrai
Drawtop: vrai
Drawbottom: vrai
ChildBand1: TQrChildBand Parentband: Detailband1
DrawLeft: vrai
Vérification: vrai
Drawtop: vrai
Drawbottom: vrai
TitleLabel: TQrLabel Légende: Tableau de statistiques de l'appareil
DLMCLABEL: TQrLabel Légende: Catégorie
SBXHLABEL: TQrLabel Légende: Modèle
SBPZLABEL: TQrLabel Légende: Configuration
SBSLLABEL: TQrLabel Légende: Quantité
DLMCDBText: TQRDBText DataSet: Query1
Datafield: DLMC
SBXHDBText: TQRDBText DataSet: Query1
Datafield: SBXH
Sbpzdbtext: ensemble de données tqrdbtext: Query1
Datafield: SBPZ
Sbsldbtext: ensemble de données tqrdbtext: Query1
Datafield: SBSL
Shape1 ~ 9: TQRShape Forme: QRSvertline
En haut: 0
Largeur: 1
La propriété SQL de Query1 est définie pour:
Sélectionnez A.DLBH, A.DLMC, B.SBXH, B.SBPZ, B.SBSL
De DLBMK A, SBXHK B
où a.dlbh = b.dlbh et b.xhbm pas dans
(Sélectionnez XHBM dans BMSBK où TRIM (BMMC) $ # @ 60; $ # @ 62; «service informatique»)
L'ordre par a.dlbh définit les valeurs d'attribut DrawLeffft, Drawright, Drawtop et Drawbottom de plusieurs composants TQRBand sur True, afin d'imprimer la bordure de la table et les lignes horizontales. Le composant TQRShape est utilisé pour imprimer les lignes verticales de la table. DLMCDBText est placé sur Detailband1, plusieurs autres composants TQRDBText sont placés sur ChildBand1, Shape1 ~ 3 est placé sur le bandeau1, la forme4 ~ 6 est placé sur Detailband1, Shape7 ~ 9 est placé sur Childband1.
3. Ajouter du code au programme
1 et 1 Deux événements de bouton dans la procédure MainForm tmainForm.PreViewBtnClick (expéditeur: tobject)
Commencer
reform.qrep1.preview;
fin;
Procédure tmainformprintbtnclick (expéditeur: tobject)
Commencer
reform.qrep1.print;
fin;
2 Avantprint les événements de Bandband1, DetailBand1 et ChildBand1 sont Procedure Trepform.headband1Beforeprint (expéditeur: tqrcustomband; var printband: boolean)
Commencer
Forme1.height: = bandeau1.height;
Shape2.Height: = bandeau1.Height;
Shape3.Height: = bandeau1.Height;
Fin;
procédure trepform.detailband1Beforeprint (expéditeur: tqrcustomband; var printband: boolean)
Commencer
Printband: = bh $ # @ 60; $ # @ 62; query1 ['dlbh'];
Si printband alors
Commencer
bh: = query1 ['dlbh'];
Shape4.Height: = Detailband1.Height;
Shape5.Height: = Detailband1.Height;
Shape6.Height: = Detailband1.Height;
fin
fin;
procédure trepform.childband1Beforeprint (expéditeur: tqrcustomband; var printband: boolean)
Commencer
Shape7.Height: = Childband1.Height;
Shape8.Height: = ChildBand1.Height;
Shape9.Height: = ChildBand1.Height;
Fin;
BH doit être défini dans la section de définition de la variable: var bh: shortInt = 0;
La hauteur de plusieurs pièces TQRShape est cohérente avec les pièces TQRBand, ce qui rend les lignes verticales soigneusement imprimées. Si la hauteur du composant TQRBand est ajustée pendant l'étape de conception, il n'y aura pas de rupture de ligne verticale ou de longueur excessive.
Contrôlé avec Printband dans l'événement avant Imprime de DetailBand1, le nom de catégorie principale de chaque appareil ne peut être imprimé qu'une seule fois, plutôt que le nom de catégorie majeur correspondant à chaque modèle. Étant donné que les valeurs du champ DLBH sont supérieures à 0, la valeur initiale de BH est définie sur 0 de sorte qu'elle est différente des valeurs du champ DLBH de tout enregistrement pour s'assurer que le premier nom de classe majeur est imprimé . Cela génère un rapport de données qui extrait les données de plusieurs tables de données et dispose de lignes de table.
Remarque: Le fichier de projet dans cet exemple est SBGL.DPR, et les fichiers du programme d'origine sont main.pas et sbrep.pas. Dans le répertoire D: / SB.