PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO CRIAÇÃO DE RELATÓRIOS EM DELPHI Relatórios são tão importantes quanto as consultas, com a vantagem de poder imprimir os valores armazenados nos Bancos de Dados e sua criação é bem simples. Primeiramente precisamos ter uma aplicação Delphi conectada a uma base de dados. Esta base de dados também será conectada ao relatório e isso pode ser feito tanto com um objeto Table quanto com um objeto Query (ambos na Paleta BDE). A diferença é que, com um objeto Table este relatório fica estático, ou seja, não permite filtro de informações, enquanto que um relatório conectado a uma Query fica dinâmico, permitindo que se imprima todas as informações ou se crie parâmetros para relatórios personalizados. Pode-se criar um DataModule exclusivo para estas operações ou utilizar um já configurado. zero. Para este exemplo, começaremos uma aplicação simples, do Criaremos um banco de dados chamados BDINFO, com uma tabela TBDADOS, esta com os atributos a seguir:
CODIGO (Int, chave primária) NOME (VarChar, 50) CIDADE (VarChar, 50) EMAIL (VarChar, 50) Para adiantar o trabalho, preencha a tabela após a criação com alguns dados. SUGESTÃO: Pelo menos 5 dados com cidades diferentes, podendo repetir uma ou duas. O campo CIDADE servirá para filtrarmos o relatório pela cidade onde o cadastrado mora. Faremos a conexão via ODBC, em Painel de Controle, Ferramentas Administrativas, Fonte de Dados (ODBC) como já mostrado anteriormente. No Delphi, configuramos a conexão com um DataModule (DMRELATORIO). Neste DataModule colocaremos uma Table (TBRELAT), uma Query (QRYRELAT) - na paleta BDE - e um DataSource (DSRELAT) - paleta Data Access. Configure os objetos: TBRELAT propriedades DataBasename, TableName e Active. DSRELAT propriedade DataSet. QRYRELAT propriedades DataSource, DatabaseName, SQL (SELECT * FROM TBDADOS) e Active. Altere os nomes do objetos:
Form1= FRMDADOS DataModule= DMRELATORIO E salve: Unit 1 (O formulário) U_DADOS Unit2 (O DataModule) U_DM Project1 (O projeto) P_RELATORIO Apenas para efeito de teste, configure o Fileds Editor da TBRELAT e arraste os campos para o formulário. Coloque um DBNavigator no formulário e faça sua conexão (DataSource). Sua função aqui será apenas a de navegar pelos registros, para que possamos fazer a filtragem, pegando a cidade do registro atual. Adicione um GroupBox e dentro deste dois botões, que serão responsáveis por gerar os relatórios. Configure-os como: GroupBox: Name - GRBBOTOES Caption Gerar Relatórios Button1: Name BTNGERAL Caption Relatório Geral Button2: Name BTNFILTRO Caption Relatório Filtrado Seu formulário deve estar semelhante ao mostrado a seguir:
Adicione um novo formulário, neste será configurado o relatório. Altere suas propriedades Name:FRMRELAT e Caption: RELATÓRIOS. E salve a Unit como U_RELAT. Component, Install Packages, Add. Selecionar em C:\Arquivos de Programas\Borland\Delphi7\Bin os arquivos: dclqrt70.bpl e dcltqr70.bpl e clicar em Ok. Verifique se surgiu na paleta de componentes a opção QReport (será a última). Procure o componente QuickRep e adicione ao formulário. Aparecerá uma caixa branca dentro do formulário, semelhante a uma folha em branco. Precisamos formatar o relatório e definir suas bandas. Clique com o botão direito e selecione a opção Report Settings. Na janela seguinte, em Bands, marque todas as opções menos Summary. E se desejar o relatório impresso em Paisagem, altere em Paper size a opção Portrait (Retrato) para Landscape (Paisagem). Clique em Ok. Seu formulário de relatório estará como na figura a seguir:
As divisões (bandas) são: Page Header Cabeçalho da página (Aqui vai o timbre e os dados da empresa) Title Título (Aqui é o título do relatório. Quais informações estão impressas) Column Header Cabeçalho da Coluna (Aqui vão os nomes dos campos impressos) Detail Detalhe (Aqui vão as informações cadastradas) Page Footer Rodapé (Aqui colocamos outras informações, como número da página) IMPORTANTE!
O formulário FRMDADOS precisará reconhecer o formulário de relatório FRMRELAT (U_RELAT), pois este será criado através do cliques de botões do formulário de dados. Para isso, precisamos configurar o Use Unit e adicionar a U_RELAT. O formulário de relatórios, por sua vez, deve reconhecer o DataModule, para que seja criado o relatório através da query QRYRELAT, que está neste DataModule. Aqui também fazemos o comando File, Use Unit e adicionamos o U_DM. Devemos agora conectar o Quick Report ao componente Query do DataModule. Altere a propriedade DataSet (aparecerão as opções de Query e Tabela. Como queremos um relatório dinâmico, selecionaremos a Query) e mudamos a propriedade Name para QRPRELAT. Para finalizar a configuração do relatório, vamos configurar as Bandas do mesmo. Começando pelo Cabeçalho da Página. Page Header Clique na parte Page Header. Adicione um QRLabel (paleta QReport) e em Caption digite o conteúdo referente ao timbre da Empresa, como seu nome e endereço. Seria uma QRLabel para o nome e outra para o endereço. A formatação da fonte é livre e o espaço pode ser aumentado, usando as bordas do Page Header. Title Depois selecionamos o Title e criamos o título do relatório, com outra QRLabel. Adicionaremos no Title também a data e a hora, com um QRSysData e mudamos a propriedade Data (Dados) para qrsdatetime.
Column Header Selecionamos agora o espaço para os cabeçalhos de colunas e adicionamos várias QRLabel, uma para cada campo da tabela que eu queira mostrar. Não é abrigatório adicionar para todos os campos. Neste exemplo, colocaremos uma QRLabel para cada, sendo: Código, Nome, Cidade, E-mail. Detail Aqui colocamos as informações do banco correspondentes ao Column Header. Não usaremos aqui QRLabel e sim QRDBText, pois estas puxam as informações do Banco de Dados. A QRDBText deve ser conectada com as propriedades DataSet (aparecerão as opções de Query e Tabela. Como queremos um relatório dinâmico, selecionaremos a Query) e DataField (o campo desejado). Page Footer Selecione agora o rodapé e adicione uma QRSysData. Mude a propriedade Data para Page Number. Agora seu relatório deve ter aparência semelhante a mostrada a seguir:
Agora, basta codificar os botões que geram o relatório. BOTÃO PARA RALATÓRIO GERAL: procedure TFRMDADOS.BTNGERALClick(Sender: TObject); begin FRMRELAT. QRPRELAT.Preview; end; O comando FRMRELAT. QRPRELAT.Preview; aciona o relatório geral, que está conectado à Query. Detalhe: Só funcionará se anteriormente, como passado neste tutorial, foi feito o comando Use Unit, para que o formulário Inicial reconheça o de relatório.
Repare que o resultado é um relatório com todos os registros cadastrados na tabela. BOTÃO PARA RELATÓRIO FILTRADO: procedure TFRMDADOS.BTNFILTROClick(Sender: TObject); var CIDADE:string; begin CIDADE:=DBEdit3.Text; DMRELATORIO.QRYRELAT.Close; DMRELATORIO.QRYRELAT.SQL.Clear; DMRELATORIO.QRYRELAT.SQL.Add('select * from usuarios'); DMRELATORIO.QRYRELAT.SQL.Add('where usuario=' + QuotedStr(CIDADE) + ''); DMRELATORIO.QRYRELAT.Open; FRMRELAT. QRPRELAT.Preview; end; Neste caso, criamos uma variável CIDADE, que captura o valor da DBEdit3 (a Edit da cidade). Esta cidade capturada servirá para filtrar o relatório por este campo. Todos os comandos deste botão foram abordados e explicados anteriormente em nosso material sobre consultas. Repare que o resultado é um relatório que mostra todas as pessoas da mesma cidade. Um problema identificado é que, ao se criar um relatório filtrado, o relatório geral deixa de funcionar como deveria e se comporta como se estivéssemos filtrando.
Para resolver este problema, precisaremos fazer alterações no comando do botão para o relatório geral. ALTERAÇÃO NO BOTÃO PARA RALATÓRIO GERAL: procedure TFRMDADOS.BTNGERALClick(Sender: TObject); begin DMRELATORIO.QRYRELAT.Close; DMRELATORIO.QRYRELAT.SQL.Clear; DMRELATORIO.QRYRELAT.SQL.Add('select * from usuarios'); DMRELATORIO.QRYRELAT.Open; FRMRELAT. QRPRELAT.Preview; end; O código fica muito semelhante ao utlizado no relatório filtrado, com exceção do comando SQL que pede a separação pela cidade. OBSERVAÇÕES FINAIS: Poderíamos ainda utilizar outros recursos, como combobox, radio buttons, entre outros e criar um formulários cheio de opções para a criação dos relatórios. Fica como sugestão de melhorias para este projeto.