The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”....

32
março 2011

Transcript of The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”....

Page 1: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011

Page 2: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011

Page 3: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 03

Apresentando o novo Interbase XE - parte 2

25- Dicas Delphi

DicasBanco de DadosDelphi

Delphi

Autor: Felipe Santos

Banco de Dados

índiceInstalando e configurando o SQL Server 2008 Express Edition with Tools

Editorial

10Para quem trabalha com desenvol-

vimento de sistemas comerciais, o banco de dados utilizado no sistema é parte fundamentall... 04

Intraweb no Delphi XE - Primeiros Passos

05Crie um preeview customizado e imprima registros selecionados em um DBGrid 16 28

LegendaInicianteIntermediárioAvançado

Autor:Thiago Cavalheiro Montebugnoli

Autor: Antonio Spitaleri

Autor:Luciano Pimenta

Page 4: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201104

Bem-vindo

Delphi é marca registrada da Borland International, as demais marcas citadas são registradas

pelos seus respectivos proprietários.

Antonio Spitaleri Neto - Editor [email protected]

Para quem trabalha com desenvolvimento de sistemas co-merciais, 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 também para mantê-los atualizados sobre as novidades dessa área, temos esse mês dois artigos sobre bancos de dados:

No primeiro, nosso colaborador, Thiago Montebugnoli, nos traz como instalar, configurar e começar 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 programação Web, trago esse mês, no artigo: “IntraWeb XE – Primeiros Passos”, as principais novidades do framework Intraweb no Delphi XE e também como podemos iniciar no desenvolvimento com Intraweb criando uma aplicação simples com o mesmo.

Para finalizar, Luciano Pimenta nos mostra como podemos personalizar e agregar recursos aos previews dos principais geradores de relatório uti-lizados com o Delphi no artigo: “Crie um preview personalizado e imprima registros selecionados em um DBGrid”.

É isso. Boa leitura a todos e até o próximo mês!

Av. Profº Celso Ferreira da Silva, 190 Jd. Europa - Avaré - SP - CEP 18.707-150

Informações: (14) 3732-1529 Suporte: (14) 3733-1588

Internethttp://www.theclub.com.br

Cadastro: [email protected]: [email protected] Informações: [email protected] Cadastro: theclub_cadastro

Skype Suporte: theclub_linha1 theclub_linha2 theclub_linha3

www.twitter.com/theclubbr

Copyright The Club Megazine 2009

Diretor TécnicoMarcos César Silva

Diagramação e ArteVitor M. Rodrigues

RevisãoTassiane Fileto

ColunistasAntonio Spitaleri Neto

Bruno AlcarásFelipe Santos

Luciano PimentaThiago Cavalheiro Montebugnoli

Impressão e acabamento:GRIL - Gráfica e Editora

Taquarituba-SP - Tel. (14) 3762-1345

ReproduçãoA utilização, reprodução, apropriação, armazenamento em banco de dados, sob qualquer forma ou meio, de textos, fotos e outras criações intelectuais em cada publicação da revista “The Club Megazine” são terminantemente proibidos sem autorização escrita dos titulares dos direitos autorais.

Page 5: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 05

Delphi

Quem trabalha com desenvolvimento Delphi está quase sempre envolvido em programas Desktop, que rodam em máquina local.

O acesso a banco de dados, embora possa ser feito de forma remota, não torna a aplicação algo “online”, ou seja, acessada comumente pelos usuários de uma rede em uma interface única.

O desenvolvedor Delphi, quando vê seu projeto aumentar em termos de recursos, co-meça a vislumbrar a possibilidade de colocá-lo para rodar “online”, seja em rede local ou até mesmo internet. Nessas situações, vem a dú-vida: Como fazer isso? Como converter minha aplicação para que ela se torne “online”?

Para a solução dessa questão, precisamos atentar inicialmente para alguns tópicos:

- Existem linguagens que foram criadas nati-

Intraweb no Delphi XEPrimeiros Passos

vamente para trabalhar em ambiente Web, como Java e PHP. Estas linguagens possuem recursos específicos para o ambiente da internet.

- No caso de um sistema já pronto, utilizar as linguagens acima descritas seria inviável, já que a conversão seria mais complexa que um projeto desenvolvido do “zero”.

- Desenvolver do “zero” com uma linguagem para ambiente Web então é a solução? É uma hipótese, porém para quem trabalha com Delphi já há alguns anos, o aprendizado de uma nova linguagem implica em um gasto de tempo que de-verá ser investido nesse aprendizado. No ambiente concorrente do mercado de software, nem sempre o investimento de tempo em uma nova linguagem pode ser viável.

- Como proceder então?

Embora pouco divulgado e até mesmo uti-lizado pela comunidade Delphi, o Delphi possui um recurso para desenvolvimento de aplicações

conhecido como Intraweb.

A tecnologia Intraweb existe há bastante tempo integrado ao Delphi e permite o desenvolvi-mento de aplicações para rodar em ambiente Web. E o melhor: O desenvolvimento de uma aplicação Intraweb é idêntico ao de uma aplicação Desktop Delphi. Nenhum aprendizado extra de linguagem é necessário.

Com Intraweb desenvolvemos nossa aplicação utilizando todos os recursos que normalmente utilizamos em aplicações Desktop, com a ressalva que os componentes visuais temos de utilizar os componentes específicos para Intraweb presentes no Delphi.

No Delphi XE, a tecnologia IntraWeb segue presente nos permitindo criar aplicações para Web de forma fácil. Veremos algumas questões relacionadas ao IntraWeb na sequencia:

-Conexão a banco de dados:

Page 6: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201106

O Intraweb suporta todas as formas de cone-xão existentes no Delphi. Ou seja, não precisamos alterar nossa forma de trabalho em relação a conexão com bancos de dados para trabalhar em Intraweb.

-Acesso de múltiplos usuários à apli-cação:

O Intraweb em Delphi XE possui em seu fra-mework todas as rotinas para realizar o controle de vários usuários em ambiente Web. O desenvol-vedor não precisa realizar codificação extra para controlar múltiplos acessos, pois todo o controle está “embutido” no Intraweb.

-Estilos e JavaScript:

Com Intraweb podemos utilizar CSS para aplicar estilos de formatação a nossas páginas, con-seguindo um visual mais profissional e ganhando em agilidade, já que com CSS necessitamos definir o arquivo com as configurações de estilo apenas uma vez. Quaisquer alterações que precisarem ser feitas em relação ao visual das páginas quando fazemos uso de CSS são realizadas no arquivo de configuração CSS e automaticamente se aplicarão a todas as páginas que fizerem uso de um mesmo arquivo CSS.

Além do CSS para definir estilos, podemos também incorporar funções JavaScript às nossas aplicações Intraweb. Com JavaScript, trazemos parte da codificação da página para o lado cliente, ganhando em agilidade nas requisições e em alguns eventos disparados pelo usuário.

- Ambiente de testes integrado:

O Delphi possui um servidor web interno para a execução via IDE dos projetos Intraweb. Ou seja, em ambiente de desenvolvimento, não é necessário colocar nossa aplicação em um servidor Web como Apache ou IIS para testar se tudo está correto. Basta executar a aplicação da mesma for-ma como fazemos com as aplicações Desktop e o servidor Web de teste integrado será iniciado para que possamos ver o resultado de nossa aplicação no browser.

Intraweb é uma boa alternativa para quando

necessitarmos rodar nossa aplicação em ambiente Web e não tivermos acesso aos recursos de outras linguagens.

Nesse artigo estaremos iniciando no desenvol-vimento IntraWeb, criando uma aplicação simples que irá exibir dados provenientes de um banco de dados Firebird no browser.

Mãos à obra!

Criando a aplicação:

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: Veja a figura 2.

Nessa tela temos as opções principais para a criação de nossa aplicação Intraweb:

- Application Type:

Aqui escolhemos o tipo de aplicação que desejamos, temos as opções:

StandAlone Application: Essa forma de apli-cação gera um executável (.exe) Delphi. Possui maior “peso” em memória, pois roda em espaço próprio de memória, porém a compatibilidade e posterior configuração em servidores Web como o IIS e Apache é mais “tranquila”.

ISAPI Extension: Gera uma DLL no padrão ISAPI. Dessa forma temos uma aplicação que rodará em espaço compartilhado de memória, ocupando assim menos memória. Porém algumas versões de servidores não possuem boa compatibilidade com esse tipo de aplicação.

