P> Los usuarios a menudo generan informes al usar aplicaciones de base de datos. Aquí, utilizamos un informe de gobernanza de dispositivos como ejemplo para ilustrar cómo usar el componente QREPort y el componente de consulta para diseñar para generar informes de múltiples tablas de datos.
1. Base de datos utilizada
Aquí utilizamos tres tablas de datos FoxPro, DLBMK (código de categoría de equipo), SBXHK (modelo y configuración de equipos) y BMSBK (departamento de equipos), que se almacenan en el directorio D:/SB. La estructura de la biblioteca es la siguiente:
(I) DLBMK Nombre de campo Tipo de campo Explicación 1 DLBH N3 Categoría de dispositivo Número 2 DLMC C20 Nombre de categoría de dispositivo (ii) Nombre de campo SBXHK Tipo de campo Explicación 1 XHBM N3 Modelo de dispositivo Código 2 DLBH N3 Campo DLBH en el mismo DLBMK 3 SBXH C30 Modelo de dispositivo C30 4 SBPZ C30 Configuración del dispositivo 5 SBSL N3 Número de dispositivos (iii) BMSBK Nombre de campo Tipo de campo Explicación 1 BMMC C20 Nombre del departamento 2 XHBM N3 XHBM Campos en SBXHK 3 Sl N3 Cantidad Use estas tres tablas de datos para generar un modelo de dispositivo que solo está disponible en el departamento de computadoras pero no en otros departamentos.
2?
Hay dos formularios en el programa: Mainform MainForm y el formulario de informe Repform. Hay dos piezas de Tbutton en la formación principal principal, y las configuraciones son las siguientes:
Propiedades y valores de atributos
PreviewBtn: Tbutton Titection: Vista previa
PrintBtn: TBUTTON STETTion: Los componentes y las propiedades en el informe de impresión RepForm se establecen de la siguiente manera:
Propiedades y valores de atributos
QUERY1: TQuery DataBASEname: D:/SB
Activo: verdadero
QREP1: TQUICKREP DATASET: QUERY1
TitleBand1: TQRBAND BANDPE: RBTITLE
Diadema1: TQRBAND BANDPE: RBColumnheader
Sbrainleft: verdadero
Drawright: verdadero
Drawtop: verdadero
Drawbottom: Verdadero
DetalleBand1: TQRBand BandType: RBDetail
Sbrainleft: verdadero
Drawright: verdadero
Drawtop: verdadero
Drawbottom: Verdadero
Childband1: TQRCHILDBAND PARTARBAND: DISPLED1
Sbrainleft: verdadero
Drawright: verdadero
Drawtop: verdadero
Drawbottom: Verdadero
Titlelabel: TQRLABEL TEXT: Tabla de estadísticas del dispositivo
DLMCLABEL: TQRLABEL TEXTO: Categoría
SBXHLABEL: TQRLABEL STECTION: Modelo
SBPZLABEL: TQRLABEL STECTION: Configuración
SBSLLABEL: TQRLABEL STECTION: Cantidad
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 Forma: Qrsvertline
Arriba: 0
Ancho: 1
La propiedad SQL de Query1 está establecida en:
Seleccionar A.DLBH, A.DLMC, B.SBXH, B.SBPZ, B.SBSL
de dlbmk a, sbxhk b
donde a.dlbh = b.dlbh y b.xhbm no en
(Seleccione XHBM de BMSBK donde Trim (BMMC) $#@60; $#@62; 'Departamento de informática')
Ordene por A.DLBH Establezca los valores de atributo de Abrazeft, Drawright, Drawtop y Drawbottom de varios componentes de TQRBand en verdadero, para imprimir el borde de la tabla y las líneas horizontales. El componente TQRSHAPE se usa para imprimir las líneas verticales de la tabla. DLMCDBText se coloca en DetellBand1, varios otros componentes de TQRDBText se colocan en Childband1, la forma1 ~ 3 se coloca en la diadema1, la forma4 ~ 6 se coloca en DetellBand1, la forma7 ~ 9 se coloca en ChildBand1.
3. Agregue código al programa
1. Eventos de dos botones en el procedimiento de Mainform tmainform.PreviewBtnClick (remitente: tobject)
Comenzar
reptor.qrep1.preview;
fin;
Procedimiento tmainFormPrintBtnClick (remitente: tobject)
Comenzar
reptor.qrep1.print;
fin;
2. Los eventos antes de la banda de cabeza1, DetilleBand1 y Childband1 son procesados trePForm.headband1beforePrint (remitente: tqrcustomband; var de la banda de impresión: boolean)
Comenzar
Shape1.Height: = Headband1.Height;
Forma2.Height: = diadema1.Height;
Shape3.Height: = Headband1.Height;
Fin;
procedimiento trePForm.detailband1beforePrint (remitente: tqrcustomband; var de la banda de impresión: boolean)
Comenzar
PRINTBAND: = BH $#@60;
Si la banda impresa entonces
Comenzar
bh: = query1 ['dlbh'];
Shape4.Height: = DetellBand1.Height;
Shape5.Height: = DetellBand1.Height;
Forma6.Height: = DetellBand1.Height;
fin
fin;
procedimiento trePForm.childBand1BeforePrint (remitente: tqrcustomband; var vAR impresión: boolean)
Comenzar
Shape7.Height: = ChildBand1.Height;
Shape8.Height: = ChildBand1.Height;
Shape9.Height: = ChildBand1.Height;
Fin;
BH debe definirse en la sección Definición de variable: Var BH: Shortint = 0;
La altura de varias piezas de TQRSHAPE es consistente con las partes de la banda TQrrand, lo que hace que las líneas verticales se impriman perfectamente. Si la altura del componente TQRBand se ajusta durante la etapa de diseño, no habrá rotura de línea vertical o longitud excesiva.
Controlado con banda impresa en el evento de DetellBand1 de BeforePrint, el nombre de categoría principal de cada dispositivo solo se puede imprimir una vez, en lugar del nombre de categoría principal correspondiente a cada modelo. Debido a que los valores del campo DLBH son mayores que 0, el valor inicial de BH se establece en 0 para que sea diferente de los valores del campo DLBH de cualquier registro para garantizar que el primer nombre de clase principal se imprima . Esto genera un informe de datos que extrae datos de múltiples tablas de datos y tiene líneas de tabla.
Nota: El archivo del proyecto en este ejemplo es SBGL.DPR, y los archivos de programa originales son main.pas y sbrep.pas. En el directorio D:/SB.