P> Os usuários geralmente geram relatórios ao usar aplicativos de banco de dados. Aqui, usamos um relatório de governança do dispositivo como exemplo para ilustrar como usar o componente QReport e o componente de consulta para projetar para gerar relatórios de várias tabelas de dados.
1. Banco de dados usado
Aqui, usamos três tabelas de dados da FoxPro, DLBMK (Código da Categoria de Equipamento), SBXHK (Modelo e Configuração do Equipamento) e BMSBK (Departamento de Equipamento), que são armazenados no diretório d:/SB. A estrutura da biblioteca é a seguinte:
(I) DLBMK Nome do campo Tipo de campo Tipo Explicação 1 Dlbh n3 Categoria de dispositivo Número 2 DLMC C20 Nome da categoria do dispositivo (ii) SBXHK Nome do campo Tipo de campo Explicação 1 XHBM N3 Código do modelo 2 DLBH N3 DLBH CAMPO 4 SBPZ C30 Configuração do dispositivo 5 SBSL N3 Número de dispositivos (III) BMSBK Nome do campo Tipo de campo Explicação 1 BMMC C20 Nome do departamento 2 XHBM N3 XHBM CAMPOS NO SBXHK 3 SL N3 Use essas três tabelas de dados para gerar um modelo de dispositivo que está disponível apenas disponível no departamento de computadores, mas não em outros departamentos.
2?
Existem dois formulários no programa: Mainform Mainform e Relatório Formulário Repform. Existem duas peças de Tbutton na forma principal principal, e as configurações são as seguintes:
Propriedades de peça e valores de atributo
Previewbtn: Tbutton Legenda: Visualizar
Printbtn: Tbutton Legend: Os componentes e propriedades no formulário Relatório de Impressão Repform são definidos da seguinte forma:
Propriedades de peça e valores de atributo
Query1: TQUERY DATABASENAME: D:/SB
Ativo: true
Qrep1: conjunto de dados TquickRep: Query1
Titleband1: TQRband Bandtype: RBTITLE
Faixa de cabeça1: TQRBand Bandtype: RBColumnHeader
Drawleft: verdadeiro
Drawright: verdadeiro
Drawtop: Verdadeiro
Drawbottom: verdadeiro
Detailband1: TQRband Bandtype: RBDetail
Drawleft: verdadeiro
Drawright: verdadeiro
Drawtop: Verdadeiro
Drawbottom: verdadeiro
Childband1: TQRCHILDBAND PARABRANDBAND: Detalhenda1
Drawleft: verdadeiro
Drawright: verdadeiro
Drawtop: Verdadeiro
Drawbottom: verdadeiro
TitleLabel: Tqrlabel Legenda: Tabela de estatísticas do dispositivo
Dlmclabel: tqrlabel Legenda: categoria
Sbxhlabel: tqrlabel Legenda: modelo
Sbpzlabel: tqrlabel Legenda: configuração
Sbsllabel: Tqrlabel Legenda: Quantidade
DLMCDBTEXT: DATASET TQRDBTEXT: Query1
Datafield: DLMC
SBXHDBTEXT: DATASET TQRDBTEXT: Query1
DataField: SBXH
SBPZDBTEXT: DATASET TQRDBTEXT: Query1
DataField: SBPZ
SBSLDBText: DataSet TQRDBTEXT: Query1
Datafield: SBSL
Shape1 ~ 9: TQRShape Shape: Qrsvertline
TOP: 0
Largura: 1
A propriedade SQL do Query1 está definida como:
Selecione A.DLBH, A.DLMC, B.SBXH, B.SBPZ, B.SBSL
de dlbmk a, sbxhk b
onde a.dlbh = b.dlbh e b.xhbm não em
(Selecione XHBM de BMSBK onde Trim (BMMC) $#@60; $#@62; 'Departamento de Computador')
Ordem por A.Dlbh Defina os valores de atributo Drawleft, Drawright, Drawtop e DrawBottom de vários componentes TQRBand como TRUE, a fim de imprimir a borda da tabela e as linhas horizontais. O componente TQRShape é usado para imprimir as linhas verticais da tabela. O DLMCDBTEXT é colocado no detalhend1, vários outros componentes TQRDBText são colocados no Childband1, Shape1 ~ 3 é colocado na faixa da cabeça1, o Shape4 ~ 6 é colocado no detalhend1, o Shape7 ~ 9 é colocado no Band1 Child1.
3. Adicione código ao programa
1. Eventos de dois botões no procedimento Mainform tmainform.PreviewBtnClick (remetente: Tobject)
Começar
repform.qrep1.preview;
fim;
procedimento tmainformPrintbtnClick (remetente: TObject)
Começar
Repform.qrep1.print;
fim;
2. Antes dos eventos da impressão de faixa para a cabeça1, detalhend1 e ChildBand1 são processados trepform.headband1beforeprint (remetente: tqrcustomband; var prindband: boolean)
Começar
Shape1.Height: = PARTEBABLE1.HEIXE;
Shape2.Height: = Band de cabeça1.Height;
Shape3.Height: = Band de cabeça1.Height;
Fim;
procedimento TrePorm.Detailband1Beforeprint (remetente: TQRCustomband; var Printband: boolean)
Começar
Printband: = bh $#@60;
Se printband, então
Começar
BH: = Query1 ['dlbh'];
Shape4.Height: = Detailband1.Height;
Shape5.Height: = Detailband1.Height;
Shape6.Height: = detalheband1.Height;
fim
fim;
Procedimento TrePform.Childband1Beforeprint (remetente: TQRCUSTOMBAND; VAR PrintBand: Boolean)
Começar
Shape7.Height: = Childband1.Height;
Shape8.Height: = ChildBand1.Height;
Shape9.Height: = ChildBand1.Height;
Fim;
BH deve ser definido na seção de definição da variável: var bh: shortInt = 0;
A altura de várias peças de TQRShape é consistente com as peças do TQRband, fazendo com que as linhas verticais imprimam bem. Se a altura do componente TQRBand for ajustada durante o estágio de projeto, não haverá quebra de linha vertical ou comprimento excessivo.
Controlado com a PrintBand no evento antes da impressão do detalhend1, o nome principal da categoria de cada dispositivo pode ser impresso apenas uma vez, em vez do nome principal da categoria correspondente a cada modelo. Como os valores do campo DLBH são maiores que 0, o valor inicial de BH é definido como 0 para que seja diferente dos valores do campo DLBH de qualquer registro para garantir que o primeiro nome de classe principal seja impresso . Isso gera um relatório de dados que extrai dados de várias tabelas de dados e possui linhas de tabela.
NOTA: O arquivo do projeto neste exemplo é SBGL.DPR, e os arquivos de programas originais são main.PAs e SBREP.PAS. No diretório d:/sb.