Вы находитесь на странице: 1из 0

www.etecfran.com.

br
Estrada do Governo, S/N, KM 42 Pouso Alegre Franco da Rocha So Paulo
CEP 07859-340 Tel.: (11) 4449-3115 Fax: (11) 4443-6110


ETEC DR. EMLIO HERNANDEZ AGUILAR

PROGRAMAO DE COMPUTADORES II
PROFESSOR RAFAEL BARRETO

CRIAO DE RELATRIOS EM DELPHI

Relatrios so to importantes quanto as consultas, com a
vantagem de poder imprimir os valores armazenados nos Bancos de
Dados e sua criao bem simples.

Primeiramente precisamos ter uma aplicao Delphi conectada
a uma base de dados. Esta base de dados tambm ser conectada ao
relatrio e isso pode ser feito tanto com um objeto Table quanto com
um objeto Query (ambos na Paleta BDE).
A diferena que, com um objeto Table este relatrio fica
esttico, ou seja, no permite filtro de informaes, enquanto que um
relatrio conectado a uma Query fica dinmico, permitindo que se
imprima todas as informaes ou se crie parmetros para relatrios
personalizados.
Pode-se criar um DataModule exclusivo para estas operaes ou
utilizar um j configurado.

Para este exemplo, comearemos uma aplicao simples, do
zero.

Criaremos um banco de dados chamados BDINFO, com uma
tabela TBDADOS, esta com os atributos a seguir:



www.etecfran.com.br
Estrada do Governo, S/N, KM 42 Pouso Alegre Franco da Rocha So Paulo
CEP 07859-340 Tel.: (11) 4449-3115 Fax: (11) 4443-6110


ETEC DR. EMLIO HERNANDEZ AGUILAR

CODIGO (Int, chave primria)
NOME (VarChar, 50)
CIDADE (VarChar, 50)
EMAIL (VarChar, 50)

Para adiantar o trabalho, preencha a tabela aps a criao com
alguns dados.
SUGESTO: Pelo menos 5 dados com cidades diferentes, podendo
repetir uma ou duas.
O campo CIDADE servir para filtrarmos o relatrio pela cidade
onde o cadastrado mora.
Faremos a conexo via ODBC, em Painel de Controle,
Ferramentas Administrativas, Fonte de Dados (ODBC) como j
mostrado anteriormente.
No Delphi, configuramos a conexo 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:



www.etecfran.com.br
Estrada do Governo, S/N, KM 42 Pouso Alegre Franco da Rocha So Paulo
CEP 07859-340 Tel.: (11) 4449-3115 Fax: (11) 4443-6110


ETEC DR. EMLIO HERNANDEZ AGUILAR

Form1= FRMDADOS
DataModule= DMRELATORIO

E salve:
Unit 1 (O formulrio) 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 formulrio.
Coloque um DBNavigator no formulrio e faa sua conexo
(DataSource). Sua funo 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 botes, que sero
responsveis por gerar os relatrios. Configure-os como:
GroupBox:
Name - GRBBOTOES
Caption Gerar Relatrios
Button1:
Name BTNGERAL
Caption Relatrio Geral
Button2:
Name BTNFILTRO
Caption Relatrio Filtrado

Seu formulrio deve estar semelhante ao mostrado a seguir:




ETEC DR. EMLIO HERNANDEZ AGUILAR


Adicione um novo formulrio, neste ser configurado o
relatrio.
Altere suas propriedades Name:FRMRELAT e Caption:
RELATRIOS. 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 opo QReport
(ser a ltima).
Procure o componente QuickRep e adicione ao formulrio.
Aparecer uma caixa branca dentro do formulrio, semelhante a uma
folha em branco. Precisamos formatar o relatrio e definir suas
bandas.
Clique com o boto direito e selecione a opo Report Settings.
Na janela seguinte, em Bands, marque todas as opes menos
Summary. E se desejar o relatrio impresso em Paisagem, altere em
Paper size a opo Portrait (Retrato) para Landscape (Paisagem).
Clique em Ok.
Seu formulrio de relatrio estar como na figura a seguir:
www.etecfran.com.br
Estrada do Governo, S/N, KM 42 Pouso Alegre Franco da Rocha So Paulo
CEP 07859-340 Tel.: (11) 4449-3115 Fax: (11) 4443-6110





ETEC DR. EMLIO HERNANDEZ AGUILAR



As divises (bandas) so:
Page Header Cabealho da pgina (Aqui vai o timbre e os dados
da empresa)
Title Ttulo (Aqui o ttulo do relatrio. Quais informaes esto
impressas)
Column Header Cabealho da Coluna (Aqui vo os nomes dos
campos impressos)
Detail Detalhe (Aqui vo as informaes cadastradas)
Page Footer Rodap (Aqui colocamos outras informaes, como
nmero da pgina)

IMPORTANTE!
www.etecfran.com.br
Estrada do Governo, S/N, KM 42 Pouso Alegre Franco da Rocha So Paulo
CEP 07859-340 Tel.: (11) 4449-3115 Fax: (11) 4443-6110