Para nosso exemplo escolheremos StandAlone Application.

- Options:

Aqui definimos se queremos que nossa aplica-ção Intraweb gerencie conexões ao banco de dados utilizando pooling. Deixaremos marcada essa opção em nosso exemplo.

Em Project Name e Project Directory defini-mos nome e caminho onde a aplicação será salva respectivamente.

Clique em OK. Serão criados os formulários e a

Figura 1

Page 7: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 07

estrutura básica de nossa aplicação Intraweb.Três units com seus respectivos formulários

foram criadas:

- Unit1: Essa unit é igual à unit e seu formulário correspondente em uma aplicação Desktop. Será a página principal de nosso projeto. É esse formulário que irá aparecer no Browser do usuário quando ele executar o projeto. Claro que iremos alterar o nome desse formulário, para que fique clara qual a função dele no projeto. No exemplo, irei alterar seu nome para MainForm.

-DataModuleUnit: Assim como nas aplicações Desktop, o Datamodule é o formulário não visual que contém os componentes de conexão com o banco de dados. Como será o único em nosso exemplo, não iremos alterar seu nome.

-UserSessionUnit: O UserSession é o formulá-rio e unit onde colocaremos variáveis e funções que serão exclusivas por instância para cada usuário. Um exemplo prático dessa funcionalidade será a criação do DataModule, que será feita no User-Session e irá garantir que cada usuário tenha sua conexão com o banco independente dos demais. Com o UserSession, a administração de usuários no IntraWeb é bastante tranquila e não exige codificação complexa.

No MainForm faremos o layout da aplicação como aparecerá para o usuário.

Esse layout deverá ficar como na figura a seguir:

Veja a figura 3.

Veja que temos uma IWLabel da aba IWS-tandard com o caption: “Employees List” e um IWDbGrid da aba IWData.

Criando a conexão com o banco de

dados

Acesse no Delphi o menu View – DataEx-plorer.

Clique com o botão direito sobre o driver Fire-bird e selecione “Add New Connection”.

Configure a tela que segue:

Figura 2

Figura 3

Com a conexão criada, clique com o botão direito sobre a mesma no DataExplorer e selecione “Modify Connection”.

Será apresentada a tela a seguir: Veja a figura 5.

Em DataBase Name coloque o caminho do arquivo de banco de dados. Para este exemplo, estou fazendo uso do banco de dados Employee

Page 8: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201108

que acompanha a instalação do Firebird.

UserName e Password não necessitam de al-terações salvo os casos em que a senha do SYSDBA no servidor Firebird houver sido alterada. Clique em Ok para salvar a conexão.

No DataModule da aplicação, coloque um com-ponente SqlConnection da aba DBExpress e altere sua propriedade ConnectionName para EMPLOYEE, que foi a conexão que criamos a pouco.

Insira ainda no DataModule um componente SqlDataSet e configure sua propriedade SqlConnec-tion para o SqlConnection inserido anteriormente. Em sua propriedade CommandText coloque: “SE-LECT * FROM EMPLOYEE”.

Insira um componente DataSetProvider da aba DataAccess e sete sua propriedade DataSet para o SqlDataSet recém-criado.

Para finalizar a construção do DataModule, insira um componente ClientDataSet e altere sua propriedade ProviderName para o DataSetProvider existente no DataModule.

UserSession

Abra a unit do UserSession.

Nessa unit, a principal codificação a fazer é a sobrescrita de seu construtor para que juntamente com o UserSession seja criada uma instância do DataModule.

Como mencionado anteriormente, o User-Session representa objetos, variáveis e funções exclusivas da instância de usuário. A criação do DataModule vinculado ao UserSession garante que teremos a separação da conexão por usuário.

Veja a codificação da unit do UserSession já com a criação 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

Figura 5

datamodule. You can then access the it using UserSession.}interface

uses IWUserSessionBase, SysUtils, Classes,DataModuleUnit;

type TIWUserSession = class(TIWUserSessionBase) private { Private declarations } public { Public declarations } constructor Create(AOwner:TComponent);override; end;

var DM:TDataModule1;

implementation

{$R *.dfm}

{ TIWUserSession }

// Sobrescrita do construtor do UserSessionconstructor

TIWUserSession.Create(AOwner: TComponent);begin inherited; DM:=TDataModule1.Create(Self);end;

end.

Abra o design do UserSession e insira nele um componente DataSource. Ligue este DataSource ao ClientDataSet existente no DataModule.

Volte ao formulário principal e ligue o IWDB-Grid ao DataSource que inserimos no UserSession. Não se esqueça de adicionar na uses do formulário principal a unit do UserSession.

Pressione F9 para executar o projeto. Será exibida a tela do servidor de testes IntraWeb:

Page 9: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 09

Nessa tela pressione novemente F9 para ver o projeto em execução no Browser padrão da máquina.

Veja nosso exemplo em execução: Veja a imagem 7.

Conclusão

Nesse artigo mostrei a criação e configuração de um projeto Intraweb.

Como pode ser visto, Intraweb oferece ao desenvolvedor a possibilidade de criação de aplicativos “on-line” de forma fácil e com todas as características de uma aplicação Desktop.

Em artigos posteriores estarei mostrando os demais recursos do Intraweb no Delphi XE, incluindo o uso de JavaScript e a integração com DataSnap.

Então até a próxima e aproveitem os recursos do Delphi XE!

Figura 7

Consultor Técnico The Club.

Sobre o autor

Antonio Spitaleri Neto

[email protected]

Page 10: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201110

Instalando e Configurando o SQL Server 2008 Express Edition With Tools

Uma breve introdução

Estarei utilizando o Windows Seven Ultimate 32 Bits com todas as atualizações críticas instaladas para este artigo.

É importante ressaltar que esta versão do SQL Server é gratuita e altamente recomendada para aplicações de pequeno e médio porte, abaixo algumas características do mesmo:

- É um sistema de gerenciamento de dados avançado e confiável;

- Oferece um conjunto rico de recursos para desenvolvimento;

- Proteção aos dados e um alto desempenho para clientes de aplicativos incorporados e aplicativos da Web;

- Implantação fácil;

- Custo zero e com liberdade de distribuí-lo junto com os aplicativos desenvolvidos;

- Suporta 1 CPU (com suporte a Multi-Core);

- 1GB de RAM e com bases de dados até 4GB;

- Com suporte a rede.

Neste artigo iremos acompanhar sua instalação junto com o seu geren-ciador de Banco de Dados.

Realizando o download

Abaixo estão os programas necessários em caso da utilização do Windows Xp Service Pack 3.

Passo 1: Faça o download e instale o Microsoft Net Framework 3.5 SP1.http://go.microsoft.com/fwlink/?LinkId=120550

Passo 2: Faça o download e instale o Windows Installer 4.5.http://go.microsoft.com/fwlink/?LinkId=123422

Passo 3: Faça o download e instale o Windows PowerShell 1.0.http://support.microsoft.com/kb/926139

Caso utilize o Windows Seven Ultimate com todas as atualizações críticas instaladas ignore esta etapa.

Agora faremos o download do Banco de Dados junto com seu gerenciador SQL Server Management Studio Express, importante ressaltar que em nosso caso baixaremos a versão 32 Bits, segue abaixo o link:

http://www.microsoft.com/downloads/details.aspx?FamilyID=7522A683-4-CB2-454E-B908-E805E9BD4E28&displayLang=pt-br

Page 11: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 11

Requisitos Necessários

• Sistemas Operacionais Suportados: Win-dows 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 compatível com 1 GHz ou processador mais rápido.

• Os sistemas de 64 bits – Computador com Processador de 1,4 GHz ou mais rápido.

• Mínimo de 512 MB de RAM (2 GB ou mais é recomendado).

• 2,2 GB de espaço disponível em disco rígido

Realizando a Instalação

Depois de baixado iremos instalar o mesmo, veremos como é simples a instalação junto com sua configuração. Execute o arquivo SQLEXPRWT_x86_PTB.exe e veremos a tela conforme a Figura 01.

Veja a figura 1.

Nesta tela escolheremos a opção Instalação e em seguida o primeiro item, como poderemos ver na Figura 02.

Veja a figura 2.

Esta opção indica para uma instalação de uma nova instancia do SQL Server, sendo a mesma que iremos utilizar em nosso artigo. A próxima etapa poderá ver na Figura 03.

