Clique aqui para ler esse artigo em PDF.
DynamicReport
Assistente para geração de relatórios dinâmicos utilizando Rave e Quick Report
Neste artigo veremos como criar um assistente para geração de relatórios
Nosso aplicativo conterá nove passos, isso é, através de nove etapas montaremos dinamicamente a instrução SQL que será utilizada na geração do relatório, de acordo as condições especificadas pelo usuário, como campos que serão mostrados, ordenação, critério de seleção etc. Após determinada a conexão e a instrução SQL, disponibilizaremos para o usuário a opção de fazer a impressão do relatório utilizando Rave ou Quick Report, tudo gerado em tempo de execução!
Nota: Para esse aplicativo optei por usar o Delphi 7, pois no Delphi 2005 não há o Quick Report de forma nativa disponível na IDE. Uma versão comercial do produto está disponível em www.qusoft.com.
Etapas do assistente
O assistente será composto por nove etapas, onde utilizaremos o componente Notebook (paleta Win 3.1) para fazer a navegação entre elas. As etapas são:
·Tela inicial do assistente;
·Configuração/seleção da conexão com o banco de dados;
·Seleção do tipo do relatório a ser montado;
·Seleção da tabela do banco de dados;
·Seleção dos campos da tabela especificada;
·Definição dos filtros a serem aplicados na tabela especificada;
·Seleção dos campos que serão utilizados na ordenação dos dados;
·Visualização dos dados e da instrução SQL gerada;
·Seleção da tecnologia a ser utilizada na geração do relatório e impressão do mesmo.
A idéia principal na criação desse assistente é torná-lo o mais genérico e flexível possível. Para que essas características sejam possíveis, utilizaremos o dbExpress e seus métodos de acesso a metadados do banco de dados.
Criando o assistente
Abra o Delphi 7 e inicie uma nova aplicação (File>New>Application). Altere o nome do formulário para “FrmAssistente” e salve sua unit como “untFrmAssistente.pas”. Para o arquivo de projeto dê o nome de “DynamicReport”. Adicione alguns componentes visuais e configure-os de acordo com a Figura 1.
Figura 1. Layout do assistente de geração de relatórios em tempo de design
Altere a propriedade tag do botão btnVoltar para “–1” e do botão btnAvancar para “
Nota: Para selecionar uma página específica em tempo de design, utilize a propriedade ActivePage.
Utilizaremos a primeira página para adicionar uma mensagem de boas-vindas ao usuário. Adicione um Label à página e entre com uma mensagem de boas-vindas de acordo com sua preferência. Na segunda página mostraremos os drivers e conexões disponíveis nos arquivos de configuração do dbExpress, para que o usuário possa selecionar e configurar sua própria conexão com o banco de dados de sua preferência.
O Delphi armazena os drivers e conexões do dbExpress em dois arquivos INI (dbxdrivers.ini e dbxconnections.ini). Para localizar esses arquivos na máquina, faremos a leitura de duas chaves de registro, que armazenam o path de cada arquivo. Declare as units Registry e IniFiles no uses da unit do formulário. Na seção private da unit declare duas variáveis (do tipo string) de nome “drivers” e “conexoes”.
Utilizaremos essas variáveis para armazenar o caminho dos arquivos INI utilizados pelo dbExpress. Adicione na segunda página do Notebook dois ComboBoxes. Utilizaremos esses componentes para listar os drivers e conexões disponíveis nos arquivos INI do dbExpress. Altere os nomes dos ComboBoxes para “cbDriver” e “cbConexao”. Crie um método chamado “CarregarConfConexoes” e implemente-o como mostra o código da Listagem 1.
Listagem 1. Método CarregarConfConexoes
procedure TFrmAssistente.CarregarConfConexoes;
const
chave = 'Software\Borland\DBExpress';
var
registro: TRegistry;
arqINI: TIniFile;
begin
registro := TRegistry.Create;
try
with registro do
begin
if OpenKey(chave, False) then
begin
if ValueExists('Driver Registry File') then
drivers := ReadString(
'Driver Registry File');" [...] continue lendo...