www.etecfran.com.br
Estrada do Governo, S/N, KM 42 Pouso Alegre Franco da Rocha So Paulo
CEP 07859-340 Tel.: (11) 4449-3115 Fax: (11) 4443-6110


ETEC DR. EMLIO HERNANDEZ AGUILAR
O formulrio FRMDADOS precisar reconhecer o formulrio de
relatrio FRMRELAT (U_RELAT), pois este ser criado atravs do
cliques de botes do formulrio de dados. Para isso, precisamos
configurar o Use Unit e adicionar a U_RELAT.
O formulrio de relatrios, por sua vez, deve reconhecer o
DataModule, para que seja criado o relatrio atravs da query
QRYRELAT, que est neste DataModule. Aqui tambm 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 (aparecero as opes
de Query e Tabela. Como queremos um relatrio dinmico,
selecionaremos a Query) e mudamos a propriedade Name para
QRPRELAT.
Para finalizar a configurao do relatrio, vamos configurar as
Bandas do mesmo. Comeando pelo Cabealho da Pgina.

Page Header
Clique na parte Page Header. Adicione um QRLabel (paleta QReport)
e em Caption digite o contedo referente ao timbre da Empresa,
como seu nome e endereo. Seria uma QRLabel para o nome e outra
para o endereo.
A formatao da fonte livre e o espao pode ser aumentado,
usando as bordas do Page Header.
Title
Depois selecionamos o Title e criamos o ttulo do relatrio, com outra
QRLabel.
Adicionaremos no Title tambm a data e a hora, com um QRSysData
e mudamos a propriedade Data (Dados) para qrsDateTime.




www.etecfran.com.br
Estrada do Governo, S/N, KM 42 Pouso Alegre Franco da Rocha So Paulo
CEP 07859-340 Tel.: (11) 4449-3115 Fax: (11) 4443-6110


ETEC DR. EMLIO HERNANDEZ AGUILAR
Column Header
Selecionamos agora o espao para os cabealhos de colunas e
adicionamos vrias QRLabel, uma para cada campo da tabela que eu
queira mostrar. No abrigatrio adicionar para todos os campos.
Neste exemplo, colocaremos uma QRLabel para cada, sendo: Cdigo,
Nome, Cidade, E-mail.
Detail
Aqui colocamos as informaes do banco correspondentes ao Column
Header.
No usaremos aqui QRLabel e sim QRDBText, pois estas puxam as
informaes do Banco de Dados.
A QRDBText deve ser conectada com as propriedades DataSet
(aparecero as opes de Query e Tabela. Como queremos um
relatrio dinmico, 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 relatrio deve ter aparncia semelhante a mostrada a
seguir:




ETEC DR. EMLIO HERNANDEZ AGUILAR


Agora, basta codificar os botes que geram o relatrio.

BOTO PARA RALATRIO GERAL:

procedure TFRMDADOS.BTNGERALClick(Sender: TObject);
begin
FRMRELAT. QRPRELAT.Preview;
end;

O comando FRMRELAT. QRPRELAT.Preview; aciona o
relatrio geral, que est conectado Query. Detalhe: S funcionar
se anteriormente, como passado neste tutorial, foi feito o comando
Use Unit, para que o formulrio Inicial reconhea o de relatrio.
www.etecfran.com.br
Estrada do Governo, S/N, KM 42 Pouso Alegre Franco da Rocha So Paulo
CEP 07859-340 Tel.: (11) 4449-3115 Fax: (11) 4443-6110





www.etecfran.com.br
Estrada do Governo, S/N, KM 42 Pouso Alegre Franco da Rocha So Paulo
CEP 07859-340 Tel.: (11) 4449-3115 Fax: (11) 4443-6110


ETEC DR. EMLIO HERNANDEZ AGUILAR
Repare que o resultado um relatrio com todos os registros
cadastrados na tabela.

BOTO PARA RELATRIO 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 varivel CIDADE, que captura o valor
da DBEdit3 (a Edit da cidade). Esta cidade capturada servir para
filtrar o relatrio por este campo.
Todos os comandos deste boto foram abordados e explicados
anteriormente em nosso material sobre consultas.
Repare que o resultado um relatrio que mostra todas as
pessoas da mesma cidade.
Um problema identificado que, ao se criar um relatrio
filtrado, o relatrio geral deixa de funcionar como deveria e se
comporta como se estivssemos filtrando.



www.etecfran.com.br
Estrada do Governo, S/N, KM 42 Pouso Alegre Franco da Rocha So Paulo
CEP 07859-340 Tel.: (11) 4449-3115 Fax: (11) 4443-6110


ETEC DR. EMLIO HERNANDEZ AGUILAR
Para resolver este problema, precisaremos fazer alteraes no
comando do boto para o relatrio geral.

ALTERAO NO BOTO PARA RALATRIO 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 cdigo fica muito semelhante ao utlizado no relatrio filtrado,
com exceo do comando SQL que pede a separao pela cidade.


OBSERVAES FINAIS:

Poderamos ainda utilizar outros recursos, como combobox,
radio buttons, entre outros e criar um formulrios cheio de opes
para a criao dos relatrios.
Fica como sugesto de melhorias para este projeto.

Вам также может понравиться