Veja a imagem 3.

Verificamos que não encontramos nenhum problema em nosso Sistema Operacional, portanto continuemos com a instalação. Clique no botão Ok e prosseguimos com a tela seguinte, Figura 04.

Veja a imagem 4.

Como estamos trabalhando com a versão gratuita do SQL Server, não precisamos informar nenhuma chave. Em seguida clique em Avançar. Figura 05.

Veja a imagem 5.

É importante dar uma lida nos termos de Licença para uso, em seguida clique em “Aceito os termos de licença” e prosseguiremos com a instalação clicando no botão Avançar.

Em seguida verificaremos os Arquivos de Suporte à instalação, no meu caso apareceram dois alertas, como podemos ver na imagem 06 abaixo:

Figura 01: Central de Instalação do SQL Server.

Figura 02: Opção Nova Instalação SQL Server.

Figura 03: Regras de Suporte à Instalação.

Page 12: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201112

Veja a imagem 6.

O primeiro diz respeito à segurança 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 exceções para permitir sua conexão em rede). Continuando, clique em avançar. Na tela abaixo iremos selecionar todos os recursos, mas neste artigo estaremos abordando apenas o Serviço 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 Padrão o SQL Server é instalado no diretório C:\ Arquivos de Programas, Clique em avançar para continuarmos a instalação.

Na tela seguinte iremos utilizar as configurações padrões, no caso do SQL Server a instancia será criada com o mesmo nome “SQLExpress”, esta etapa define o nome pelo qual seu servidor SQL irá responder. Veja a imagem 08 para melhores detalhes.

Veja a imagem 8.

Já no próximo passo o instalador faz a análise do espaço em disco, no nosso caso o teste foi positivo e passamos assim para outra fase da instalação que seria a parte para configuração do Servidor. Vejamos na imagem seguinte.

Veja a imagem 9.

Deixemos as configurações padrões, alterando apenas o Nome da Conta para AUTORIDADE NT\SISTEMA que estaremos apenas utilizando em uma máquina como exemplo. É importante informar que em casos onde o seu SQL Server utilizar recursos de rede será necessário utilizar uma conta de domínio.

O próximo passo é muito importante, seria onde definiremos a se-nha para acessar o banco de dados, escolha a opção “Modo Misto”, que possibilita autenticação do SQL Server e do Windows, em seguida defina uma senha e especifique os administradores do mesmo. No nosso caso clicaremos no botão “Adicionar usuário Atual” para adicionar o usuário que está sendo utilizado no momento. As abas “Diretório de Dados” e “FileStream” deixaremos definidas como padrões. Em seguida clique em avançar para darmos continuidade com a instalação, veja Figura 10.

Veja a imagem 10

A próxima tela da instalação diz respeito aos relatórios de Erro e Uso, eu sempre deixo marcadas estas opções para a fim de aprimorar futuras versões do SQL Server. Não é obrigatório deixar checado estas opções.

Veja a imagem 11.

Figura 04: Instalação do SQL Server.

Figura 05: Termos de Licença.

Figura 06: Regras de suporte à instalação.

Page 13: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 13

A Figura 11 representa todas as regras para determinar se o processo de instalação será executado com sucesso, no nosso caso todas as regras foram definidas corretamente. Clique em Avançar e na próxima tela apa-recerá uma árvore com os recursos do SQL Server 2008 a ser instalado, clique em avançar novamente para procedermos com a instalação.

A instalação concluirá em pouco tempo e apresentará uma tela parecida com a Figura 12. Prontinho, a instalação do SQL Server 2008 com sua Ferramenta Management Studio foi executada facilmente e sem nenhum segredo.

Veja a imagem 12.

Configurando o SQL Server para Trabalhar em rede

Por padrão o SQL Server 2008 vem com a opção para se conectar em rede desabilitada por motivos de segurança de acesso, fazendo com que não aceite conexões vindas de outras estações de uma rede, portanto ao instalá-lo conseguiremos criar uma conexão apenas na estação onde o mesmo foi instalado.

Para habilitar estas opções devemos seguir alguns passos, vejamos a seguir.

O SQL Server Configuration Manager é o utilitário responsável por gerenciar os serviços relacionados às instâncias locais do SQL Server e os protocolos de conexões permitidos. Podemos encontrá-lo no item do menu “Ferramentas de Configurações”. Em seguida observaremos algumas configurações interessantes, conforme ilustra a Figura 13.

Figura 13: SQL Server Configuration Manager.

O SQL Server Configuration Manager gerencia três características.

- Serviços do SQL Server: É responsável por todos os serviços rela-cionados ao Banco de Dados, permitindo Iniciar, Pausar ou Reiniciar o mesmo. Podemos também configurar várias propriedades destes serviços. No nosso exemplo deixaremos o serviço SQL Server e o Navegador do SQL Server iniciado. É recomendável deixar estes serviços para iniciar automaticamente.

Figura 07: Seleção de Recursos.

Figura 08: Escolhendo a Instância SQLExpress.

Figura 9: Configuração do Servidor.

Page 14: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201114

- Configuração de Rede do SQL Server: Esta opção permite ao Administrador configurar os protocolos de rede que o SQL Server irá aceitar, no nosso caso habilitaremos o protocolo TCP/IP.

- Configuração do SQL Native Client 10.0: Define a ordem dos pro-tocolos utilizados pelos clientes que acessam o SQL Server e a criação de Alias de conexões.

O SQL Express suporta os seguintes protocolos de rede:

Veja a tabela 1.

Voltando ao assunto, para habilitar o protocolo TCP/IP, clique em Configurações de Rede/ Protocolos para SQL Express e com o botão direito escolha Propriedades. Na aba Protocolo deixe Sim para a pro-priedade Habilitado. Veja Figura 14.

Figura 14: Propriedades TCP/IP.

Na aba endereços 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 específico, localize o IP desejado (IP1, IP2, IP3 ...) e siga o mesmo procedimento. Ver Figura 15.

Figura 15: Endereços IP.

Figura 10: Configurações do Mecanismo de Banco de Dados.

Figura 11: Regras de Instalação.

Figura 12: Instalação Concluída.

Page 15: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 15

Faça a mesma configuração para Configuração do SQL Native Client 10.0.

Não esqueça que sempre quando é feita uma alteração na configuração do Banco de Dados é necessário reiniciar os serviços relacionados.

Importante: Crie exceções no Firewall para per-mitir a conexão remota do SQL Server, para quem não sabe, basta entrar no Painel de Controle e no item Firewall do Windows adicione duas portas, a 1433 como TCP e outra como UDP e a 1434 como TCP e UDP. Veja na Figura 17 o resultado de nossas configurações.

Veja a imagem 16

Utilizando o SQL Server Management Studio

Para realizar os testes abra o SQL Server Mana-gement e coloque o IP ou o nome do servidor e em seguida o nome da instância do SQL Server, no meu caso o IP onde o Banco de Dados está instalado é o 192.168.0.157 e o nome da instância é a SQLEx-press. Escolha o tipo de Autenticação do SQL Server seguido de seu usuário e senha cadastrado quando fizemos a instalação do mesmo. A Figura 18 ilustra este procedimento. Pronto, estamos trabalhando com o Banco de Dados em rede.

Figura 17: Conectar ao Servidor.

Conclusão

Vimos neste artigo à instalação e configuração deste poderoso Banco de Dados utilizado por muitas pequenas e médias empresas. Foram apre-sentadas algumas características e funcionalidades com intuito de trazer uma gama de informações úteis aos senhores associados. Apesar de ser uma versão gratuita não deixa de fornecer recursos

Protocolo de rede Descrição Padrão

Memória Compartilhada

Permite conectar a uma instância do SQL Server Express rodando no mesmo computador.

Habilitado

TCP/IP Permite que outras estações se conectem ao SQL Server Express por es-pecificar o nome do servidor e o nome da instância (default SQLExpress) ou o endereço IP e o nome da instância.

Desabilitado

Pipes Nomeados Permite que outras estações se conectem ao SQL Server Express por suportar vários protocolos de rede, incluindo NetBEUI, TCP/IP e IPX/SPX. Ele seleciona o protocolo de rede automaticamente baseado na configu-ração do cliente.

Desabilitado

VIA Protocolo específico para redes de sistema. Nesta rede, os dados trafegam em alta velocidade e são utilizadas para a comunicação entre servidores e/ou clusters.

