Академический Документы
Профессиональный Документы
Культура Документы
maro 2011
ndice
Banco de Dados
Delphi
Editorial
04
05
Banco de Dados
Delphi
Crie um preeview customizado e
imprima registros selecionados em
um DBGrid
Autor:Luciano
Pimenta
16
25
10
Dicas
- Dicas Delphi
28
Legenda
Iniciante
Intermedirio
Avanado
maro 2011
03
Bem-vindo
ara quem trabalha com desenvolvimento de sistemas comerciais, o banco de dados utilizado no sistema parte
fundamental do processo. A escolha do banco deve ser feita
levando-se em conta quais recursos o banco oferece em
confronto com as necessidades do sistema.
Para ajuda-los na escolha de um banco de dados e tambm para mantlos atualizados sobre as novidades dessa rea, temos esse ms dois artigos
sobre bancos de dados:
No primeiro, nosso colaborador, Thiago Montebugnoli, nos traz como
instalar, configurar e comear a usar o Sql Server Express 2008 no artigo:
Instalando e configurando o Sql Server Express Edition 2008 with Tools.
No segundo artigo, Felipe Santos prossegue nos mostrando as novidades
do Interbase XE, no artigo: Apresentando o novo Interbase XE parte 2.
Para quem gosta de se aventurar pelo universo da programao Web,
trago esse ms, no artigo: IntraWeb XE Primeiros Passos, as principais
novidades do framework Intraweb no Delphi XE e tambm como podemos
iniciar no desenvolvimento com Intraweb criando uma aplicao simples
com o mesmo.
Para finalizar, Luciano Pimenta nos mostra como podemos personalizar
e agregar recursos aos previews dos principais geradores de relatrio utilizados com o Delphi no artigo: Crie um preview personalizado e imprima
registros selecionados em um DBGrid.
Internet
http://www.theclub.com.br
Cadastro: cadastro@theclub.com.br
Suporte: suporte@theclub.com.br
Informaes: info@theclub.com.br
Skype Cadastro: theclub_cadastro
Skype Suporte: theclub_linha1
theclub_linha2
theclub_linha3
www.twitter.com/theclubbr
Copyright The Club Megazine 2009
Diretor Tcnico
Marcos Csar Silva
Diagramao e Arte
Vitor M. Rodrigues
Reviso
Tassiane Fileto
Colunistas
Antonio Spitaleri Neto
Bruno Alcars
Felipe Santos
Luciano Pimenta
Thiago Cavalheiro Montebugnoli
Impresso e acabamento:
Reproduo
A utilizao, reproduo, apropriao, armazenamento em banco
de dados, sob qualquer forma ou meio, de textos, fotos e outras
criaes intelectuais em cada publicao da revista The Club
Megazine so terminantemente proibidos sem autorizao
escrita dos titulares dos direitos autorais.
maro 2011
Delphi
Int raw e b
Delphi XE
no
Primeiros Passos
Quem trabalha com desenvolvimento
Delphi est quase sempre envolvido em
programas Desktop, que rodam em mquina
local.
O acesso a banco de dados, embora
possa ser feito de forma remota, no torna
a aplicao algo online, ou seja, acessada
comumente pelos usurios de uma rede em
uma interface nica.
O desenvolvedor Delphi, quando v seu
projeto aumentar em termos de recursos, comea a vislumbrar a possibilidade de coloc-lo
para rodar online, seja em rede local ou at
mesmo internet. Nessas situaes, vem a dvida: Como fazer isso? Como converter minha
aplicao para que ela se torne online?
Embora pouco divulgado e at mesmo utilizado pela comunidade Delphi, o Delphi possui
um recurso para desenvolvimento de aplicaes
maro 2011
05
-Estilos e JavaScript:
Com Intraweb podemos utilizar CSS para
aplicar estilos de formatao a nossas pginas, conseguindo um visual mais profissional e ganhando
em agilidade, j que com CSS necessitamos definir
o arquivo com as configuraes de estilo apenas
uma vez. Quaisquer alteraes que precisarem
ser feitas em relao ao visual das pginas quando
fazemos uso de CSS so realizadas no arquivo de
configurao CSS e automaticamente se aplicaro
a todas as pginas que fizerem uso de um mesmo
arquivo CSS.
Alm do CSS para definir estilos, podemos
tambm incorporar funes JavaScript s nossas
aplicaes Intraweb. Com JavaScript, trazemos
parte da codificao da pgina para o lado cliente,
ganhando em agilidade nas requisies e em alguns
eventos disparados pelo usurio.
Criando a aplicao:
Inicie o Delphi XE.
Selecione o menu File New Other.
Ser exibida a seguinte tela:
Veja a figura 1.
Na TreeView do lado esquerdo selecione VCL
for the Web, no lado direito, selecione VCL for the
Web Application Wizard.
Ser exibida a tela a seguir:
maro 2011
Veja a figura 2.
Nessa tela temos as opes principais para a
criao de nossa aplicao Intraweb:
- Application Type:
06
StandAlone Application: Essa forma de aplicao gera um executvel (.exe) Delphi. Possui
maior peso em memria, pois roda em espao
prprio de memria, porm a compatibilidade e
posterior configurao em servidores Web como
o IIS e Apache mais tranquila.
Mos obra!
Figura 1
Em Project Name e Project Directory definimos nome e caminho onde a aplicao ser salva
respectivamente.
Clique em OK. Sero criados os formulrios e a
Figura 2
Figura 3
07
UserSession
Abra a unit do UserSession.
Nessa unit, a principal codificao a fazer a
sobrescrita de seu construtor para que juntamente
com o UserSession seja criada uma instncia do
DataModule.
Como mencionado anteriormente, o UserSession representa objetos, variveis e funes
exclusivas da instncia de usurio. A criao do
DataModule vinculado ao UserSession garante que
teremos a separao da conexo por usurio.
Veja a codificao da unit do UserSession j
com a criao do DataModule:
unit UserSessionUnit;
{
This is a DataModule
where you can add
components or declare
fields that are specific
to
ONE user. Instead of
creating global variables,
it is better to use this
08
maro 2011
Figura 5
DM:TDataModule1;
implementation
{$R *.dfm}
{ TIWUserSession }
// Sobrescrita do
construtor do UserSession
constructor
TIWUserSession.
Create(AOwner:
TComponent);
begin
inherited;
DM:=TDataModule1.
Create(Self);
end;
end.
Concluso
Nesse artigo mostrei a criao e configurao
de um projeto Intraweb.
Como pode ser visto, Intraweb oferece ao
desenvolvedor a possibilidade de criao de
aplicativos on-line de forma fcil e com todas as
caractersticas de uma aplicao Desktop.
Em artigos posteriores estarei mostrando
os demais recursos do Intraweb no Delphi XE,
incluindo o uso de JavaScript e a integrao com
DataSnap.
Figura 7
Sobre o autor
Antonio Spitaleri Neto
Consultor Tcnico The Club.
antonio@theclub.com.br
maro 2011
09
Instalando e Configurando o
SQL Server 2008 Express Edition
With Tools
Uma breve introduo
Estarei utilizando o Windows Seven Ultimate 32 Bits com todas as
atualizaes crticas instaladas para este artigo.
importante ressaltar que esta verso do SQL Server gratuita e
altamente recomendada para aplicaes de pequeno e mdio porte,
abaixo algumas caractersticas do mesmo:
- um sistema de gerenciamento de dados avanado e confivel;
- Oferece um conjunto rico de recursos para desenvolvimento;
- Proteo aos dados e um alto desempenho para clientes de
aplicativos incorporados e aplicativos da Web;
Neste artigo iremos acompanhar sua instalao junto com o seu gerenciador de Banco de Dados.
Realizando o download
Abaixo esto os programas necessrios em caso da utilizao do Windows
Xp Service Pack 3.
Passo 1: Faa o download e instale o Microsoft Net Framework 3.5 SP1.
http://go.microsoft.com/fwlink/?LinkId=120550
Passo 2: Faa o download e instale o Windows Installer 4.5.
http://go.microsoft.com/fwlink/?LinkId=123422
Passo 3: Faa o download e instale o Windows PowerShell 1.0.
http://support.microsoft.com/kb/926139
- Implantao fcil;
- Custo zero e com liberdade de distribu-lo junto com os aplicativos
desenvolvidos;
- Suporta 1 CPU (com suporte a Multi-Core);
10
maro 2011
http://www.microsoft.com/downloads/details.aspx?FamilyID=7522A683-4CB2-454E-B908-E805E9BD4E28&displayLang=pt-br
Requisitos Necessrios
Sistemas Operacionais Suportados: Windows Seven, Windows Server 2003, Windows
Server 2008, Windows Server 2008 R2, Windows
Vista, Windows XP
Os sistemas de 32 bits - Computador com
processador Intel ou compatvel com 1 GHz ou
processador mais rpido.
Os sistemas de 64 bits Computador com
Processador de 1,4 GHz ou mais rpido.
Mnimo de 512 MB de RAM (2 GB ou mais
recomendado).
2,2 GB de espao disponvel em disco
rgido
Figura 01: Central de Instalao do SQL Server.
Realizando a Instalao
Depois de baixado iremos instalar o mesmo, veremos como simples
a instalao junto com sua configurao. Execute o arquivo SQLEXPRWT_
x86_PTB.exe e veremos a tela conforme a Figura 01.
Veja a figura 1.
Nesta tela escolheremos a opo Instalao e em seguida o primeiro
item, como poderemos ver na Figura 02.
Veja a figura 2.
Esta opo indica para uma instalao de uma nova instancia do SQL
Server, sendo a mesma que iremos utilizar em nosso artigo. A prxima
etapa poder ver na Figura 03.
Veja a imagem 3.
11
Veja a imagem 6.
O primeiro diz respeito segurana de Aplicativo do Microsoft .NET,
que poderemos resolver facilmente clicando em Status no item Aviso e
Baixando o arquivo solicitado, e o outro alerta est dizendo que o Firewall
do Windows est habilitado (Mais tarde iremos criar excees para
permitir sua conexo em rede). Continuando, clique em avanar. Na tela
abaixo iremos selecionar todos os recursos, mas neste artigo estaremos
abordando apenas o Servio do SQL Server e de seu gerenciador de Banco
de Dados. Em artigos futuros poderemos abordar outros recursos do
mesmo. Confiram a Imagem 07 abaixo.
Veja a imagem 7.
Por Padro o SQL Server instalado no diretrio C:\ Arquivos de
Programas, Clique em avanar para continuarmos a instalao.
O prximo passo muito importante, seria onde definiremos a senha para acessar o banco de dados, escolha a opo Modo Misto, que
possibilita autenticao do SQL Server e do Windows, em seguida defina
uma senha e especifique os administradores do mesmo. No nosso caso
clicaremos no boto Adicionar usurio Atual para adicionar o usurio
que est sendo utilizado no momento. As abas Diretrio de Dados e
FileStream deixaremos definidas como padres. Em seguida clique em
avanar para darmos continuidade com a instalao, veja Figura 10.
Veja a imagem 10
A prxima tela da instalao diz respeito aos relatrios de Erro e Uso,
eu sempre deixo marcadas estas opes para a fim de aprimorar futuras
verses do SQL Server. No obrigatrio deixar checado estas opes.
Veja a imagem 11.
12
Por padro o SQL Server 2008 vem com a opo para se conectar em
rede desabilitada por motivos de segurana de acesso, fazendo com que
no aceite conexes vindas de outras estaes de uma rede, portanto ao
instal-lo conseguiremos criar uma conexo apenas na estao onde o
mesmo foi instalado.
Para habilitar estas opes devemos seguir alguns passos, vejamos
a seguir.
O SQL Server Configuration Manager o utilitrio responsvel por
gerenciar os servios relacionados s instncias locais do SQL Server e
os protocolos de conexes permitidos. Podemos encontr-lo no item do
menu Ferramentas de Configuraes. Em seguida observaremos algumas
configuraes interessantes, conforme ilustra a Figura 13.
13
Na aba endereos IP, no item IPAll altere o mesmo para porta 1433,
isto far com que esta porta servir para todos os IPs configurados em
seu computador. Caso precise configurar uma porta para apenas um
IP especfico, localize o IP desejado (IP1, IP2, IP3 ...) e siga o mesmo
procedimento. Ver Figura 15.
Protocolo de rede
Descrio
Padro
Memria
Compartilhada
Habilitado
TCP/IP
Permite que outras estaes se conectem ao SQL Server Express por es- Desabilitado
pecificar o nome do servidor e o nome da instncia (default SQLExpress)
ou o endereo IP e o nome da instncia.
Pipes Nomeados
Permite que outras estaes se conectem ao SQL Server Express por Desabilitado
suportar vrios protocolos de rede, incluindo NetBEUI, TCP/IP e IPX/SPX.
Ele seleciona o protocolo de rede automaticamente baseado na configurao do cliente.
VIA
Protocolo especfico para redes de sistema. Nesta rede, os dados trafegam Desabilitado
em alta velocidade e so utilizadas para a comunicao entre servidores
e/ou clusters.
Tabela 1
Veja a imagem 16
poderosos para manipulao e armazenamento de dados de uma forma rpida e segura. Nos prximos
artigos procurarei abordar outros assuntos relacionados ao SQL Server a fim de poder compartilhar meu
conhecimento com os senhores. Vou ficando por aqui e at o ms que vem.
Fonte de Informaes
http://www.microsoft.com/
Figura 17: Conectar ao Servidor.
Concluso
Vimos neste artigo instalao e configurao
deste poderoso Banco de Dados utilizado por
muitas pequenas e mdias empresas. Foram apresentadas algumas caractersticas e funcionalidades
com intuito de trazer uma gama de informaes
teis aos senhores associados. Apesar de ser uma
verso gratuita no deixa de fornecer recursos
Sobre o autor
Thiago Cavalheiro Montebugnoli
Thiago Cavalheiro Montebugnoli tecnlogo, formado pela Faculdade
de Tecnologia de Botucatu SP (FATEC) foi consultor tcnico do The Club, j
desenvolveu softwares utilizando a plataforma .NET, Delphi junto com Banco
de Dados SQL Server e Firebird. Atualmente trabalha no Centro de Processamento de Dados da Prefeitura Municipal de Ita-SP. Possui as seguintes
certificaes: MCP - Microsoft Certified Professional, MCTS - Microsoft Certified Technology Specialist, MCAD - Microsoft Certified Application Developer
e MCSD - Microsoft Certified Solution Developer.
mateuschies@gmail.com
maro 2011
15
Crie um preeview
customizado e imprima
registros selecionados
em um DBGrid
Vou mostrar nesse artigo, algumas dicas
de geradores de relatrios presentes no Delphi. Veremos dicas de Rave Reports, Quick Report e Report Builder. Primeiramente, vamos
customizar um preeview dos geradores de
relatrios, que na sua verso original possui
vrias opes: navegao entre as pginas,
impresso, configurao de pginas, entre
muitas outras.
Mas muitos desenvolvedores sentem
falta de algumas funcionalidades que no
esto presentes em alguns, como exportao
(PDF, HTML, DOC, TXT etc), pesquisa de textos
entre outras. Veremos ainda nesse artigo,
como imprimir somente os itens selecionados em um DBGrid, demanda muito pedida
pelos clientes.
Preparando o ambiente
maro 2011
Primeiro
QRPreview1.PageNumber :=
1;
Anterior
QRPreview1.PageNumber :=
QRPreview1.PageNumber - 1;
Prximo
QRPreview1.PageNumber :=
QRPreview1.PageNumber + 1;
ltimo
QRPreview1.PageNumber
:= QRPreview1.QRPrinter.
PageCount;
Mais Zoom
QRPreview1.Zoom :=
QRPreview1.Zoom + 10;
Menos Zoom
QRPreview1.Zoom :=
QRPreview1.Zoom - 10;
Listagem 2. Exportando
para HTML e TXT
HTML
QRPreview1.QRPrinter.Expor
tToFilter(TQRGHTMLDocument
Filter.Create(
exportacao.html));
TXT
QRPreview1.QRPrinter.Expor
tToFilter(TQRAsciiExportFi
lter.Create(
exportacao.txt));
QRPrinter :=
TQRPrinter(Sender);
frmPreview.ShowModal;
QuickReport2 :=
TQuickReport2.
Create(self);
try
QuickReport2.
PreviewModal;
finally
QuickReport2.Free;
end;
Note que precisamos chamar o mtodo PreviewModal no lugar o Preview. Execute o projeto e
veja como na Figura 2 o preview do Quick Report.
Veja a figura 2.
Action := caFree;
frmPreview := nil;
QRPreview1.QRPrinter.
Print;
17
Primeiro
RvRenderPreview1.
RenderPage(1);
Anterior
RvRenderPreview1.
PrevPage;
Prximo
RvRenderPreview1.
NextPage;
ltimo
RvRenderPreview1.
RenderPage
(RvRenderPreview1.
LastPage);
Mais Zoom
RvRenderPreview1.ZoomIn;
Menos Zoom
RvRenderPreview1.
ZoomOut;
maro 2011
HTML
RvRenderHTML1.
PrintRender(RvNDRWriter1.
Stream, arquivo.html);
DOC
RvRenderRTF1.
PrintRender(RvNDRWriter1.
Stream, arquivo.rtf);
PDF
RvRenderPDF1.
PrintRender(RvNDRWriter1.
Stream, arquivo.pdf);
TXT
RvRenderText1.
PrintRender(RvNDRWriter1.
Stream, arquivo.txt);
Tambm podemos dar a opo para o usurio escolher o nome do arquivo e diretrio. Para
impresso do relatrio precisamos adicionar um
RvRenderPrinter e um RvNDRWriter ao formulrio e adicionar o seguinte cdigo no boto de
imprimir:
RvRenderPrinter1.
Render(RvNDRWriter1.
Stream);
begin
inherited
Create(AOWner);
RvNDRWriter1.Stream :=
Relatorio;
RvRenderPreview1.
Render(RvNDRWriter1.
Stream);
end;
O cdigo, recebe como parmetro um TMemoryStream que ser repassado para a propriedade
Stream do RvNRDWrite. Aps, o RvRenderPreview
mostra o relatrio chamando o Render, passando
como parmetro o stream do RvNDRWriter.
Para finalizar, precisamos criar um relatrio no
Rave Reports. Aps criar o mesmo, no formulrio
para chamar o relatrio, adicione um RvProject
(vinculado ao arquivo de projeto RAV) e um RvNDRWriter, vinculando a propriedade Engine do
RvProject com o RvNDRWriter1.
Aps, use o cdigo da Listagem 6 para abrir o
formulrio de preview com o relatrio.
Listagem 6. Chamando o preview para o Rave
Reports
var
stream: TMemoryStream;
begin
stream := TMemoryStream.
Create;
RvNDRWriter1.StreamMode
:= smUser;
RvNDRWriter1.Stream :=
stream;
RvProject1.
ExecuteReport(Report1);
frmPreview :=
TfrmPreview.Create(Self,
stream);
constructor Create(AOWner:
TComponent; Relatorio:
TMemoryStream);
reintroduce;
...
constructor TfrmPreview.
Create(AOWner: TComponent;
Relatorio: TMemoryStream);
try
frmPreview.ShowModal;
finally
frmPreview.Release;
frmPreview := nil;
end;
end;
Primeiro
ppViewer1.FirstPage
Anterior
ppViewer1.PriorPage;
Prximo
ppViewer1.NextPage;
ltimo
ppViewer1.LastPage;
Mais Zoom
ppViewer1.ZoomPercentage
:= ppViewer1.
ZoomPercentage + 10;
Menos Zoom
ppViewer1.ZoomPercentage
:= ppViewer1.
ZoomPercentage - 10;
ppViewer1.Print;
uses ppReport;
...
constructor Create(AOWner:
Arquivo Texto
with aReport do
begin
AllowPrintToFile :=
True;
DeviceType :=
maro 2011
19
dtTextFile;
TextFileName :=
arquivo.txt;
Print;
end;
PDF
with aReport do
begin
AllowPrintToFile :=
True;
DeviceType := dtPDF;
TextFileName :=
arquivo.pdf;
Print;
end;
O Report Builder apresenta uma tela de impresso (Figura 5), pois usamos a propriedade AllowPrintToFile configurada como True. Isso facilita a
vida do usurio, pois ele pode configurar nome e
diretrio para o arquivo de exportao.
Veja a figura 5.
Existe um componente de terceiro (TExtraDevice) que exporta relatrios para Excel, HTML, RTF,
entre outras. Para finalizar, precisamos criar um
relatrio no Report Builder. Aps criar o mesmo,
no formulrio para chamar o relatrio, use o cdigo
da Listagem 10.
Veja a figura 6.
Um exemplo: um relatrio onde constam parcelas das vendas do seu cliente. Ele precisa verificar
em situaes diferentes as parcelas pagas, no pagas, vencidas, h vencer etc. se voc imaginou fazer
frmPreview := TfrmPreview.
Create(Self, ppReport1);
try
frmPreview.ShowModal;
finally
frmPreview.Free;
end;
maro 2011
Filtrando parcelas
Primeiramente, faremos o exemplo citado anteriormente, no Quick Report. Usei aqui um banco
de dados criado por mim, que estar disponvel
para download.
Nossa consulta retornar as parcelas de acordo
com o perodo, independente do campo PAGO, que
indica se a mesma esta paga ou no. Nossas opes
de filtragem sero: Pagas (PAGO = T), No Pagas
(PAGO = F), Vencidas (parcelas no pagas at a
data atual), h vencer (parcelas no pagas acima
da data atual).
:DATAFIM
and PA.STATUS
= A
order by PA.DATA_
VENCIMENTO, CO.NR_
CONTRATO, PA.NR_PARCELA
procedure TDM.
Filtrar(dtInicio, dtFim:
TDateTime);
begin
cdsConsulta.Close;
cdsConsulta.Params[0].
AsDate := dtInicio;
cdsConsulta.Params[1].
AsDate := dtFim;
cdsConsulta.Open;
end;
//verifica se escolheu um
item
if RadioGroup1.ItemIndex =
-1 then
MessageDlg(Escolha uma
opo de Filtro, mtError,
[mbok], 0)
else
begin
//filtra a
consulta
DM.Filtrar(dtInicial.
Date, dtFinal.Date);
try
frmRelatorioConsulta
:= TfrmRelatorioConsulta.
Create(nil);
frmRelatorioConsulta.
QuickRep1.Preview;
maro 2011
21
finally
frmRelatorioConsulta.
Free;
end;
end;
2: PrintBand :=
(QuickRep1.DataSet.
FieldByName(PAGO).
AsString = F) and
(QuickRep1.DataSet.
FieldByName(DATA_
VENCIMENTO).AsDateTime <
Date);
3: PrintBand :=
(QuickRep1.DataSet.
FieldByName(PAGO).
AsString = F) and
(QuickRep1.DataSet.
FieldByName(DATA_
VENCIMENTO).AsDateTime >
Date);
end;
Rave Reports
Para o Rave, vamos usar a mesma consulta.
Primeiramente, crie um relatrio no Rave (vamos
colocar os componentes no Data Module). O layout
do mesmo deve se parecer com a Figura 10.
Veja a figura 10.
Para a consulta ser mostrada no relatrio, devemos adicionar um RvDataSetConnection e ligar
sua propriedade DataSet com o cdsConsulta. Faa
a ligao do controle com o relatrio (DataViews)
para exibir os dados.
maro 2011
sobre o assunto.
Aps configurar o relatrio, modifique a
chamada ao relatrio do Quick, no formulrio de
filtragem com o seguinte cdigo:
DM.iIndex := RadioGroup1.
ItemIndex;
DM.Filtrar(dtInicial.Date,
dtFinal.Date);
DM.RvProject1.Execute;
PrintBand :=
frmSelecionar.
DBGrid1.SelectedRows.
CurrentRowSelected;
23
ValidRow := frmSelecionar.
DBGrid1.SelectedRows.
CurrentRowSelected;
Concluso
Vimos neste artigo como criar um preview para
os geradores de relatrios mais usados pelos desenvolvedores Delphi. Algumas funcionalidades a mais
podem ser implementadas para alguns geradores,
como navegar para uma determinada pgina informada pelo usurio, formulrio de impresso, onde
o usurio indica a quantidade de cpias etc.
Lembrando que no usamos o StatusBar onde
podemos colocar o total de pginas, nome do relatrio, entre outras informaes. Fica a motivao
para voc implementar muitas funcionalidades
legais no preview. Se voc quiser disponibilizar
suas alteraes para a comunidade, envie para
mim que publicarei no meu site para que todos
possam aprender.
Vimos tambm como simples de filtrar dados
em relatrios do Rave ou Quick, sem a necessidade
de realizarmos vrias consultas ao banco de dados,
ganhando assim, agilidade e performance a aplicao. Tambm podemos deixar o usurio escolher
os registros de uma consulta e imprimir o mesmo,
adicionando assim valor ao seu projeto.
Um grande abrao a todos e sucesso em seus
projetos!
24
maro 2011
Sobre o autor
Luciano Pimenta
Tcnico em Processamento de Dados, desenvolvedor Delphi/C# para aplicaes
Web com ASP.NET e Windows com Win32 e Windows Forms. Palestrante da 4 edio
da Borland Conference (BorCon).
Autor de mais de 60 artigos e de mais de 300 vdeos aulas publicadas em revistas
e sites especializados. consultor da FP2 Tecnologia (www.fp2.com.br) onde ministra
cursos de programao e banco de dados. desenvolvedor da Paradigma Web Bussiness em Florianpolis-SC.
www.lucianopimenta.net
A P R E S E N TA N D O O
NOVO INTERBASE XE
PARTE 2
Ol pessoal,
Voltamos com a segunda parte da
apresentao do novo InterBase XE. Quero
antes aproveitar essa introduo do artigo
para exaltar o sucesso dessa nova verso do
InterBase. A apresentao durante a Delphi
Conference 2010 foi um sucesso e a procura
pelo produto est fantstica. Isso realmente
mostra que o novo InterBase XE est se tornando um marco na j brilhante histria desse
nosso banco de dados. Em breve o material
da apresentao estar disponvel no site da
Embarcadero (http://edn.embarcadero.com).
Vale a pena conferir.
Pois bem, nessa edio vamos dar continuidade na apresentao do produto. No
artigo anterior ns falamos sobre o suporte
plataforma 64 bits, sobre a ampliao da
capacidade de gerenciamento de memria,
sobre o suporte tecnologia de Cloud Computing e sobre o aperfeioamento na segurana
do produto atravs do Strong Encryption
Password. Agora vamos mostrar em detalhes
25
LINHA DE RETORNO
comum a situao onde precisamos enviar
para nossos clientes um script de atualizao da
estrutura do banco de dados. Criamos tabelas, alteramos campos, criamos ndices, enfim. O normal
nessa situao prepararmos um script contendo
todas as alteraes necessrias e enviamos para
nossos clientes. Legal. Mas certamente voc j
deve ter encontrado a situao onde o cliente vai
rodar esse script e retorna erro, pois a estrutura
que desejamos criar j existe no banco de dados
ou queremos dropar algo que no existe mais na
base do cliente. Agora com o Execute Statement
podemos criar uma procedure que verifique antes
a existncia da estrutura que desejamos alterar/
incluir/excluir e ento executamos o comando
desejado.
Vamos ver um exemplo onde queremos incluir
uma nova coluna em determinada tabela, mas
queremos antes verificar se essa coluna j existe
ou no:
maro 2011
SET TERM ^ ;
CREATE PROCEDURE SP_
VALIDA_DDL (
v_table varchar(67)
character set none,
v_column varchar(67)
character set none,
v_type varchar(16)
character set none)
as
declare variable norows
integer;
declare variable qry
varchar(200);
begin
Select count(*) from
rdb$relation_fields r
where r.rdb$relation_
name= upper(:v_table) and
r.rdb$field_name =
upper(:v_column)
into :norows;
if (norows = 0) then
begin
QRY = ALTER TABLE
|| :V_TABLE || ADD ||
:V_COLUMN ||
|| :V_TYPE
;
EXECUTE STATEMENT QRY;
end
end^
SET TERM ; ^
rar
2. O nome da coluna que desejamos
acrescentar
3. O tipo da nova coluna que desejamos
acrescentar.
E o texto da procedure bem simples. Primeiramente verificamos se a coluna informada
existe na tabela informada. Para isso executamos
uma query na tabela RDB$RELATION_FIELDS, que
armazena todos os relacionamentos entre campos
e tabelas.
Caso a consulte no retorne qualquer resultado (norows = 0), significa que a coluna no existe
na tabela. Agora podemos montar um comando
DDL para criar a coluna.
Esse passo indicado logo abaixo, quando a
varivel QRY recebe o comando DDL da criao do
campo informado na tabela informada, conforme
o datatype informado.
E por fim, executamos o comando EXECUTE
STATEMENT QRY, fazendo rodar o comando DDL
passado atravs da varivel QRY.
Um exemplo de chamada da Stored Procedure
acima pode ser:
EXECUTE SP_VALIDA_DDL(T_
ESTADO,SIGLA,CHAR(2));
no sabemos ao certo o nome da tabela. Essa deciso pode vir no momento de execuo. Vejamos
o exemplo abaixo:
SET TERM ^ ;
CREATE PROCEDURE SP_MAXCOD
(
TABLE_NAME
VARCHAR(50),
FIELD_NAME
VARCHAR(50))
RETURNS (
MAXNO INTEGER)
AS
DECLARE VARIABLE QRY
VARCHAR(200);
BEGIN
QRY = SELECT MAX( ||
:FIELD_NAME || ) FROM ||
:TABLE_NAME ;
EXECUTE STATEMENT QRY INTO
:MAXNO;
SUSPEND;
END^
SET TERM ; ^
No exemplo acima, criamos uma Stored Procedure chamada SP_MAXCOD que recebe como
parmetros de entrada o nome de uma tabela e o
nome de uma coluna, retornando como resultado
o valor mximo encontrado na coluna informada
para a tabela informada. Podemos assim utilizar
essa informao para identificar o prximo valor
para utilizarmos no campo ou como parte de um
clculo de uma validao, enfim, chamar essa
Stored Procedure como parte de outras Stored
Procedures ou Triggers e ter de maneira dinmica
a informao.
Um exemplo de chamada da Stored Procedure
acima pode ser:
EXECUTE SP_MAXCOD(T_
FUNCIONARIO,COD_FUNC);
SET TERM ^ ;
CREATE PROCEDURE SP_DADOS_
CLIENTE (
TABLE_NAME VARCHAR(50)
CHARACTER SET NONE)
RETURNS (
COD_CLIENTE INTEGER,
NOME_RAZAO
VARCHAR(50),
CPF_CNPJ VARCHAR(14),
ENDERECO VARCHAR(60),
TELEFONE VARCHAR(12)
)
AS
DECLARE VARIABLE QRY
VARCHAR(200);
BEGIN
QRY = SELECT COD_CLIENTE,
RAZNOME, CPFCNPJ, END, TEL
FROM || :TABLE_NAME ;
FOR EXECUTE STATEMENT QRY
INTO
:COD_CLIENTE,
:NOME_RAZAO, :CPF_CNPJ,
:ENDERECO, :TELEFONE;
DO
SUSPEND;
END^
SET TERM ; ^
EXECUTE SP_MAXCOD(T_
CLIENTE,COD_CLIENTE);
No exemplo acima criamos uma Stored Procedure chamada SP_DADOS_CLIENTE que nos
retornar alguns campos comuns encontrados
em tabelas de clientes Cdigo do cliente, Razo
Social, CPF ou CNPJ, Endereo, Telefone, enfim.
Poderamos muito bem executar diretamente a
query de Select para obter essas informaes.
EXECUTE SP_DADOS_
CLIENTE(T_CLIENTE);
EXECUTE SP_DADOS_
CLIENTE(T_FORNECEDOR);
()
AS
DECLARE VARIABLE TIPO_
CLIENTE CHAR(1);
BEGIN
()
IF (TIPO_CLIENTE = C)
THEN
FOR SELECT * FROM SP_
DADOS_CLIENTE(T_CLIENTE)
INTO
:COD_CLIENTE, :NOME_
RAZAO, :CPF_CNPJ,
:ENDERECO, :TELEFONE;
DO
SUSPEND;
END
IF (TIPO_CLIENTE = F)
THEN
FOR SELECT * FROM
SP_DADOS_CLIENTE(T_
FORNECEDOR) INTO
:COD_CLIENTE, :NOME_
RAZAO, :CPF_CNPJ,
maro 2011
27
:ENDERECO, :TELEFONE;
DO
SUSPEND;
END
()
END^
Referncia:
InterBase XE Language Reference Guide
Capitulo 3.
Sobre o autor
CONCLUSO
Felipe Santos
28
maro 2011
felipe.santos@presence.com.br
Dicas DELPHI
if(EditNames[i]=EditName)then
Result:=EditTexts[i];
end;
Em uma de nossas ltimas edies, publicamos uma dica para limpar todos
os edits de um formulrio e depois retornar os valores apagados.
Os cdigos a seguir so uma nova abordagem dessa dica, utilizando ao
invs de eventos procedures genricas, que no caso estaro contidas em uma
unit parte de qualquer projeto.
Com essa abordagem, as procedures passam a no depender de nenhum
formulrio nem mesmo de quantas edits existem nesse formulrio.
Veja que na funo EditTextByName temos a utilizao dos arrays EditNames e EditTexts. Esses arrays foram declarados na interface e recebero
respectivamente os nomes das edits do formulrio a ser limpo e os textos das
edits do mesmo formulrio.
O preenchimento desses arrays feito pela procedure FillArrays. A procedure FillArrays possui em seu corpo a funo EditsCount, que a responsvel
por retornar para a funo FillArrays a quantidade de edits existentes no
Formulrio.
Segue o cdigo da procedure FillArrays e dentro dela a funo EditsCount:
A unit que iremos criar para esse exemplo recebe o nome de Funcoes.
Na seo interface, que a seo da unit que ser exportada para o projeto
que far uso da mesma, iremos declarar o seguinte:
procedure FillArrays(Form:TForm);
function EditsCount:Integer;
var
i,
iCount:integer;
begin
iCount:=0;
uses
Sysutils,Windows,Forms,StdCtrls;
procedure CleanEdits(Cleaner:Boolean;Form:
TForm);
var
Inc(iCount);
EditTexts:array of string;
EditNames:array of string;
Na sequncia, na seo implementation colocaremos o cdigo das procedures de apoio a procedure CleanEdits.
Comearemos pela funo EditTextByName. Essa funo ir retornar o
texto que dever ser recolocado em uma determinada edit quando ela for
preenchida com seu valor de antes da limpeza.
Veja o cdigo:
function EditTextByName(EditName:string):s
tring;
var
i:integer;
begin
Result:=;
for i:=0 to
VarArrayHighBound(EditNames,1)do
Result:=iCount;
end;
var
i,
j:integer;
begin
SetLength(EditTexts,EditsCount);
SetLength(EditNames,EditsCount);
j:=0;
for i:=0 to Form.ComponentCount-1 do
if(Form.Components[i] is TEdit)then
begin
EditTexts[j]:=TEdit(Form.
Components[i]).Text;
EditNames[j]:=TEdit(Form.
Components[i]).Name;
Inc(j);
end;
end;
maro 2011
29
Por fim iremos a codificao da procedure que ser vista pelos projetos que
utilizaro essa unit: A procedure CleanEdits, que declaramos na interface.
tipo boolean. Essa varivel ser utilizada para o controle do limpar desfazer
das edits. Essa varivel dever ter o valor True inicial.
Segue o cdigo:
procedure CleanEdits(Cleaner:Boolean;Form:
TForm);
var
i:integer;
begin
case Cleaner of
True:
begin
FillArrays(Form);
for i:=0 to Form.ComponentCount-1
do
if(Form.Components[i] is
TEdit)then
TEdit(Form.Components[i]).
Clear;
end;
False:
for i:=0 to Form.ComponentCount-1
do
if(Form.Components[i] is
TEdit)then
TEdit(Form.Components[i]).
Text:=EditTextByName(TEdit(Form.
Components[i]).Name);
end;
end;
No evento Onclick do boto limpar iremos fazer uso da procedure CleanEdits, alm de um controle do limpar desfazer.
Segue o cdigo:
procedure TForm1.Button1Click(Sender:
TObject);
begin
CleanEdits(Cleaner,Self);
Cleaner:=not Cleaner;
if(Cleaner)then
Button1.Caption:=Limpar
else
Button1.Caption:=Desfazer;
end;
maro 2011
Anuncie
conosco
e um
Anuncie na revista e ganh
site do The Club
banner publicitrio no
to:
Solicite um oramen
Skype: theclub_cadastro
lub.com.br
E-mail: cadastro@thec
Fone: (14) 3732-1529
maro 2011
maro 2011