Desabilitado

Tabela 1

Figura 16: Configurações no Firewall do Windows.

poderosos para manipulação e armazenamento de dados de uma forma rápida e segura. Nos próximos 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 mês que vem.

Fonte de Informaçõeshttp://www.microsoft.com/

Thiago Cavalheiro Montebugnoli é tecnólogo, formado pela Faculdade de Tecnologia de Botucatu – SP (FATEC) foi consultor técnico 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 Proces-samento de Dados da Prefeitura Municipal de Itaí-SP. Possui as seguintes certificações: MCP - Microsoft Certified Professional, MCTS - Microsoft Certi-fied Technology Specialist, MCAD - Microsoft Certified Application Developer e MCSD - Microsoft Certified Solution Developer.

Sobre o autor

Thiago Cavalheiro Montebugnoli

[email protected]

Page 16: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201116

Vou mostrar nesse artigo, algumas dicas de geradores de relatórios presentes no Del-phi. Veremos dicas de Rave Reports, Quick Re-port e Report Builder. Primeiramente, vamos customizar um preeview dos geradores de relatórios, que na sua versão original possui várias opções: navegação entre as páginas, impressão, configuração de páginas, entre muitas outras.

Mas muitos desenvolvedores sentem falta de algumas funcionalidades que não estão presentes em alguns, como exportação (PDF, HTML, DOC, TXT etc), pesquisa de textos entre outras. Veremos ainda nesse artigo, como imprimir somente os itens seleciona-dos em um DBGrid, demanda muito pedida pelos clientes.

Preparando o ambiente

Neste artigo vou usar o Delphi 2010, pois os

Crie um preeview customizado e imprima registros selecionados em um DBGrid

geradores que possuo estão disponíveis apenas nessa versão. Mas, tenho certeza que você pode usar qualquer versão recente do Delphi ou dos geradores de relatórios.

Algumas opções podem não estar presentes em todos os previews, como por exemplo, a ex-portação, onde para o Quick Report temos apenas para TXT, CSV e HTML, enquanto o Rave Reports tem as opções para PDF, HTML, RTF e TXT. Já no Report Builder a exportação para TXT e PDF, e também pode ser feita em mais opções usando componentes de terceiro.

Preview no Quick Report

Vamos criar um projeto no Delphi e salvar o mesmo em um diretório de sua preferência. Crie um novo formulário e dê o nome de “frmPreview” e salve como “ufrmPreview.pas”. No preview adicio-ne uma Toolbar e uma StatusBar. Na barra, adicione 10 botões para as principais funcionalidades.

Adicione um PopupMenu que será responsável

por mostrar as opções de exportação no Salvar da barra de ferramentas, onde configuramos a propriedade DropDownMenu apontando para o PopupMenu. Adicione um QRPreview da paleta QReport e altere a propriedade Align para alClient para que o controle ocupe todo o espaço do formulário.

Na Figura 1 temos os botões com suas res-pectivas imagens, bem como todo o layout do formulário de preview.

Figura 1. Layout do preview

Page 17: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 17

Fique a vontade para mudar o layout e colocá-lo de sua preferência.

Dica: Você pode, e eu acredito que deve, usar um ActionList para concentrar seu código e propriedades em botões e menus, e trabalhar por exemplo, com permissões, sendo mais fácil de desabilitar/habilitar bo-tões e menus.

Após o layout pronto, vamos ao código. Para os botões de navegação e de zoom temos o código da Listagem 1.

Listagem 1. Botões de navegação e zoom do relatório do Quick Report

Primeiro QRPreview1.PageNumber := 1;Anterior QRPreview1.PageNumber := QRPreview1.PageNumber - 1;Próximo 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;

Acredito que o código é simples e de fácil entendimento. Para imprimir o relatório, o código é mais simples ainda, onde precisamos apenas chamar QRPrinter.Print do QRPreview:

QRPreview1.QRPrinter.Print;

Agora vamos as opções de exportação, incluin-do no formulário os componentes QRTextFilter e QRHTMLFilter. Para exportar, simplesmente

usamos o código da Listagem 2.

Listagem 2. Exportando para HTML e TXTHTMLQRPreview1.QRPrinter.ExportToFilter(TQRGHTMLDocumentFilter.Create( ‘exportacao.html’));TXTQRPreview1.QRPrinter.ExportToFilter(TQRAsciiExportFilter.Create( ‘exportacao.txt’));

Veja que é bem simples, onde ainda temos a possibilidade de exportar para CSV (simplesmente trocando o parâmetro para TQRCommaSepara-tedFilter). No código, temos a exportação com o nome do arquivo, para melhorar, coloque um SaveDialog e dê a opção do usuário escolher o local onde o arquivo será salvo.

Mostrando o relatório no preview

Para finalizar, precisamos exibir o relatório do Quick Report no preview criado. Para isso, abra o relatório e no evento OnPreview do mesmo e adicione o seguinte código:

uses QRPrntr, ufrmPreview;...frmPreview := TfrmPreview.Create(Application);frmPreview.QRPreview1.

QRPrinter := TQRPrinter(Sender);frmPreview.ShowModal;

No OnPreview instanciamos o formulário e repassamos para a propriedade QrPrinter do QR-Preview, o relatório. Para chamar o relatório, use o seguinte código:

QuickReport2 := TQuickReport2.Create(self);try QuickReport2.PreviewModal;finally QuickReport2.Free;end;

Note que precisamos chamar o método Pre-viewModal no lugar o Preview. Execute o projeto e veja como na Figura 2 o preview do Quick Report.

Veja a figura 2. Ainda precisamos coloca o seguinte código

no evento OnClose do formulário do preview para liberar o mesmo da memória, assim não teremos mensagem de erro quando tentar chamar o rela-tório pela segunda vez:

Action := caFree;frmPreview := nil;

Figura 2. Relatório do Quick Report no preview

Page 18: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201118

Nota: a versão do Quick Report que acompanha o Delphi em versões anteriores possui poucas funcionalidades no preeview. Versões profissionais, já possuem funcionali-dades a mais em seu preeview, como veremos mais adiante neste artigo.

Preview no Rave Reports

Para o Rave Reports o formulário de preview pode ter os mesmos botões, mas para a exportação teremos duas opções a mais: PDF e DOC. Então crie um novo formulário, adicione os mesmos componentes, apenas trocando o QRPreview por RvRenderPreview e os componentes de exporta-ção: RvRenderPDF, RvRenderHTML, RvRenderRTF e RvRenderText.

O RvRenderPreview mostra o relatório, utili-zando um ScrollBox, portanto adicione um ao for-mulário (altere a propriedade Align para alClient) e faça a vinculação através da propriedade ScrollBox do RvRenderPreview. Para os botões de navegação e zoom, use o código da Listagem 3.

Listagem 3. Botões de navegação e zoom do relatório do Rave

Primeiro RvRenderPreview1.RenderPage(1);Anterior RvRenderPreview1.PrevPage;Próximo RvRenderPreview1.NextPage;Último RvRenderPreview1.RenderPage (RvRenderPreview1.LastPage);Mais Zoom RvRenderPreview1.ZoomIn;Menos Zoom RvRenderPreview1.ZoomOut;

A diferença em relação ao Quick Report esta nos nomes dos métodos, pois a funcionalidade é a

mesma. Para a exportação, adicione um RvNDRWri-ter ao formulário e digite o código da Listagem 4 nos respectivos botões, responsável pela exporta-ção do relatório.

Listagem 4. Exportando relatórios no Rave Reports

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’);

Também podemos dar a opção para o usuá-rio escolher o nome do arquivo e diretório. Para impressão do relatório precisamos adicionar um RvRenderPrinter e um RvNDRWriter ao formu-lário e adicionar o seguinte código no botão de imprimir:

RvRenderPrinter1.Render(RvNDRWriter1.Stream);

Para visualizar o relatório do Rave no preview, vamos adicionar o código da Listagem 5, que subs-creve o construtor do formulário:

Listagem 5. Código para exibir o relatório

constructor Create(AOWner: TComponent; Relatorio: TMemoryStream); reintroduce;...constructor TfrmPreview.Create(AOWner: TComponent; Relatorio: TMemoryStream);

begin inherited Create(AOWner); RvNDRWriter1.Stream := Relatorio; RvRenderPreview1.Render(RvNDRWriter1.Stream);end;

O código, recebe como parâmetro um TMe-moryStream que será repassado para a propriedade Stream do RvNRDWrite. Após, o RvRenderPreview mostra o relatório chamando o Render, passando como parâmetro o stream do RvNDRWriter.

Para finalizar, precisamos criar um relatório no Rave Reports. Após criar o mesmo, no formulário para chamar o relatório, adicione um RvProject (vinculado ao arquivo de projeto RAV) e um RvN-DRWriter, vinculando a propriedade Engine do RvProject com o RvNDRWriter1.

Após, use o código da Listagem 6 para abrir o formulário de preview com o relatório.

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);

try frmPreview.ShowModal; finally frmPreview.Release; frmPreview := nil; end;end;

Page 19: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 19

No código anterior, criamos uma variável do tipo TMemoryStream que preenche a propriedade Stream do RvNDRWriter e será passada como pa-râmetro no construtor do formulário do preview. Ao rodar a aplicação, temos o relatório do Rave no nosso preview (Figura 3) com as opções de exportação.

Veja a figura 3.

Preview no Report Builder

Novamente, o formulário de preview para o Report Builder pode ter os mesmos botões, onde modificaremos apenas alguns componen-tes. Você pode baixar uma versão trial do Report Builder no endereço www.digital-metaphors.com/download.

Neste exemplo, usaremos a versão Enterprise 12.03 para Delphi 2010, mas temos suporte para praticamente todas as versões do Delphi. Após bai-xar, instale e crie um novo projeto no Delphi, onde podemos verificar os componentes adicionados na paleta RBuilder (Figura 4).

Figura 4. Componentes do Report Builder instalados no Delphi

No formulário de preview, adicione um ppViewer e um ppDesigner. Altere a propriedade Align para alClient do ppViewer. Novamente para os botões de navegação e zoom temos o código da Listagem 7.

Listagem 7. Botões de navegação e zoom do relatório do Report Builder

Figura 3. Exibindo relatório do Rave no preview

Primeiro ppViewer1.FirstPageAnterior ppViewer1.PriorPage;Próximo ppViewer1.NextPage;Último ppViewer1.LastPage;Mais Zoom ppViewer1.ZoomPercentage := ppViewer1.ZoomPercentage + 10;Menos Zoom ppViewer1.ZoomPercentage := ppViewer1.ZoomPercentage - 10;

Para imprimir o relatório, precisamos simples-mente usar o seguinte código:

ppViewer1.Print;

Para visualizar o relatório, vamos novamente subscrever o Create do formulário, usando o código da Listagem 8.

Listagem 8. Código para abrir o relatório no Report Builder

uses ppReport;...constructor Create(AOWner:

TComponent; aReport; out appReport: TppReport); reintroduce;...constructor TfrmPreview.Create(AOWner: TComponent; out appReport: TppReport);begin inherited Create(AOWner); aReport := appReport; ppViewer1.Report := appReport; appReport.PrintToDevices;end;

O código preenche uma variável declarada na seção private do formulário, que será usada na exportação, e repassa o ppReport passado como parâmetro, para o ppViewer. A seguir, chamamos o PrintToDevices para mostrar o relatório.

Para a exportação, vamos usar o código da Listagem 9 onde temos a opção para texto e PDF.

Listagem 9. Exportação para o Report Builder

Arquivo Textowith aReport dobegin AllowPrintToFile := True; DeviceType :=

Page 20: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201120

dtTextFile; TextFileName := ‘arquivo.txt’; Print;end;

PDFwith aReport dobegin AllowPrintToFile := True; DeviceType := dtPDF; TextFileName := ‘arquivo.pdf’; Print;end;

O Report Builder apresenta uma tela de im-pressão (Figura 5), pois usamos a propriedade Allo-wPrintToFile configurada como True. Isso facilita a vida do usuário, pois ele pode configurar nome e diretório para o arquivo de exportação.

Veja a figura 5. Existe um componente de terceiro (TExtraDe-

vice) que exporta relatórios para Excel, HTML, RTF, entre outras. Para finalizar, precisamos criar um relatório no Report Builder. Após criar o mesmo, no formulário para chamar o relatório, use o código da Listagem 10.

Listagem 10. Chamando o preview do Report Builder

frmPreview := TfrmPreview.Create(Self, ppReport1);try frmPreview.ShowModal;finally frmPreview.Free;end;

No código, o formulário de preview recebe como parâmetro um ppReport, componente responsável pela criação do relatório. Os relató-rios do Report Builder podem ser gerados como arquivos externos (com a extensão RTM), então é possível adaptar o preview para carregar os arquivos externos, passando como parâmetro o nome do mesmo.

Figura 5. Tela de impressão do Report Builder

Execute o projeto e veja na Figura 6 como deve ficar o projeto onde temos o arquivo de exportação no formato PDF.

Veja a figura 6.

Imprimindo registros selecionados

A grande utilização de relatórios em um pro-

jeto necessita do reaproveitamento dos mesmos, senão teremos uma quantidade muito grande de arquivos onde os dados apresentados podem ser os mesmos.

Um exemplo: um relatório onde constam par-celas das vendas do seu cliente. Ele precisa verificar em situações diferentes as parcelas pagas, não pa-gas, vencidas, há vencer etc. se você imaginou fazer

Figura 6. Exibindo e exportando relatórios do Report Builder

Page 21: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 21

um relatório apenas e filtrar os dados no banco de acordo com a necessidade, esta “meio” certo.

Mas sua consulta vai mudar de acordo com a opção desejada e assim, terá consultas ao banco desnecessárias. O que fazer? Simples, vamos fazer um relatório apenas, retornando todas as parcelas (claro, usando outro filtro, como por exemplo, um período de datas) e filtrando os dados de acordo com a opção.

Ficou curioso como fazer? Então vamos apren-der isso e muito mais neste artigo.

Filtrando parcelas

Primeiramente, faremos o exemplo citado an-teriormente, no Quick Report. Usei aqui um banco de dados criado por mim, que estará disponível para download.

Nossa consulta retornará as parcelas de acordo com o período, independente do campo PAGO, que indica se a mesma esta paga ou não. Nossas opções de filtragem serão: Pagas (PAGO = ‘T’), Não Pagas (PAGO = ‘F’), Vencidas (parcelas não pagas até a data atual), há vencer (parcelas não pagas acima da data atual).

A consulta pelo período vai se basear pelo campo DATA_LANCAMENTO. No Delphi, crie um novo projeto (ou utilize o que estamos usando), e crie a consulta ao banco de dados, que terá o comando SQL da Listagem 11.

Listagem 11. Comando SQL da consulta

select PA.ID_PARCELA, CO.NR_CONTRATO, CL.CLIENTE, PA.NR_PARCELA, PA.DATA_VENCIMENTO, PA.VALOR_PARCELA, PA.PAGOfrom PARCELAS PA inner join CLIENTES CL on (PA.ID_CLIENTE = CL.ID_CLIENTE) inner join CONTRATO CO on (PA.ID_CONTRATO = CO.ID_CONTRATO)where PA.DATA_LANCAMENTO between :DATAINI and

:DATAFIM and PA.STATUS = ‘A’order by PA.DATA_VENCIMENTO, CO.NR_CONTRATO, PA.NR_PARCELA

Configure os parâmetros no componente. Nossa consulta esta pronta, então precisamos criar o relatório. Crie um relatório no Quick Report com a consulta, usando o layout da Figura 7.

Veja a figura 7.

Para testar o relatório, vamos criar um novo formulário e adicionar os controles, conforme a Figura 8.

Figura 8. Formulário de filtragem de dados

No Data Module, vamos criar uma procedure que irá filtrar o nosso ClientDataSet que retorna os dados da consulta. Uso o código da Listagem 12.

Listagem 12. Procedure para filtrar os dados

procedure TDM.Filtrar(dtInicio, dtFim: TDateTime);begin cdsConsulta.Close; cdsConsulta.Params[0].AsDate := dtInicio; cdsConsulta.Params[1].AsDate := dtFim; cdsConsulta.Open;end;

Voltando ao formulário de filtros, adicione o código da Listagem 13 para o botão Relatório. Adi-cione no uses a unit do Data Module e relatório.

Listagem 13. Chamada ao relatório

//verifica se escolheu um itemif RadioGroup1.ItemIndex = -1 then MessageDlg(‘Escolha uma opção de Filtro’, mtError, [mbok], 0)elsebegin //filtra a consulta DM.Filtrar(dtInicial.Date, dtFinal.Date); try frmRelatorioConsulta := TfrmRelatorioConsulta.Create(nil); frmRelatorioConsulta.QuickRep1.Preview;

Figura 7. Relatório no Quick Report

Page 22: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201122

finally frmRelatorioConsulta.Free; end;end;

Nota: dtInicial e dtFinal são controles DateTimePicker colocados no formulário.

Caso deseje testar, coloque o Data Module como primeiro formulário a ser criado, a seguir o formulário de filtragem. Até o momento, nossos dados estarão apenas sendo filtrado pela consulta principal (Listagem 11).

Para que possamos implementar a filtragem de acordo com as opções, adicione uma variável públi-ca no formulário do relatório chamada “iIndex”, do tipo integer. Passaremos para esse variável a opção escolhida no RadioGroup.

Na chamada ao relatório, modifique o códi-go para repassar o valor do RadioGroup para a variável:

frmRelatorioConsulta.iIndex := RadioGroup1.ItemIndex;

Agora a parte principal do nosso exemplo, onde vamos filtrar os dados da consulta, de acor-do com a opção escolhida. Toda a mágica esta no evento BeforedPrint da banda Detail. Nela temos um parâmetro chamado PrintBand do tipo boolean, que indica se o item que esta sendo “impresso”, deve ser “impresso”.

Assim, com o valor que temos da variável (iIn-dex), podemos filtrar os dados. No referido evento, utilize o código da Listagem 14.

Listagem 14. Filtrando os dados

case iIndex of 0: PrintBand := (QuickRep1.DataSet.FieldByName(‘PAGO’).AsString = ‘T’); 1: PrintBand := (QuickRep1.DataSet.FieldByName(‘PAGO’).AsString = ‘F’);

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;

Veja como é simples filtrarmos os dados, basta configurar corretamente o parâmetro, usando o va-lor dos campos que temos vinculados ao relatório. Neste exemplo, usei a propriedade DataSource do relatório, mas poderíamos utilizar diretamente o controle do Data Module, por exemplo.

Faça os testes para as várias opções de filtra-gem (Figura 9).

Veja a figura 9.

Rave Reports

Para o Rave, vamos usar a mesma consulta. Primeiramente, crie um relatório 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 relatório, de-

vemos adicionar um RvDataSetConnection e ligar sua propriedade DataSet com o cdsConsulta. Faça a ligação do controle com o relatório (DataViews) para exibir os dados.

Nota: Caso exista alguma dúvida em relação a conexão de dados em relatórios do Rave, sugiro uma pesquisa no site da Nevrona (fabricante do Rave) ou na internet

Figura 9. Opções de filtragem do relatório, sem mudar a consulta ao banco

Page 23: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 23

sobre o assunto.

Após configurar o relatório, modifique a chamada ao relatório do Quick, no formulário de filtragem com o seguinte código:

DM.iIndex := RadioGroup1.ItemIndex;DM.Filtrar(dtInicial.Date, dtFinal.Date);DM.RvProject1.Execute;

Veja que temos uma variável pública no Data Module que recebe o valor do RadioGroup. Por que fazemos isso? Por que o responsável por filtrar os dados esta no Data Module, o RvDataSetConnec-tion. No evento ValidateRow do controle, vamos fazer algo semelhante ao exemplo anterior. Veja o código na Listagem 15.

Listagem 15. Filtrando os dados para o Rave Reports

case iIndex of 0: ValidRow := cdsConsultaPAGO.AsString = ‘T’; 1: ValidRow := cdsConsultaPAGO.AsString = ‘F’; 2: ValidRow := (cdsConsultaPAGO.AsString = ‘F’) and (cdsConsultaDATA_VENCIMENTO.AsDateTime < Date); 3: ValidRow := (cdsConsultaPAGO.AsString = ‘F’) and (cdsConsultaDATA_VENCIMENTO.AsDateTime > Date);end;

Código bastante semelhante ao do exemplo do Quick Report, ficando a diferença que acessamos diretamente o Field no ClientDataSet. Faça os testes e verifique as filtragens (Figura 11).

Veja a figura 11.

Imprimindo registros selecionados em um DBGrid

Esse exemplo é bastante interessante. Imagine que você possa dar ao seu usuário a possibilidade de escolher itens em um DBGrid e imprimir em um

Figura 10. Relatório no Rave

relatório os itens selecionados. O exemplo continua bem simples, usaremos praticamente a mesma técnica anterior, com apenas uma modificação em seu código.

Crie uma consulta (pode se usada a mesma) e mostre-a em um DBGrid. Altere as seguintes propriedades do DBGrid:

Options>dgRowSelection = TrueOptions> dgAlwaysRowSelection = TrueOptions>dgMultiSelect = True

Crie um novo relatório no Quick Report, usando a consulta anterior. No mesmo evento do exemplo anterior, vamos repassar para o parâme-tro PrintBand apenas os registros selecionados no Grid, usando o seguinte código (adicione no uses do relatório a unit do formulário):

PrintBand := frmSelecionar.DBGrid1.SelectedRows.CurrentRowSelected;

Estamos indicando assim, que queremos

Figura 11. Aplicando o exemplo de filtragem no Rave

Page 24: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201124

imprimir apenas os registros que esta marcados no DBGrid. Para o teste, rode a aplicação, marque alguns itens no DBGrid (utilizando a tecla CRTL) e chame o relatório (Figura 12).

Veja a figura 12.

Para o exemplo em Rave, a idéia é a mesma, então crie um novo relatório e no código para filtrar os registros selecionados do DBGrid, use o seguinte código:

ValidRow := frmSelecionar.DBGrid1.SelectedRows.CurrentRowSelected;

Neste exemplo didático, usamos a unit de um formulário no Data Module, o que não é correto. Em uma aplicação real, você pode passar como parâmetro, usar variáveis etc. Veja na Figura 13 o relatório em execução no Rave.

Veja a figura 13.

Conclusão

Vimos neste artigo como criar um preview para os geradores de relatórios mais usados pelos desen-volvedores Delphi. Algumas funcionalidades a mais podem ser implementadas para alguns geradores, como navegar para uma determinada página infor-mada pelo usuário, formulário de impressão, onde o usuário indica a quantidade de cópias etc.

Lembrando que não usamos o StatusBar onde podemos colocar o total de páginas, nome do rela-tório, entre outras informações. Fica a motivação para você implementar muitas funcionalidades legais no preview. Se você quiser disponibilizar suas alterações para a comunidade, envie para mim que publicarei no meu site para que todos possam aprender.

Vimos também como é simples de filtrar dados em relatórios do Rave ou Quick, sem a necessidade de realizarmos várias consultas ao banco de dados, ganhando assim, agilidade e performance a aplica-ção. Também podemos deixar o usuário escolher os registros de uma consulta e imprimir o mesmo, adicionando assim valor ao seu projeto.

Um grande abraço a todos e sucesso em seus projetos!

Figura 12. Imprimindo apenas os registros selecionados

Figura 13. Imprimindo os registros selecionados no Rave

É Técnico em Processamento de Dados, desenvolvedor Delphi/C# para aplicações Web com ASP.NET e Windows com Win32 e Windows Forms. Palestrante da 4ª edição da Borland Conference (BorCon).

Autor de mais de 60 artigos e de mais de 300 vídeos aulas publicadas em revistas e sites especializados. É consultor da FP2 Tecnologia (www.fp2.com.br) onde ministra cursos de programação e banco de dados. É desenvolvedor da Paradigma Web Bussi-ness em Florianópolis-SC.

Sobre o autor

Luciano Pimenta

www.lucianopimenta.net

Page 25: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 25

Olá pessoal,

Voltamos com a segunda parte da apresentação do novo InterBase XE. Quero antes aproveitar essa introdução do artigo para exaltar o sucesso dessa nova versão do InterBase. A apresentação durante a Delphi Conference 2010 foi um sucesso e a procura pelo produto está fantástica. Isso realmente mostra que o novo InterBase XE está se tor-nando um marco na já brilhante história desse nosso banco de dados. Em breve o material da apresentação estará disponível no site da Embarcadero (http://edn.embarcadero.com). Vale a pena conferir.

Pois bem, nessa edição vamos dar con-tinuidade na apresentação do produto. No artigo anterior nós falamos sobre o suporte à plataforma 64 bits, sobre a ampliação da capacidade de gerenciamento de memória, sobre o suporte à tecnologia de Cloud Compu-ting e sobre o aperfeiçoamento na segurança do produto através do Strong Encryption Password. Agora vamos mostrar em detalhes

APRESENTANDO O NOVO INTERBASE XEPARTE 2

outro recurso muito legal do novo InterBase XE, uma melhoria no suporte à linguagem SQL: o suporte ao comando DML EXECUTE STATEMENT.

Apesar de já suportado por outros bancos de dados há um bom tempo, esse comando disponibilizado no InterBase veio em boa hora. O EXECUTE STATEMENT permite a nós desenvolvedores ampliar e explorar mais ainda os recursos de programação nativa no banco, incrementando nossas Stored Pro-cedures e facilitando nossa vida em muitas situações. Detalhando:

O COMANDO EXECUTE STATEMENT

O comando DML Execute Statement permite a chamada de outro comando DML ou DDL dentro de um código de uma Stored Procedure. Esse recurso é muito útil, pois podemos condicionar a execução de um determinado comando SQL dentro de nossa programação procedural. Particularmente penso que sua execução se faz bem mais interessante,

principalmente pela possibilidade de manipular estruturas de banco de dados dentro de uma procedure. Veremos um exemplo dessa situação mais adiante.

O comando Execute Statement pode ser exe-cutado em três condições distintas:

• Quando nenhuma linha de resposta é retornada do comando;

• Retornando uma única linha de resposta do comando;

• Retornando múltiplas linhas de resposta do comando.

Em cada uma das situações veremos combina-ções e exemplos de aplicação do comando.

Algumas considerações sobre o uso do Execute Statement:

1. O comando Execute Statement só pode ser utilizado dentro de Stored Procedures;

2. É preciso que tanto o Servidor quan-do os Clientes estejam atualizados com o novo

Page 26: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201126

InterBase XE. Se o servidor for InterBase XE e os clientes estiverem utilizando uma versão antiga da DLL cliente GDS32.DLL, o comando poderá retornar erro;

3. É importante ressaltar que para rodar essa Stored Procedure adequadamente, nossos bancos de dados devem estar compatíveis com a versão InterBase XE (ODS 15.0). Além disso, a interface SQL utilizada, seja o IBConsole, IBExpert ou qualquer outra, também deve estar compatível com o InterBase XE. Até o momento, a última versão do IBExpert, por exemplo, não estava to-talmente compatível. Ao tentar criar a Stored Pro-cedure acima ocorre um erro: Parsin Error. Porém o a Stored Procedure é criada normalmente e seu conteúdo também funciona. Utilizando o IBConsole atualizado com a última versão, o problema não ocorre.

Imagem 1 – Mensagem de erro quando executamos o comando Execute Statement via IBExpert.

4. A performance do comando executado pelo Execute Statement afetará diretamente a execução da própria procedure associada. Assim devemos ter a atenção para que esse comando não penalize a execução do restante da procedure que venha a ser executado após o Execute Statement;

5. Quando executávamos comandos DML, como um Select, Update ou Delete, dentro da Stored Procedure, o InterBase gravava o plano de pesquisa e execução do DML ao compilarmos a procedure. Assim corríamos o risco, por exemplo, de uma query executada por uma procedure não ter uma performance tão interessante, pois essa query poderia ter associado um índice de busca não adequado quando a procedure foi compilada. Esse problema não acontece com o comando Execute Statement. Ele identifica o melhor índice de busca à cada execução, tornando o processo mais limpo e eficiente;

6. Ao compilar uma procedure que contém um Execute Statement, caso o comando executado pelo Execute Statement viole alguma Constraint definida, essa violação não será validada. A Excep-tion de erro só será apresentada no momento da execução do Execute Statement.

EXECUTE STATEMENT SEM NENHUMA

LINHA DE RETORNO

É comum a situação onde precisamos enviar para nossos clientes um script de atualização da estrutura do banco de dados. Criamos tabelas, al-teramos campos, criamos índices, enfim. O normal nessa situação é prepararmos um script contendo todas as alterações necessárias e enviamos para nossos clientes. Legal. Mas certamente você já deve ter encontrado a situação 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 não existe mais na base do cliente. Agora com o Execute Statement podemos criar uma procedure que verifique antes a existência da estrutura que desejamos alterar/incluir/excluir e então 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 não:

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)asdeclare 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; endend^

SET TERM ; ^

Nesse exemplo criamos uma Stored Procedure Chamada SP_VALIDA_DDL com três parâmetros de entrada:

1. O nome da tabela que desejamos alte-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. Pri-meiramente 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 não retorne qualquer resulta-do (norows = 0), significa que a coluna não existe na tabela. Agora podemos montar um comando DDL para criar a coluna.

Esse passo é indicado logo abaixo, quando a variável QRY recebe o comando DDL da criação 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 através da variável QRY.

Um exemplo de chamada da Stored Procedure acima pode ser:

EXECUTE SP_VALIDA_DDL(‘T_ESTADO’,’SIGLA’,’CHAR(2)’);

Nesse exemplo estamos tentando criar uma nova coluna SIGLA na tabela T_ESTADO tipo CHAR(2). Usando a técnica do Execute Statement, essa coluna será criada somente se a mesma já não existir na tabela referenciada, não retornando erro quando ela já existir.

EXECUTE STATEMENT COM UMA ÚNI-CA LINHA DE RETORNO

Outra situação interessante para o uso do comando Execute Statement é quando precisamos extrair uma determinada informação, como por exemplo, o último código sequencial de um campo chave de uma determinada tabela, mas justamente

Page 27: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 27

não sabemos ao certo o nome da tabela. Essa de-cisão pode vir no momento de execução. Vejamos o exemplo abaixo:

SET TERM ^ ;

CREATE PROCEDURE SP_MAXCOD ( TABLE_NAME VARCHAR(50), FIELD_NAME VARCHAR(50))RETURNS ( MAXNO INTEGER)ASDECLARE VARIABLE QRY VARCHAR(200);BEGINQRY = ‘SELECT MAX(‘ || :FIELD_NAME || ‘) FROM || ‘ :TABLE_NAME ;EXECUTE STATEMENT QRY INTO :MAXNO;SUSPEND;END^

SET TERM ; ^

No exemplo acima, criamos uma Stored Pro-cedure chamada SP_MAXCOD que recebe como parâmetros de entrada o nome de uma tabela e o nome de uma coluna, retornando como resultado o valor máximo encontrado na coluna informada para a tabela informada. Podemos assim utilizar essa informação para identificar o próximo valor para utilizarmos no campo ou como parte de um cálculo de uma validação, enfim, chamar essa Stored Procedure como parte de outras Stored Procedures ou Triggers e ter de maneira dinâmica a informação.

Um exemplo de chamada da Stored Procedure acima pode ser:

EXECUTE SP_MAXCOD(‘T_FUNCIONARIO’,’COD_FUNC’);

Nesse exemplo a procedure retornará o maior valor do campo COD_FUNC encontrado na tabela T_FUNCIONARIO.

EXECUTE SP_MAXCOD(‘T_CLIENTE’,’COD_CLIENTE’);

Já nesse exemplo a procedure retornará o

maior valor do campo COD_CLIENTE encontrado na tabela T_CLIENTE. E assim por diante.

EXECUTE STATEMENT COM MÚLTI-PLAS LINHAS DE RETORNO

Mais uma possibilidade de uso do comando Execute Statement. É comum encontrarmos bancos de dados com tabelas distintas para clientes do tipo Pessoa Física e Jurídica. Ou mesmo tabelas separadas para Clientes e Fornecedores. Pois bem, utilizando o recurso do Execute Statement, podemos criar uma procedure que nos retorne in-formações relativas a clientes, mas informando em tempo de execução, sobre qual tabela queremos as informações:

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) )ASDECLARE VARIABLE QRY VARCHAR(200);BEGINQRY = ‘SELECT COD_CLIENTE, RAZNOME, CPFCNPJ, END, TEL FROM ‘ || :TABLE_NAME ;

FOR EXECUTE STATEMENT QRY INTO :COD_CLIENTE, :NOME_RAZAO, :CPF_CNPJ, :ENDERECO, :TELEFONE;DOSUSPEND;END^

SET TERM ; ^

No exemplo acima criamos uma Stored Pro-cedure chamada SP_DADOS_CLIENTE que nos retornará alguns campos comuns encontrados em tabelas de clientes – Código do cliente, Razão Social, CPF ou CNPJ, Endereço, Telefone, enfim. Poderíamos muito bem executar diretamente a query de Select para obter essas informações.

Mas utilizando o recurso do Execute Statement, podemos informar como parâmetro de entrada na Stored Procedure, sobre qual tabela iremos rodar a query (indicado pelo parâmetro TABLE_NAME).

Esse recurso nos da a liberdade de, por exem-plo, trabalhar como parte de outra Stored Proce-dure que, dependendo de determinada situação encontrada, solicite informações de uma tabela ou de outra, da tabela de Clientes ou da tabela de Fornecedores, baseado em critérios e condições analisadas.

Exemplos de chamada da Stored Procedure:

EXECUTE SP_DADOS_CLIENTE(‘T_CLIENTE’);

Nesse exemplo a procedure retornará os dados (Código do cliente, Razão Social, CPF ou CNPJ, Ende-reço e Telefone) a partir da tabela T_CLIENTE.

EXECUTE SP_DADOS_CLIENTE(‘T_FORNECEDOR’);

Nesse outro exemplo a procedure retornará mesmos campos, mas agora a partir da tabela T_FORNECEDORES.

(…)ASDECLARE 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’) THENFOR SELECT * FROM SP_DADOS_CLIENTE(‘T_FORNECEDOR’) INTO :COD_CLIENTE, :NOME_RAZAO, :CPF_CNPJ,

Page 28: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201128

:ENDERECO, :TELEFONE; DO SUSPEND; END

(…)END^

No exemplo acima, podemos chamar a Stored Procedure SP_DADOS_CLIENTE a partir de outra Stored Procedure qualquer. Quando a variável TIPO_CLIENTE for igual à “C”, então passamos a tabela T_CLIENTE como parâmetro para a cha-mada do Execute Statement. Já quando a variável TIPO_CLIENTE for igual à “F”, passamos a tabela T_FORNECEDOR como parâmetro para a chamada do Execute Statement.

CONCLUSÃO

Os exemplos e situações que passamos são apenas algumas situações possíveis de se trabalhar com o recurso do Execute Statement. Dá-nos uma ideia do potencial de uso do comando. Para quem utiliza somente o InterBase ou mesmo outros bancos de dados que também suporte esse recur-so padrão SQL, agora pode explorar a fundo essa

novidade, incrementando o uso e tratamento em Stored Procedures e Triggers.

O novo comando DML Execute Statement vem como que coroar o lançamento do InterBase XE. Mostra a preocupação da Embarcadero em desen-volver o produto e torná-lo cada vez mais atrativo ao desenvolvedor. Afinal, somos nós desenvolve-dores que avaliamos, utilizamos e propagamos o produto no mercado.

Fica aqui novamente o convite para testarmos o produto, sempre lembrando que nós desenvolve-dores temos direito de uso de uma versão gratuita do InterBase XE – a Developer Edition. Podemos baixar tanto a versão 62 bits, quanto a 32 bits. Basta entrar, se cadastrar e baixar o produto através do

site da Embarcadero através do link abaixo. Essa edição Developer nos permite utilizar e explorar todos esses novos: http://www.embarcadero.com/products/interbase. Fiquem ligados também no canal de notícias do InterBase, através da co-munidade InterBase no Embarcadero Developer Network em português: http://edn.embarcadero.com/br/interbase. Em breve com mais novidades do InterBase aqui na The Club Megazine.

Referência:

InterBase XE Language Reference Guide – Capitulo 3.

Felipe Santos é especialista em InterBase. Trabalha com o InterBase desde 2001. atuando como consultor e instrutor do produto em todo Brasil. Especialista em ambientes críticos. Atua e trabalha com os maiores clientes do InterBase no Brasil. Participante ativo na comunidade, com diversos artigos publicados. Participante do grupo de beta testers mundial do produto. Palestrante em eventos como IB Tour, Borcon Conference, CodeRage Latin América, Delphi Developers Day, Linux Day, entre outros. Atualmente trabalhando na área técnica do InterBase na Presence Tecnologia – agente oficial especializado do produto no Brasil.

Sobre o autor

Felipe Santos

[email protected]

Page 29: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011 29

Dicas DELPHILimpar Edits e Retornar valores apagados

Em uma de nossas últimas edições, publicamos uma dica para limpar todos os edits de um formulário e depois retornar os valores apagados.

Os códigos a seguir são uma nova abordagem dessa dica, utilizando ao invés de eventos procedures genéricas, que no caso estarão contidas em uma unit à parte de qualquer projeto.

Com essa abordagem, as procedures passam a não depender de nenhum formulário nem mesmo de quantas edits existem nesse formulário.

A unit que iremos criar para esse exemplo recebe o nome de Funcoes.

Na seção interface, que é a seção da unit que será exportada para o projeto que fará uso da mesma, iremos declarar o seguinte:

uses Sysutils,Windows,Forms,StdCtrls;

procedure CleanEdits(Cleaner:Boolean;Form:TForm);

var EditTexts:array of string; EditNames:array of string;

Na sequência, na seção implementation colocaremos o código das proce-dures de “apoio” a procedure CleanEdits.

Começaremos pela função EditTextByName. Essa função 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 código:

function EditTextByName(EditName:string):string;var i:integer;begin Result:=’’; for i:=0 to VarArrayHighBound(EditNames,1)do

if(EditNames[i]=EditName)then Result:=EditTexts[i];end;

Veja que na função EditTextByName temos a utilização dos arrays Edit-Names e EditTexts. Esses arrays foram declarados na interface e receberão respectivamente os nomes das edits do formulário a ser limpo e os textos das edits do mesmo formulário.

O preenchimento desses arrays é feito pela procedure FillArrays. A proce-dure FillArrays possui em seu corpo a função EditsCount, que é a responsável por retornar para a função FillArrays a quantidade de edits existentes no Formulário.

Segue o código da procedure FillArrays e dentro dela a função Edits-Count:

procedure FillArrays(Form:TForm);

function EditsCount:Integer; var i, iCount:integer; begin iCount:=0;

for i:=0 to Form.ComponentCount-1 do if(Form.Components[i] is TEdit)then Inc(iCount);

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;

Page 30: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 201130

Por fim iremos a codificação da procedure que será vista pelos projetos que utilizarão essa unit: A procedure CleanEdits, que declaramos na interface.

A procedure CleanEdits tanto fará a limpeza das edits como a posterior “reversão” dessa limpeza, que é o preenchimento das edits com os valores que as mesmas continham antes da limpeza. O controle da tarefa, se é limpeza ou “reversão” é feita pelo parâmetro Cleaner. Quando esse parâmetro está true, será realizada a limpeza das edits. Quando estiver false, será realizada a “reversão” da limpeza.

Segue o código:

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;

Com a procedure CleanEdits concluímos a codificação da unit Funcoes.

Vamos agora testar sua funcionalidade.

Inicie um novo projeto no Delphi e salve-o em um diretório de sua prefe-rência. Coloque a unit Funcoes nesse mesmo diretório.

Acesse no Delphi o menu Project – Add to Project e inclua no projeto a unit Funcoes.

Na unit do formulário da aplicação, inclua no uses a unit Funcoes.

Declare na seção var da unit do formulário principal a variável Cleaner, do

tipo boolean. Essa variável será utilizada para o controle do limpar – desfazer das edits. Essa variável deverá ter o valor True inicial.

Monte o layout da aplicação de testes com algumas edits e um botão limpar. Um exemplo de layout pode ser visto na figura a seguir:

No evento Onclick do botão limpar iremos fazer uso da procedure Clea-nEdits, além de um controle do limpar – desfazer.

Segue o código:

procedure TForm1.Button1Click(Sender: TObject);begin CleanEdits(Cleaner,Self); Cleaner:=not Cleaner;

if(Cleaner)then Button1.Caption:=’Limpar’ else Button1.Caption:=’Desfazer’;end;

Anuncie

conosco

Solicite um orçamento:

Skype: theclub_cadastro

E-mail: [email protected]

Fone: (14) 3732-1529

Anuncie na revista e ganhe um

banner publicitário no site do The Club

Page 31: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011

Page 32: The Club - megazinedo Interbase XE, no artigo: “Apresentando o novo Interbase XE – parte 2”. Para quem gosta de se aventurar pelo universo da programação Web, trago esse mês,

março 2011