Escolar Documentos
Profissional Documentos
Cultura Documentos
EDITORIAL
O AJAX representa a segunda geração dos aplicativos para Web, fo-
cados na colaboração entre pessoas, um dos pilares da Web 2.0. Não
falamos apenas de uma evolução na plataforma Web, mas de uma
Ano 7 - 87ª Edição - 2007 - ISSN 1517990-7 Impresso no Brasil mudança profunda em como os aplicativos são escritos. Tecnicamente
falando, o AJAX permite a comunicação assíncrona de páginas com
Corpo Editorial Atendimento ao Leitor o servidor Web, permitindo ainda a atualização parcial de pequenas
Diretor Editorial e Administrativo A DevMedia conta com um departa- porções da tela, ao invés do refresh total. Suas aplicações vão ser se-
Gladstone Matos mento exclusivo para o atendimento ao melhantes a aplicações Desktop e agora sim, cada vez mais veremos
gladstone@neoficio.com.br leitor. Se você tiver algum problema no
recebimento do seu exemplar ou pre- sistemas sendo escritos para Web e não mais para Desktop. Nesta
Editor de Arte cisar de algum esclarecimento sobre edição, o Fabrício traz um excelente artigo que mostra a integração
Vinicius O. Andrade assinaturas, exemplares anteriores, Delphi e AJAX, aliados na construção de uma aplicação de pesquisas
viniciusoandrade@gmail.com endereço de bancas de jornal, entre
outros, entre em contato com: incrementais em bancos de dados Firebird.
Capa Carmelita Mulin Nos artigos que produzi para esta edição, o tema principal é ASP.
Antonio Xavier www.devmedia.com.br/central/default.asp
webdesigner@devmedia.com.br (21) 2220-5375 NET. Aprenda a criar clientes em ASP.NET para um servidor DataSnap.
Kaline Dolabella Com isso, você poderá integrar seu atual sistema multicamadas com a
Editor Geral Gerente de Marketing e Atendimento
Guinther Pauli melhor tecnologia para desenvolvimento Web. No outro artigo, mostro
kalined@terra.com.br
guinther@devmedia.com.br (21) 2220-5375 como obter performance no acesso ao banco Firebird usando ADO.NET.
Editor Técnico Publicidade Saiba como funciona o Connection Pooling, como usar corretamente
Luciano Pimenta Para informações sobre veiculação de DataReaders e DataSets, cache, Stored Procedures e muito mais.
lucianopimenta@clubedelphi.net anúncio na revista ou no site entre em
O Adriano inicia nesta edição um mini-curso que mostra como criar
contato com:
Revisão um sistema completo de contas a pagar e cobrança, utilizando as
Kaline Dolabella
Rafael de Castro Santos publicidade@devmedia.com.br principais tecnologias atuais do desenvolvimento Delphi: arquitetura
rafael@devmedia.com.br
Para fechar parcerias ou ações espe- Client/Server, banco Firebird, interface VCL e acesso dbExpress. Em
Distribuição cíficas de marketing com a DevMedia, seu outro artigo, Adriano apresenta um artigo que há tempos era solici-
Fernando Chinaglia Dist. S/A entre em contato com:
Rua Teodoro da Silva, 907 tado: como imprimir em impressoras matriciais usando o Delphi. E para
Jeff Wendell
Grajaú - RJ - 206563-900 finalizar, o Maikel fala sobre segurança de sistemas.
jeff@devmedia.com.br
Sucesso a todos e boa leitura!
Guinther Pauli
Apoio guinther@devmedia.com.br
Microsoft Certified: MCP, MCAD, MCSD.NET
Borland Certified: Delphi 6, 7, 2005, 2006, Web, Kylix
A revista ClubeDelphi é parte integrante da assinatura ClubeDelphi
PLUS. Para mais informações sobre o pacote PLUS, acesse:
http://www.devmedia.com.br/clubedelphi/portal.asp Fale com o Editor
É muito importante para a equipe saber entre em contato com os editores, informan-
o que você está achando da revista: que do o título e mini-resumo do tema que você
tipo de artigo você gostaria de ler, que gostaria de publicar:
ÍNDICE artigo você mais gostou e qual artigo
você menos gostou. Fique a vontade para Guinther Pauli - Editor da Revista
entrar em contato com os editores e dar a guinther@devmedia.com.br
06 - AJAX – Buscas incrementais
sua sugestão!
Fabrício Desbessel Luciano Pimenta - Editor do Site
Se você estiver interessado em publicar
um artigo na revista ou no site ClubeDelphi, lucianopimenta@clubedelphi.net
12 - ASP.NET e DataSnap
Guinther Pauli
Portal do Assinante
18 - Performance no Firebird e ADO.NET A ClubeDelphi tem uma novidade para você que comprou este NÃO A
C
PER
Guinther Pauli exemplar na banca de jornal: você pode acessar GRATUITAMENTE,
o Portal do Assinante ClubeDelphi!
44 - Segurança de Sistemas O acesso é válido por 30 dias a partida da data de lançamento da revista. Todos os
Maikel Marcelo Scheid meses a ClubeDelphi lhe dará uma senha válida para acessar o portal. Comprando a
revista regularmente em bancas, você terá acesso ininterrupto a ele!
Edição 87 - ClubeDelphi 3
www.clubedelphi.net/portal
Caro Leitor,
. : : DESTAQUE : : .
O portal ClubeDelphi PLUS é a continuação, na Web, da Confira no portal ClubeDelphi PLUS, 20 vídeo aulas sobre dicas avançadas
revista ClubeDelphi. O portal recebe um conteúdo novo de ClientDataSet
todo dia e hoje conta com: i) mais de 390 vídeo aulas; ii)
6 cursos online; iii) 1 livro eletrônico gratuito, de Guinther Curso Online de ClientDataSet
Pauli, sobre ADO.NET e BDP; iv) mais de 150 artigos http://www.devmedia.com.br/articles/listcomp.asp?keyword=cursoclientdataset
exclusivos (que não foram publicados na revista)!;
Acesse o portal ClubeDelphi PLUS e receba muito mais
conteúdo sobre Delphi! E o que é melhor: de graça!
Todo leitor da revista ClubeDelphi, seja ele assinante ou Últimas Vídeo-Aulas (Somente para assinantes)
comprador da revista em bancas, tem acesso ao portal (para
quem compra em bancas, o acesso é válido por 30 dias). Sistema completo com Delphi 7, dbExpress e Firebird 2.0
Se você é assinante, utilize o seu login e senha pessoais Acompanhe a criação de um sistema completo de gerenciamento de locadora,
para acessar o portal. Se você comprou em bancas, utilize usando Delphi, dbExpress e Firebird 2.0. Luciano Pimenta mostrará todos os passos
o login e senha publicados na página do editorial desta necessários para a criação do projeto em todas as fases de implementação, desde a
edição. criação do banco de dados, até a migração para .NET.
Confira a seguir as últimas novidades do portal!
Criando uma tela de consulta dinâmica – Partes IV e V
Boa leitura e sucesso!
Veja nessa vídeo aula de Paulo Quicoli, como criar um tela de consulta dinâmica.
Equipe DevMedia
O portal ClubeDelphi PLUS conta com 6 cursos online, confira! Componente Window (Janela) no Delphi for PHP
Veja nessa vídeo aula de Fabricio Desbessel, como trabalhar com o componente
Sistema completo com Delphi 7, dbExpress e Firebird 2.0 Window no Delphi for PHP.
[Luciano Pimenta]
Apresentando a suíte UserControls - Parte II
Aplicações WEB com IW e Delphi 7 (Delphi Win32)!
Veja nessa vídeo aula de Paulo Quicoli a suíte User Controls.
[Guinther Pauli]
A
tecnologia AJAX continua sendo MagicAjax
a mais importante inovação em Esse framework é gratuito, está na release
aplicações Web. Temos vários 0.3.0 e pode ser baixado no endereço oficial
artigos e vídeo aulas que mostram a do projeto: www.magicajax.net. Para utilizar,
utilização dessa tecnologia em inúmeros precisamos adicionar uma referência para
ambientes e frameworks. Na edição 75 a DLL do MagicAjax no projeto ASP.NET.
apresentei o MagicAjax, um framework Crie um novo projeto do tipo ASP.NET
que agiliza em muito o desenvolvimento Web Application - Delphi for .NET. No Project
no Delphi 2006 de aplicações com a tec- Manager selecione o item References e clique
nologia AJAX. com o botão direito para abrir o menu de
Inúmeros foram os e-mails que recebi contexto e escolha Add Reference.
com questões de como e onde utilizar o Na tela de Add Reference, com a aba
AJAX. Um questionamento interessante .NET Assemblies selecionada, clique no
foi verificar a possibilidade de fazer uma Browse e encontre o arquivo MagicAjax.
busca incremental utilizando o AJAX, ao dll a partir do diretório onde você o des-
melhor estilo do Google, ou seja, você di- compactou. Clique em OK para fechar o
Fabrício Desbessel gitará as iniciais do texto e os resultados editor (Figura 1).
(fabricio@fabricio.pro.br) apresentados serão exibidos através de No Project Manager, clique duas vezes
é professor de Linguagem de Programação do uma consulta ao banco de dados. no arquivo Web.config pois precisaremos
Curso Técnico em Informática do Colégio Fre- Isso tudo sem refresh na página da editá-lo, informando à aplicação para tra-
derico Jorge Logemann de Horizontina/RS e
pesquisa. Criei um exemplo e mostro tar as requisições de forma diferenciada,
da FAHOR Faculdade Horizontina. Delphiano de
coração está sempre disposto a provar que com neste artigo como implementá-lo, passo através do MagicAjax.
o Delphi sempre teremos a melhor solução. Site a passo. Procure pela sessão <httpModules> e
www.fabricio.pro.br.
<add name="MagicAjax"
type="MagicAjax.MagicAjaxModule, MagicAjax"/>
Pesquisa incremental
Vamos criar uma consulta de dados na
tabela Employee do banco Employee.fdb,
através do Firebird Data Provider (veja
box). Adicione um FbConnection, clique na
propriedade ConnectionString e configure
suas propriedades conforme a Figura 3.
Figura 1. Adicionando referência ao MagicAjax
Agora, adicione um FbCommand, confi-
gurando sua propriedade Connection para
o fbConnection1 e CommandText conforme
o código a seguir:
Design da aplicação
Inicialmente devemos colocar o AjaxPanel
encontrado na paleta Ajax. Aumente seu ta-
manho, pois todos os outros componentes
serão dispostos dentro do mesmo. O Ajax-
Panel funciona como um painel de compo- Figura 2. Componentes instalados no Delphi
nentes e todas as ações dos componentes
que estão dentro serão realizada através de
chamadas assíncronas ao servidor, ou seja,
utilizando a tecnologia AJAX.
Dentro do AjaxPanel, digite o texto “Pri-
meiro Nome:” e, abaixo, insira um TextBox
da paleta Web Controls. Ao lado insira um
outro TextBox e reduza seu tamanho. Abai-
xo do TextBox1 acrescente um ListBox.
Uma pesquisa incremental tem seu
funcionamento a cada tecla que o usuário
digita, trazendo resultados referentes
às iniciais digitadas e possibilitando a
escolha de um dos resultados que com-
pletará o texto. Figura 3. Propriedades de conexão
Edição 87 - ClubeDelphi 7
Edição 87 - ClubeDelphi 9
Conclusão
Com a chegada da tecnologia AJAX não
poderemos mais utilizar a desculpa que
aplicações Web são diferentes de desktop.
Com certeza pode ser mais difícil para
implementarmos as facilidades para o
usuário.
Mas aí que vem a grande pergunta:
Você quer facilidade para você que é
desenvolvedor ou quer facilidade para
o usuário do seu sistema? Quanto mais
concorrência, mais devemos pensar em
nossos clientes.
Coloquem a mão na massa e não dei- Figura 5. Aplicação em funcionamento
xem de utilizar AJAX em suas aplicações
Web.
www.devmedia.com.br/clubedelphi/portal.asp
www.devmedia.com.br/articles/listcomp.asp?txtsearch=
utiliza%E7%E3o+da+Tecnologia+Ajax
O
DataSnap tem sido amplamente de todos os recursos e códigos implemen-
utilizado para a criação de apli- tados no servidor de aplicação.
cações distribuídas. O Delphi O Delphi for .NET deu suporte a uma
oferece um mecanismo quase que im- poderosa tecnologia para o desenvolvi-
batível em produtividade nesse sentido. mento de aplicações Web: o ASP.NET. O
Podemos criar aplicações multicamadas ASP.NET é sem dúvida hoje a tecnologia
de uma forma RAD e simples, sem nos mais robusta para o desenvolvimento de
preocuparmos com detalhes internos à soluções Web, e muitos desenvolvedores
tecnologia, como protocolos de comu- Delphi começaram a utilizá-la para novas
nicação. soluções.
Muitos desenvolvedores gastaram ho- Mas como ficam as aplicações mul-
ras, dias, meses, construindo um servidor ticamadas existentes, onde todo o BD,
de aplicação robusto que concentre todo acesso a dados e regra de negócio já estão
o acesso a dados e regras de negócio em implementados? Não seria interessante
Guinther Pauli uma única camada, compartilhada por oferecer uma opção Web para a mesma
(guinther@devmedia.com.br)
todas as aplicações clientes. arquitetura, convivendo em harmonia
é autor de mais de 100 artigos publicados e 200
vídeo-aulas e do livro “Delphi – Programação Quando falamos em DataSnap, no en- com aplicações cliente desktop já exis-
para Banco de Dados e Web”. É Bacharel em Sis- tanto, estamos falando em VCL. Muitos tentes?
temas de Informação, Microsoft Certified: MCP, sem dúvida sentiram a necessidade Esse é o propósito deste artigo: mostrar
MCAD, MCSD.NET, Borland Certified: Delphi 6, de oferecer não só um cliente desktop como construir uma interface Web para
7, 2005, 2006, Web e Kylix. Editor Geral das Re-
parar o servidor de aplicação, mas uma um servidor DataSnap, usando a tecno-
vistas .net Magazine, ClubeDelphi, WebMobile
(.NET) e Mr.Bool. Palestrante em vários eventos interface Web, de forma que clientes pu- logia mais robusta para esse propósito, o
pelo Brasil, como TechDay SP,RJ,POA,BH, Web dessem acessar a solução multicamadas ASP.NET. Clientes desktop Win32 e Web
Days e todas as edições da Borland Conference. de qualquer local do planeta, usufruindo poderão conviver lado a lado e poderão
compartilhar a mesma camada de negó- tomers”) apontando para esse SQLData- especificamente ADO.NET e DataSnap /
cio e acesso a dados, ou seja, o mesmo Set. Configure o parâmetro do SQLData- ClientDataSet.
servidor de aplicação. Set para Input e ftString. Dê também um Vamos ao primeiro passo. Toda vez que
valor padrão de “%” para ele. um cliente instancia um servidor COM+,
Preparando o banco de dados Dê um Build no projeto. Agora vamos por padrão o objeto assume a identidade
Neste exemplo vou utilizar um banco de instalar o servidor no catálogo do COM+. do usuário interativo, ou seja, do usuário
dados no Firebird 2.0, mas sinta-se a von- Para isso, podemos usar o próprio IDE logado no Windows.
tade para utilizar o banco de dados de sua do Delphi, através do menu Run>Install Quando acessamos uma página Web,
preferência. Para facilitar, vamos criar COM+ Objects. o ASP.NET juntamente com o IIS (ser-
uma tabela com uma estrutura bastante Na caixa que aparece, marque o objeto vidor Web) utiliza um usuário padrão
simplificada dentro de um novo banco de DM e na outra caixa, na opção Install into para instanciar o aplicativo, chamado
dados, chamado “CUSTOMER.FDB”. a new Application digite “ServerCom- IUSR_NomeDaMaquina, a menos que a
Para criar o banco e a tabela “CUSTO- Plus”. Clique OK e OK. Pronto, nosso autenticação esteja configurada no apli-
MERS” você pode utilizar o IBExpert servidor está instalado e pronto para ser cativo para usar algo diferente.
(www.ibexpert.com). A estrutura da ta- acessado. O problema é que esse usuário, que será
bela é mostrada na Figura 1. O script automaticamente usado pela nossa apli-
de criação da tabela pode ser visto na Requisitos para acessar o COM+ a cação ASP.NET, não possui privilégios
Listagem 1. partir do ASP.NET para instanciar objetos COM. Nesse caso
Ao criar a tabela, veja que definimos Três etapas precisam ser feitas para temos várias soluções. Uma delas seria
um Sequence para incrementar automa- podermos acessar o servidor COM+ Da-
ticamente o campo chave, nesse caso taSnap a partir de aplicações ASP.NET.
www.devmedia.com.br/clubedelphi/portal.asp
CustomerId. Se estiver usando o modo de A primeira diz respeito à segurança do
designer do IBExpert para criar a tabela, aplicativo, a segunda é relativa à compa- Acesse agora o mesmo o portal do assinante ClubeDelphi e assista a uma
basta marcar a opção AutoInc e marcar a tibilidade dos aplicativos ASP.NET com vídeo aula de Guinther Pauli que mostra como criar servidores COM+.
dados criado, através do editor de cone- ALTER TABLE CUSTOMERS ADD CONSTRAINT
PK_CUSTOMERS PRIMARY KEY (CUSTOMERID);
xões do SQLConnection. Lembre-se de
colocar localhost na frente do caminho CREATE TRIGGER CUSTOMERS_BI FOR CUSTOMERS
ACTIVE BEFORE INSERT POSITION 0
do banco para que seja usado TCP/IP e AS
BEGIN
aplicações Web possam acessar o banco IF (NEW.CUSTOMERID IS NULL) THEN
NEW.CUSTOMERID = GEN_ID(GEN_CUSTOMERS_ID,1);
(elas são multi-thread, conexões locais não END
funcionam). Configure o LoginPrompt
para False. Listagem 2. Código SQL do SQLDataSet
Edição 87 - ClubeDelphi 13
Agora precisamos obter os dados do ser- AdoDataSet.pas”. O seu código é mos- O método Open não faz muita coisa,
vidor DataSnap. Para isso, no Click do Select trado na Listagem 5. ele na verdade chama o método interno
digite o código da Listagem 3. O código do OpenCds e chama o Convert para conver-
GridDataBind é mostrado na Listagem 4. Nota: Para facilitar e reduzir o código, ter os dados de DataPacket para DataSet.
O método da Listagem 3 mostra um per- declarei alguns membros como atribu- O OpenCds instancia um MidasConnection
sonagem novo na história. Para obter os tos simples na classe, mas o ideal é que (que é um wrapper para um TDComCon-
dados do servidor DataSnap, utilizamos você crie-os na forma de propriedades. nection) para conectar ao servidor COM+
um DataSet do ADO.NET para colocar os e utiliza um ClientDataSet interno para
dados em memória (sessão). Porém, o for- Para acessar o servidor DataSnap, foi armazenar os dados obtidos.
mato de dados desse DataSet não é o mes- necessário importar alguns namespaces O método Convert faz a varredura no
mo que é devolvido por um IAppServer do da VCL for .NET, mostrados no início DataPacket obtido (ClientDataSet) e ar-
servidor DataSnap. O formato usado pelo da unit. Você precisa referenciar os mazena em um DataTable, que pode ser
ClientDataSet em aplicações multicamadas assemblys a partir do Project Manager, acessado diretamente pela coleção Tables,
se chama DataPacket, e não é compatível através da opção Add Reference. Os pois nossa classe descende de DataSet. O
com o DataSet do ADO.NET. assemblys necessários são Borland.Vcl- primeiro passo é configurar as colunas e a
Para resolver o problema, criei uma DbRtl.dll, Borland.VclDSnap.dll e Borland. seguir obter os registros. O ApplyUpdates
classe descendente de DataSet que é VclDSnapCon.dll. é explicado a seguir.
capaz de acessar um servidor DataSnap,
chamada apropriadamente de MidasDa- Listagem 3. Método para obter os dados
taSet. Eu adicionei nessa classe algumas
procedure TWebForm1.btSelect_Click(
propriedades básicas para comunicação sender: System.Object; e: System.EventArgs);
Midas, como você pode ver no código as var
ds: MidasDataSet;
propriedades RemoteServer e ProviderNa- begin
ds := MidasDataSet.Create();
me, como se fosse um ClientDataSet. ds.RemoteServer := ‘ServerCOMPlus.DM’;
ds.ProviderName := ‘dspCustomers’;
A classe se comunica como um servidor ds.Param := tbFInd.Text;
COM+ por meio da interface IAppServer ds.Open(true);
session[‘ds’] := ds;
e recebe os dados em DataPackets, trans- GridDataBind();
end;
formando-os em um DataTable do ADO.
NET que fica interno ao DataSet. Listagem 4. Método para preencher o DataGrid
Com isso, podemos fazer o DataBind procedure TWebForm1.GridDataBind;
para um DataGrid. Para facilitar, eu colo- begin
DG.DataSource := session[‘ds’] as DataSet;
quei a classe MidasDataSet em uma unit DG.DataBind();
end;
separada, explicada a seguir.
Figura 4. Web Form principal da aplicação Figura 5. Aplicação ASP.NET acessando servidor DataSnap
Edição 87 - ClubeDelphi 15
Para testar o Apply, para habilitar a Listagem 6. Eventos EditCommand e CancelCommand do DataGrid
Conclusão
O exemplo aqui demonstrado é simples,
mas ilustra o poder da combinação propos-
ta. Como possíveis melhorias, sugiro que o
leitor incremente o MidasDataSet para que
se pareça ainda mais com um ClientDataSet,
usando e abusando dos recursos de IApp-
Server. O primeiro passo está dado.
A solução aqui apresentada vai agora
permitir que você crie soluções Web ba-
seadas em ASP.NET reaproveitando todo
o código da sua camada intermediária, ao
Figura 6. Testando a edição
mesmo tempo que mantém a compatibi-
lidade com clientes desktop.
Dessa forma, poderá oferecer ambas Links
as soluções, por exemplo, permitindo o Treinamento On-Line em ASP.NET e Delphi 2005/2006 da ClubeDelphi
acesso Win32 a partir de uma intranet, e www.devmedia.com.br/curso/ecommerce2005
o acesso Web a partir da Internet.
Edição 87 - ClubeDelphi 17
N
este artigo destaco algumas Palette, coloque um FbConnection no Web
dicas interessantes para otimi- Form. Selecione o componente e no Object
zar aplicações ASP.NET com Inspector acesse o editor da propriedade
Firebird. Veremos como a tecnologia ofe-
rece poderosos recursos para tornar suas Provider ADO.NET Para Firebird
aplicações Web robustas e escaláveis,
usando o mínimo de esforço possível. Para acessar o Firebird no ASP.NET, você
Conheceremos os poderosos recursos pode utilizar o provider ADO.NET do pró-
de cache de dados, uso efetivo de Stored prio Firebird. Para baixá-lo, utilize o seguin-
Procedures, Connection Pooling e outras te endereço: www.firebirdsql.org/index.
técnicas avançadas. php?op=files&id=netprovider. A versão
Você aprenderá como usar DataSets utilizada é para o .NET Framework 1.1. A
em memória para evitar consultas des- instalação é bastante simples, basta execu-
necessárias ao servidor SQL e otimizar tar o instalador.
Guinther Pauli assim o tráfego de dados. Você também Para instalar no Delphi 2006, acesse o menu
(guinther@devmedia.com.br) conhecerá um pouco sobre o interessante Component>Installed Components. No
é autor de mais de 100 artigos publicados e 200
recurso de Connection Pooling do ADO. editor, digite “Firebird” em Category, clique
vídeo-aulas e do livro “Delphi – Programação
para Banco de Dados e Web”. É Bacharel em Sis- NET. Para construir os exemplos, utili- no botão Select an Assembly e escolha o
temas de Informação, Microsoft Certified: MCP, zarei o Delphi 2006 e o Firebird 2.0 como arquivo FirebirdSql.Data.Firebird.dll, que
MCAD, MCSD.NET, Borland Certified: Delphi 6, banco de dados. por padrão encontra-se em: C:\Arquivos de
7, 2005, 2006, Web e Kylix. Editor Geral das Re- programas\FirebirdNETProvider1.7. Clique
vistas .net Magazine, ClubeDelphi, WebMobile em OK e veja na Tool Palette os componen-
(.NET) e Mr.Bool. Palestrante em vários eventos
Connection Pooling
tes instalados para acesso ao Firebird.
pelo Brasil, como TechDay SP,RJ,POA,BH, Web Inicie uma nova aplicação ASP.NET
Days e todas as edições da Borland Conference. no Delphi 2006. A partir da Component
ConnectionString. No editor que aparece nada para usar esse recurso, pois ele já é Você pode ainda controlar como o
informe os parâmetros para acesso ao ativado por padrão. Criar um mecanismo ADO.NET trabalha com Connection
banco Employee.fdb do Firebird. de Connection Pooling “no braço” via código Pooling, fazendo alg uns ajustes na
Com isso, configuramos a conexão ao é algo extremamente complicado (infeliz- propriedade ConnectionString do Fb-
Firebird usando o provider nativo, a mente já tive que passar por esse esforço em Connection ou diretamente no editor
primeira dica de performance (jamais uma ocasião). No ADO.NET já temos isso de conexões da Figura 1. Podemos
use OleDB, ODBC ou outro provider pronto no próprio framework. Produtivida- especificar alguns parâmetros, como
nesse caso). de é um dos pontos fortes do .NET. mostra a Tabela 1.
Observe que em User Name e Password Veja um exemplo de como poderíamos
informamos um usuário e senha padrão Nota: O Connection Pooling só pode ser usar alguns desses parâmetros na string
para acesso ao banco. Aqui vai a segunda usado em ambiente multi-thread (uma de conexão da nossa aplicação (você pode
dica valiosa para otimização: forneça um aplicação Web, por exemplo), onde fazer essa modificação diretamente na
usuário e senha fixos, de forma que todos temos várias threads simultâneas pro- propriedade ConnectionString, a partir
os usuários que conectem à aplicação cessando solicitações clientes. Não faz do Object Inspector) com o código da
utilizem as mesmas credenciais. sentido, por exemplo, usar Connection Listagem 1.
Se for necessário restringir acesso a de- Pooling em uma aplicação Windows
terminado usuário, defina isso na forma Forms tradicional (duas camadas). Inter- Atenção: Sempre use a mesma Connection
de autorizações no Web.config. Fornecer namente, o Connection Pooling faz uso String (com os mesmos valores para todos
um usuário fixo fará o ADO.NET utilizar de um interessante recurso do sistema os parâmetros) em todos os objetos de co-
de forma efetiva o recurso de Connection operacional Windows para prover sua nexão, para que compartilhem o mesmo
Pooling, sem ter perda de desempenho. funcionalidade: semáforos. Connection Pooling.
Connection Pooling é o mecanismo que
permite ao ADO.NET reaproveitar co-
nexões ao banco de dados. Imagine a Listagem 1. Parâmetros na string de conexão
Edição 87 - ClubeDelphi 19
Edição 87 - ClubeDelphi 21
de inserção. Utilizando Labels, Buttons e Acesse agora o mesmo o portal do assinante ClubeDelphi e assista a uma
TextBox, desenhe um formulário igual ao série de vídeo aulas de Guinther Pauli, sobre performances no ASP.NET
da Figura 4. com ADO.NET.
A seguir, coloque um FbConnection e www.devmedia.com.br/articles/listcomp.asp?
txtsearch=Performance+no+ASP.NET+com+ADO.NET
configure uma conexão ao FB como feito
anteriormente. Coloque um FbCommand
e aponte a propriedade Connection para
o FbConnection. Defina seu CommandType
para StoredProcedure e CommandText refe-
rencie a SP criada (“COUNTRY_I”).
Em Parameters inclua dois parâmetros,
como mostra a Figura 5. Observando o que
foi feito para o parâmetro Country, faça o
mesmo para o parâmetro Currency.
No botão Inserir digite o código da Figura 4. Formulário principal da aplicação, com TextBoxes
Listagem 8, para inserir os dados digi-
tados nos TextBoxes no banco de dados, dade, deixando seu usuário final muito
usando a Stored Procedure criada. Note mais satisfeito com o tempo de resposta
que configuramos os parâmetros criados da sua aplicação.
na coleção Parameters do FbCommand. A utilização de Stored Procedures, quan-
ExecuteNonQuery faz a execução da SP do feita de forma apropriada, pode
propriamente dita. garantir o sucesso de sua solução ASP.
NET com ADO.NET, sendo imbatível se
Conclusão comparada a qualquer outra tecnologia
Utilizando as técnicas vistas neste existente. DataSets em memória e Data-
artigo, você poderá agora otimizar suas Readers também são ótimos ingredientes
aplicações ASP.NET para que tenham para turbinar seu Web Site com ASP.NET,
uma melhor performance e escalabili- ADO.NET e Firebird.
B
em-vindos ao novo mini-curso cadastros que farão parte do exemplo,
da ClubeDelphi, onde o leitor como: Clientes, Fornecedores e Contas
aprenderá como criar um sistema Correntes.
completo de gerenciamento de contas a
pagar e receber, com emissão de boletos Criando o banco de dados
bancários, baixa de pagamentos, fluxo de Para iniciar o projeto, vamos primeira-
caixa, impressão de cheques e uma série mente criar o banco de dados e as tabelas
de outros recursos encontrados nesse necessárias para cada tela de cadastro. As
tipo de sistema. tabelas são: Clientes, Fornecedores e Contas.
O sistema que criaremos terá como prin- Neste artigo, criaremos o banco de dados
cipal objetivo proporcionar ao usuário o utilizando a ferramenta IBExpert em sua
controle total de contas a pagar e a rece- versão Standard. Por isso, acesse o link
ber, ou seja, será possível adicionar contas www.ibexpert.com e em seguida entre no
de luz, telefone, água, gastos com office- item IBExpert.
boy, compra de equipamentos etc. À esquerda do site do fabricante clique
Da mesma forma, o usuário poderá in- em Download>Free. Preencha o formulá-
cluir as faturas que tem a receber de seus rio de cadastro e aguarde o e-mail com as
clientes, processo esse que chamaremos
Adriano Santos de Cobrança. Com essas informações no Metodologia
(artes@doiscliques.com) sistema, sempre atualizadas, poderemos O exemplo deste artigo utiliza a arquitetura cliente/servidor.
é desenvolvedor Delphi desde 1998. Professor
emitir relatórios, gráficos, boletos bancá- Para mais informações sobre essa arquitetura e outras, visite:
e programador PHP. Bacharel em Comunicação
Social pela Universidade Cruzeiro do Sul, SP. É rios e fluxo de caixa para o acompanha- http://www.devmedia.com.br/articles/viewcomp.asp?
colunista e membro da Comissão Editorial da mento das contas correntes. comp=5219
revista ClubeDelphi. Neste artigo, criaremos os principais
instruções de download da ferramenta. Após a criação do banco, podemos e o Position para poScreenCenter. Inclua
Após isso, abra o IBExpert e vamos criar iniciar o desenvolvimento do siste- agora um ImageList (“imgBotoes”), um
o banco de dados usando a opção Script ma, onde usaremos Delphi 7.0, Fire- MainMenu (“mnuPrincipal”) e um Tool-
Executive presente no menu Tools. bird 2.0 e dbExpress. Abra o Delphi e Bar (“tobBotoes”).
Com a tela de scripts aberta, digite o crie um novo projeto através do menu No imgBotoes adicione quatro imagens
código da Listagem 1. Nele estão contidos File>New>Application. a sua escolha representando os botões
os esquemas para a criação do banco de Mude a propriedade Name do formulário Clientes, Fornecedores, Contas e Sair. O
dados assim como de cada tabela do sis- para “frmPrincipal” e salve a unit como mnuPrincipal receberá três itens corres-
tema. Digitado o script, basta executá-lo “uPrincipal.pas”. Mude também a proprie- pondentes aos cadastros que criaremos
usando o botão Run Script ou pressione dade BorderStyle para bsSingle e desative a (Figura 1).
a tecla F9. opção biMaximize em BorderIcons. Faremos nesse instante a configuração
Por fim, modifique o Caption para da barra de ferramentas. Adicione quatro
Nota: Substitua <Caminho>\SYSPAGUE. “Sistema de Contas a Pagar e Cobrança” botões na Toolbar clicando com o botão
FDB pelo diretório do banco de dados e
seu nome, ex: C:\BancoDeDados\SysPa- Listagem 1. Criação do banco, tabelas e índices
gue.fdb. SET SQL DIALECT 3;
SET NAMES WIN1252;
Acesse agora o mesmo o portal do assinante ClubeDelphi e assista a ALTER TABLE CONTAS ADD CONSTRAINT PK_CONTAS
uma vídeo aula de Luciano Pimenta que mostra como baixar e instalar o PRIMARY KEY (BANCO, AGENCIA, CONTA);
Edição 87 - ClubeDelphi 25
todas elas. Começaremos por Clientes, Diferentemente das tabelas já citadas Pesquisas e carregamento de dados
assim adicione no Data Module um (Clientes e Fornecedores) a tabela de Antes de partirmos para o design e pro-
SQLQuery (“sqlClientes”), um DataSetPro- Contas Correntes dificilmente possuirá gramação das telas de cadastro, devemos
vider (“dspClientes”) e um ClientDataSet centenas de registros, por esse motivo nos preocupar com o carregamento dos
(“cdsClientes”). não usaremos a técnica descrita ante- dados, ou seja, como nossas janelas se
As configurações dos componentes são riormente. comportarão e receberão os registros
simples e os passos seguidos aqui podem Nesse ponto do artigo, o Data Module presentes no banco.
ser repetidos para cada grupo de compo- deverá se parecer com a Figura 3. É importante criar funções e/ou proce-
nentes de acesso. No sqlClientes modifique Adicionamos somente os componentes dimentos apropriados para cada consul-
a propriedade SQLConnection escolhendo necessários para a conexão com as três ta. Criaremos as funções CarregarTodos,
o sqlConexao e em sua propriedade SQL tabelas criadas até o momento, ao longo PesquisarCliente, PesquisarFornecedores e
adicione o código da Listagem 2 . do mini-curso adicionaremos novos PesquisarContas, que receberão parâme-
Em seguida clique com o botão direito componentes ao Data Module. tros das telas de cadastro e montarão os
no componente e escolha a opção Fields Agora vamos codificar os eventos After selects necessários para cada situação.
Editor. No editor, clique novamente com Delete, AfterPost e BeforePost de cada Na seção public do Data Module declare
o direito e escolha Add all fields. Isso fará ClientDataSet. Esses eventos terão o papel as funções mencionadas anteriormente
com que todos os campos sejam carre- de chamar o ApplyUpdates e também de como mostrado na Listagem 3.
gados na lista de campos do sqlClientes. atualizar a data de alteração (DT_ALTE- Pressione CTRL+SHIFT+C para que o
No dspClientes apenas modifique a pro- RACAO) da tabela em questão. Para o
priedade DataSet para sqlClientes. Agora evento AfterPost do cdsClientes inclua o
modifique o ProviderName do cdsClientes seguinte código:
informando dspClientes.
cdsClientes.ApplyUpdates(0);
Para terminar nossa primeira configu-
ração, repita os passos de carregamento Já no AfterDelete apenas associe-o ao
dos campos descrito no sqlClientes para AfterPost selecionando-o na lista de
o cdsClientes, ou seja, teremos os campos eventos do componente. Para o BeforePost
carregados no Fields Editor tanto no SQL- digite o código a seguir:
Query quanto no ClientDataSet.
cdsClientes.FieldByName('DT_ALTERACAO').
Repita esses passos para as tabelas de AsDateTime := Now;
Edição 87 - ClubeDelphi 27
Edição 87 - ClubeDelphi 29
Edição 87 - ClubeDelphi 31
Concluindo o exemplo
Chegamos ao final do exemplo e
precisamos agora apenas de alguns
retoques para finalizar todas as etapas.
Pressione CTRL+SHIFT+F11 ou acesse
o menu Project>Options. Entre na guia
Forms e selecione todos os formulários,
com exceção do Data Module e da tela
principal, e passe-os para a lista Available
Figura 7. Exemplo de tela de Contas Correntes
forms, ou seja, retire-os da lista de criação
automática.
Ainda nessa tela, mova o Data Module
Listagem 11. Chamada para as telas de cadastro
para cima de maneira que seja o primeiro
uses uClientes, uFornecedores, uContas;
a carregar junto com o executável. Na aba ...
Application, em Title, digite “SysPague – procedure TfrmPrincipal.tbnClientesClick(Sender: TObject);
begin
Contas a Pagar e Cobrança”. Escolha um frmClientes := TfrmClientes.Create(Self);
try
ícone se preferir e confirme. frmClientes.ShowModal;
Para finalizar, na tela principal, faça finally
frmClientes.Free;
a chamada para cada tela de cadastro end;
end;
nos botões e menus correspondentes. O
procedure TfrmPrincipal.tbnContasClick(Sender: TObject);
código completo para a chamada de cada begin
item encontra-se na Listagem 11. frmContas := TfrmContas.Create(Self);
try
frmContas.ShowModal;
finally
Conclusão frmContas.Free;
end;
Nessa primeira etapa do mini-curso end;
sobre Sistema de Contas a Pagar e Co-
procedure TfrmPrincipal.tbnFornecedoresClick(Sender: TObject);
brança, criamos as três primeiras telas begin
frmFornecedores := TfrmFornecedores.Create(Self);
de cadastro necessárias para a manipu- try
frmFornecedores.ShowModal;
lação de todos os dados do sistema. Nas finally
próximas etapas criaremos os demais frmFornecedores.Free;
end;
cadastros e entraremos nas fases de ma- end;
Edição 87 - ClubeDelphi 33
N
este artigo aprenderemos e a adquirir e se enquadrar com o esquema
entenderemos melhor como de emissão de cupom fiscal.
funciona um ECF (Emissor de Os cupons fiscais são emitidos através
Cupom Fiscal). Vamos ainda desenvolver do ECF, uma impressora fiscal de nature-
um pequeno programa capaz de impri- za matricial ou térmica. Essas impresso-
mir em impressora fiscal. ras coletam as vendas diárias emitindo ao
Para iniciarmos nosso projeto, preci- final do dia a Redução Z, para fechamento
samos primeiramente entender o que ou troca de operador, e a Leitura X para
exatamente é um ECF e como funciona. início do período de vendas. Tanto a
Para isso vamos recorrer ao CONVÊNIO Redução Z quanto a Leitura X devem ser
ECF 01/98. Nele estão dispostas a regras mantidas próximas ao ECF para fins de
básicas para emissão do cupom fiscal. fiscalização quando solicitadas.
Conforme mencionado no convênio: O ECF deve ser conectado a um PC ou
“Os estabelecimentos que exerçam a ativi- PDV (Ponto de Vendas) compacto. Como
dade de venda ou revenda de mercadorias ou mencionado, a prática é utilizada para o
bens, ou de prestação de serviços em que o desenvolvimento de sistemas de vendas
adquirente ou tomador seja pessoa física ou ao consumidor. Normalmente, utili-
jurídica não contribuinte do imposto estadual, zamos impressoras fiscais em lojas de
Adriano Santos estão obrigados ao uso de equipamento emis- conveniência, lanchonetes, bares e uma
(artes@doiscliques.com)
sor de Cupom Fiscal - ECF.” infinidade de outros estabelecimentos
é desenvolvedor Delphi desde 1998. Professor
e programador PHP. Bacharel em Comunicação Isso significa que todo e qualquer esta- comerciais.
Social pela Universidade Cruzeiro do Sul, SP. É belecimento que efetue qualquer tipo de A interação entre o sistema e a impres-
colunista e membro da Comissão Editorial da venda ou revenda ao consumidor com sora fiscal, é feita através das portas
revista ClubeDelphi. as características citadas, são obrigados seriais, ou COM, por meio de bibliotecas
de link dinâmico, DLLs. Existem diversos uma breve explicação sobre a utilização ser vista no script da Listagem 1.
fabricantes de impressoras fiscais, entre desse emulador.
eles a Bematech (www.bematech.com.br). Descompacte o arquivo e execute o Nota: Substitua <Caminho>\ECF.fdb
Alguns tipos de contribuintes ficam programa de instalação (Install Emul2100 pelo diretório do banco de dados e seu
isentos da utilização dos ECFís tais como v1.01.msi). Após a instalação um grupo nome, ex: C:\BancoDeDados\ECF.fdb.
empresas com faturamento inferior a chamado Bematech aparecerá no seu
R$ 120.000,00 anuais, empresas que não menu Iniciar>Programas e nele o atalho
utilizem sistemas de processamento de para o emulador.
dados ficam isentas de utilizar o ECF, Abra o programa e clique com o botão
estabelecimentos de ensino (Portaria direito, assim terá acesso a todos os
91/02) e corretoras. controles do emulador tais como: ligar/
Para uma listagem completa consulte desligar, porta serial, sensores etc. (Fi-
o link wiki.stoq.com.br/wiki/ECF_FAQs gura 2).
que contém uma série de informações Além disso, será necessário efetuar o
necessárias para o uso ou não do ECF. download da biblioteca BemaFI32.dll para
Uma série de regras são estabelecidas que possamos desenvolver a aplicação
para a utilização correta do equipamento exemplo, portanto, no mesmo link aces-
tais como: sado, localize e baixe o arquivo BemaFI32.
• Somente é aceito o cancelamento de zip. Crie uma pasta onde salvaremos
um cupom fiscal se o mesmo foi imedia- nosso exemplo e descompacte o arquivo
tamente cancelado após sua emissão; nessa pasta. Figura 1. Cupom Fiscal impresso
• O cupom fiscal não deve ser emitido Notará que, além da biblioteca, outros
em caso de operações ou prestações com arquivos serão descompactados no
empresas contribuintes de ICMS; diretório, tais como arquivos de help e
• O cupom fiscal deve conter número do configurações. Precisamos apenas dos
item, descrição, valor, código do produto arquivos BemaFI32.dll e BemaFI32.ini. Para
vendido, quantidade, bem como valor usar o emulador, com nosso exemplo, é
pago pelo consumidor, troco e forma de necessário alterar a chave EmulMFD de
pagamento. “0” para “1”, por isso, abra o arquivo Be-
Veja na Figura 1 um exemplo de Cupom maFI32.ini e localize a chave informada.
Fiscal impresso (emitido pelo emulador Altere para “1” e salve.
da impressora fiscal), com os produtos
vendidos, total, valor pago e troco. Criando o banco de dados de
exemplo
Emulando a impressora Vamos criar duas tabelas simples em
Neste exemplo, vamos utilizar a im- um banco de dados Firebird. Teremos a
pressora térmica fiscal MP-2100 TH FI da tabela PRODUTOS, com os produtos que
Bematech (emulador). A Bematech dispo- serão vendidos e VENDAS, nossa tabela
nibiliza, gratuitamente, o emulador da de pedidos. A estrutura de ambas pode Figura 2. Emulador da impressora fiscal
impressora que pode ser utilizado para
testar o equipamento e o sistema criado Listagem 1. Criação do banco de dados e tabelas
para esse propósito. Além do emulador,
SET SQL DIALECT 3;
uma série de exemplos podem ser baixa- SET NAMES WIN1252;
CREATE DATABASE ‘localhost:<Caminho>\ECF.fdb’
dos no site do fabricante. USER ‘SYSDBA’
Entre no site www.bematech.com.br e PAGE_SIZE 8192
DEFAULT CHARACTER SET WIN1252;
acesse o menu superior Suporte. Logo
CREATE TABLE PRODUTOS (
em seguida clique no link Downloads ID INTEGER NOT NULL,
DESCRICAO VARCHAR(30) NOT NULL,
e Drivers e após em Impressoras Fiscais. UNITARIO NUMERIC(15,2) NOT NULL);
No ComboBox que aparece, selecione a
CREATE TABLE VENDAS (
sistema operacional Windows e aguarde PEDIDO INTEGER NOT NULL,
ITEM INTEGER NOT NULL,
o carregamento da página. ID_PRODUTO INTEGER NOT NULL,
DESCRICAO VARCHAR(30) NOT NULL,
Localize Emul2100 - VAREJO (versão QTDE INTEGER NOT NULL,
1.01) e baixe o arquivo Emul2100v101.zip. UNITARIO NUMERIC(15,2) NOT NULL);
Se preferir poderá baixar também o ar- ALTER TABLE PRODUTOS ADD CONSTRAINT PRODUTOS_PK
PRIMARY KEY (ID);
quivo FilmeEmul2100.zip que contém um ALTER TABLE VENDAS ADD CONSTRAINT VENDAS_PK
arquivo de vídeo no formato WMV com PRIMARY KEY (PEDIDO, ITEM, ID_PRODUTO);
Edição 87 - ClubeDelphi 35
cdsVendas.FieldByName('VALOR_TOTAL').AsFloat := nalize como desejar. Para finalizar esse adicione um ComboBox (“cbxFormPagto”).
cdsVendas.FieldByName('QTDE').AsFloat *
cdsVendas.FieldByName('UNITARIO').AsFloat; GroupBox, insira mais dois Labels, um Em sua propriedade Items inclua os itens:
com o Caption “SubTotal” e o outro com “Dinheiro”, “Cheque”, “Vale” e “Duplica-
O Data Module deve se parecer com a o Name para “lblSubTotal”. ta”. Em seguida insira um Edit (“edtVa-
Figura 4. A área que acabamos de criar será res- lorPago”) e um BitBtn (“btnPagar”) e por
ponsável por todo o processo de criação fim, inclua um novo BitBtn maior com o
Desenvolvendo a tela principal do pedido, ou seja, será possível criar o nome de “btnFinalizarCupom”.
Nossa aplicação terá a interface da pedido, incluir e excluir produtos, visu-
Figura 5. Na parte superior da tela colo- alizar o Subtotal, escolher a quantidade Comunicação com a Impressora
que um GroupBox. Adicione também um de produtos a ser incluído e ainda iniciar usando a DLL
MaskEdit (“edtCPFCNPJ”). Configure a o fechamento da venda. Para codificar nosso exemplo precisa-
propriedade EditMask com a máscara A última etapa de desenvolvimento mos antes declarar explicitamente todas
“999.999.999-99;0;_” e mude o tamanho da parte visual do exemplo é criar o as funções da impressora fiscal presente
da fonte para “18”. rodapé do formulário onde teremos as da biblioteca BemaFI32.dll para que possa-
Ao lado adicione um SpeedButton operações de escolha do tipo de paga- mos usar normalmente seus métodos.
(“btnAbrirCupom”) e à direita um Label mento, o valor pago pelo consumidor e Neste exemplo não usaremos todas as
(“lblMsgOperador”). Mude o tamanho da a finalização do pedido. funções presentes na biblioteca, apenas
fonte para “18” e a cor para clBlue. Marque Coloque um novo GroupBox e dentro o necessário. Por isso, abra o editor de
como False a propriedade AutoSize e True
em WordWrap.
Listagem 2. Eventos OnDestroy e OnCreate do Data Module
Aumente a largura e altura do lblMsgO-
perador de forma que se adapte melhor ao procedure TdmdPrincipal.DataModuleDestroy(
Sender: TObject);
espaço deixado à direita do formulário. begin
cdsProdutos.Close;
Inclua um novo GroupBox com o Caption cdsVendas.Close;
end;
“Dados do Produto e Pedido”. Nele
adicione um DBGrid (“dbgProdutos”) e procedure TdmdPrincipal.DataModuleCreate(
Sender: TObject);
ligue-o ao cdsProdutos pela propriedade begin
cdsProdutos.Open;
DataSource. cdsVendas.Open;
end;
Edição 87 - ClubeDelphi 37
Edição 87 - ClubeDelphi 39
Links
Edição 87 - ClubeDelphi 41
F
alar em segurança de sistemas, uso dos componentes do pacote.
logo faz lembrar vários itens, que Ao final do artigo, também veremos
precisamos tomar os mais minu- como gerar eventos no programa (log),
ciosos cuidados, para que o sistema seja podendo filtrar a consulta de log por
realmente seguro. Neste artigo veremos usuário, data e nível.
como definir de forma segura controles
de acessos diferenciados para usuários de O componente
sistemas desenvolvidos em Delphi para Faremos o download do componente a
a plataforma Win32. partir do site mantido pelo desenvolvedor
Faremos uso do User Control Package, e colaboradores do projeto. Acessando o
um pacote open source de componentes, endereço www.usercontrol.net encontra-
que podem ser facilmente instalados nas remos um amplo canal de informações,
versões posteriores ao Delphi 5, permi- dicas, fórum, entre outros, relacionados
tindo conexão aos principais padrões de aos componentes do pacote.
acessos a dados e servidores de banco de Faça o download do pacote através da
dados compatíveis com Delphi. O acesso seção destinada no site. Para este artigo,
pode ser definido individualmente por faremos o download da versão User Control
Usuário e por Perfil de usuários, dando a 2.20 RC2. Fique a vontade para fazer o down-
Maikel Marcelo Scheid opção de acompanhar uma lista de todos load das outras versões disponíveis. Salve o
(maikelscheid@gmail.com) os usuários logados no sistema. arquivo compactado dentro da pasta Lib do
é técnico em Informática com ênfase em Análi-
Iniciaremos com a instalação do compo- seu Delphi (ou escolha outra pasta).
se e Programação de Sistemas. Atua na área de
Desenvolvimento de Softwares em Delphi para nente, passando então à criação de uma Após o download, descompacte o arqui-
plataforma win32 e .NET com banco de dados aplicação Delphi com acesso a um banco vo zipado, deixando os fontes na pasta
Firebird e MS SQL há 3 anos. de dados Firebird, onde aplicaremos o UserControl.
Edição 87 - ClubeDelphi 45
Nota: Uma prática segura é alterar a se- podem ser feitas em um editor, acessado de cadastrar.
nha padrão do banco de dados após a ao dar um duplo clique no UserControl. Certamente você já notou que está com
instalação. acesso a todos os menus do sistema e
Testando a aplicação pensou em uma forma de como blo-
Vamos executar a aplicação pela primei- quear o acesso a determinado menu de
Utilizando o User Control ra vez, onde o componente criará automa- acordo com cada usuário. Lembrando
Arraste para o Data Module o UCDBX- ticamente as tabelas por ele requeridas no que durante as configurações criamos
Conn da paleta UC Connectors que acaba- banco de dados e mostrará uma tela com um menu chamado de Perfis de Usuários,
mos de instalar. Faça a configuração da um usuário e senha padrão para proceder vamos acessar o mesmo e criar um novo
sua propriedade Connection ligando-a ao ao primeiro acesso (Figura 5). perfil, ou melhor, passaremos a criar dois
SQLConnection. Realizado o primeiro acesso ao sistema, perfis, um “ADMINISTRADOR” e outro
Volte para o frmPrincipal e solte os acesse o menu Usuários e cadastre um chamado “USUARIOS”.
componentes mostrados na Tabela 1, da novo usuário. No formulário de cadastro, Criados então os perfis, selecione o
paleta UC Main. criado automaticamente pelo componen- perfil USUARIOS e clique sobre o botão
te (Figura 6), clique em Adicionar e faça o acessos. Apareceu um novo formulário,
Nota: Quando estiver no frmPrincipal, cadastro de seu próprio usuário. mas com nenhuma informação para
não esqueça de adicionar a referên- Forneça todas as informações, exceto definições de acesso. Não se preocupe
cia ao Data Module, através do menu a opção Perfil que ainda está em branco você não cometeu nenhum erro, apenas
File>Use Unit, selecione o UntDMCone- e clique em Gravar, será habilitada uma não foi informado ao componente o que
xao. Não esqueça também de definir opção onde deverá ser informada a senha queremos controlar, nesse caso, serão os
que o Data Module será criado antes para o novo usuário (essa é criptografa- menus do sistema.
que o formulário principal. da). Realizando um teste com o usuário Feche a aplicação e voltando ao Del-
criado, através do menu Arquivo>Logoff, phi, no UserControl em sua propriedade
Em Project>Options arraste o Data Modu- acesse novamente o formulário de login ControlRight>MainMenu selecione o
le para que fique posicionado acima ao e informe usuário e senha que acabou componente com a estrutura de menus
frmPrincipal, isso garante que a conexão (MainMenu1).
com o banco de dados já estará aberta Compile e execute sua aplicação no-
quando o componente realizar uma vamente, utilize para login o usuário
consulta de usuário e senha na base. ADMIN, certamente seu usuário não
terá privilégios de acessos aos menus, e
volte a acessar o menu Perfis de Usuários,
Antes de executar a aplicação, preci- selecione o perfil USUÁRIO e clique no-
samos definir os menus de acesso às vamente em acessos.
funcionalidades do componente. Adi- Agora aparecendo todos os menus que
cione ao frmPrincipal um MainMenu, e configuramos anteriormente no com-
com um duplo clique crie uma estrutura ponente, marque os mesmos de forma
semelhante à Tabela 2 (os valores entre Figura 5. Usuário e senha padrão na primeira execução do sistema semelhante à Figura 7 e confirme.
parênteses representam os nomes dos
itens de menu).
procedure TfrmPrincipal.MLogoffClick(Sender:
TObject);
begin
UserControl1.Logoff;
end;
Edição 87 - ClubeDelphi 47
Configure da mesma maneira o texto dos mesmos que estão ativos (Figura 8). no sistema. No log de um sistema podem
para as demais opções disponíveis no ficar armazenadas informações muitos
componente. Salvando os Logs das ações do importantes em casos de bugs ou falhas
usuário de informações.
Timeout do sistema e lista de Já que o assunto é segurança, porque No log, qualquer ação do usuário po-
usuários logados não falar sobre log. É através do log de derá ser armazenada, juntamente com a
Muitos sistemas disponibilizam de um sistema que o administrador poderá data/hora e nome do usuário logado no
recursos que controlam o tempo de acompanhar todas as ações dos usuários momento da gravação do log, além é claro
inatividade dos usuários no sistema.
No User Control, basta realizar uma
configuração no UCIdle, alterando sua
propriedade Timeout para o tempo que
exista a seção para aquele usuário, sem
o mesmo estar trabalhando no sistema
(valor em milissegundos).
Em um exemplo de querermos atribuir
um timeout de 20 minutos, bastaria atri-
buir à propriedade o valor “1200000”,
onde esgotado esse tempo, automatica-
mente o componente mostra a tela de
login para que o usuário possa voltar a
utilizar o sistema.
Se seu sistema está instalado em uma
rede e você permitir acesso simultâneo
de vários usuários, o User Control oferece
uma funcionalidade para acompanhar
todos os usuários conectados.
Já configurado anteriormente, basta
você executar o sistema, e através do
menu Usuários Logados obter a listagem
Edição 87 - ClubeDelphi 49
rio. Nível Alto, que geralmente é utilizado meras configurações para customização do que as senhas ficam criptografadas no 1
em alterações de registros e por final, um do User Control. Através desse compo- banco de dados.
Crítico, correspondente a uma ação que nente é possível alterar todos os Captions, Vimos também uma maneira fácil e se- 1
o usuário fez e que poderá estar compro- mensagens etc. Acessando as proprie- gura de monitorar através do log tudo que
metendo informações do sistema, como dades mudaremos a posição de todos os acontece no sistema, tudo isso através de 1
por exemplo, a exclusão de um registro de formulários do componente e também o um processo de desenvolvimento muito 1
estoque ou movimentações de caixa. Caption do login. ágil, seguro e com a utilização de poucas
Esses níveis são definidos no momento Alterando a propriedade WindowsPosi- linhas de código. 1
da gravação do log, exemplo do código tion para poScreenCenter definimos que
a seguir, onde informamos a ação que todos os formulários aparecerão ao centro
desejamos gravar e o nível da mesma: da tela do computador. Para alterar o Cap- 2
A tela de log permite ao usuário rea- (Figura 10). Figura 10. Formulário de login com mudança no Caption
lizar várias opções de filtro, como por 1
mesmo, pelo nível do log (Figura 9). artigo, vimos uma forma de evitar que 1
Algumas informações foram obtidas do próprio
pessoas indesejadas tenham acesso aos site do componente
Outras configurações seus sistemas, limitando também as prio- www.usercontrol.net
1
No UCSettings, estão disponíveis inú- ridades de acesso aos usuários, lembran-
10:30-11:50 Interfaces ricas na Web com Padrões de Projeto Java EE - Mercado de Jogos para Celulares Desenvolvimento para Mini-curso de C# ASP.NET Caching
Ajax - Parte 2 Parte 2 dispositivos móveis na
plataforma .NET 2.0 - Parte 2
13:30-14-50 Mini Curso 1 - Java ME Struts2 - A Evolução do Utilizando SVG (Scalable Vector Introdução ao ASP.NET AJAX Estratégia de Soluções para XAML
Primeiros Passos - Parte 1 framework - Parte Graphics) com Java ME Mobilidade & Casos de Sucesso
15:00-16:20 Mini Curso 1 - Java ME Struts2 - Desenvolvendo uma Otimização de Aplicações Java ME Aprenda na prática a criar um ASP.NET 2.0 na prática: Profiles e
Primeiros Passos - Parte 2 aplicação com ajax e validação - sistema de enquetes em Acionamento de dispositivos Membership
Parte 1 ASP.NET - Parte 1 eletro-mecanicos com Pocket
PC
16:20-17:00 BREAK BREAK BREAK BREAK BREAK
BREAK
17:00-18:20 Além do básico: explorando Struts2 - Desenvolvendo uma iReport/JasperReport - Criando Aprenda na prática a criar um Criação de um portal com ASP.NET
APIs sofisticadas com Java ME aplicação com ajax e validação relatórios para web sistema de enquetes em Novidades no Windows Mobile 2.0 e WebParts
nas plataformas Nokia - Parte1 Parte 2 ASP.NET - Parte 2 6
18:30-19:50 Além do básico: explorando JavaFX: interfaces em Java de Google Web Toolkit passo-a-passo Desenvolvendo programa para Desenvolvendo Gadgets
APIs sofisticadas com Java ME forma fácil e portável - Parte 1 - Parte 1 PocketPC com rede sem fio e Introdução ao Silverlight Corporativos para Windows Vista
nas plataformas Nokia - Parte2 WebServices - Parte 1
JavaFX: interfaces em Java de Google Web Toolkit passo-a-passo Desenvolvendo programa para .net 3.0 - Xaml Browser
20:00-21:20 Interfaces ricas para a Web forma fácil e portável - Parte 2 - Parte 2 PocketPC com rede sem fio e Criando aplicações WAP com Applications
com Flex 2.0 e Java WebServices - Parte 2 ASP.NET
13:30-14-50 Implementando uma loja Desenvolvendo um Game em Java Wireless: O que nós precisamos Construa uma aplicação 100% Envio e recebimento de dados Silverlight na prática
virtual em Java EE 5 Java ME - Parte 3 saber sobre MIDP3? OO com ASP.NET - Parte 1 no Pocket usando FTP
utilizando JSF para a interface
com o usuário.- Parte 1
15:00-16:20 Implementando uma loja Introdução ao uso do bluetooth Mini Curso 2 – Conectividade em Java Construa uma aplicação 100% Windows Mobile no Windows WorkFlow Foundation no ASP.NET
virtual em Java EE 5 em J2ME ME - Do básico ao avançado - Parte 1 OO com ASP.NET - Parte 2 CE
utilizando JSF para a interface
com o usuário.- Parte 2
17:00-18:20 Desenvolvendo e implantando Desenvolvendo aplicações Mini Curso 2 – Conectividade em Java AJAX Control Toolkit SQL Server 2005 Compact Desenvolvimento WEB: Uma
uma força de vendas em Palm Web com o Spring Framework ME - Do básico ao avançado - Parte 2 Edition - Parte 1 Abordagem Utilizando OO e
- Parte 1 – Parte 1 Técnicas de Teste de Software
18:30-19:50 Desenvolvendo e implantando Desenvolvendo aplicações Multimídia em J2ME RenatoFaria e Net Framework 3.0 - Conheça SQL Server 2005 Compact Testes automatizados em
uma força de vendas em Palm Web com o Spring Framework eduardo peixoto o WPF e surpreenda-se Edition - Parte 2 aplicações ASP.NET
- Parte 2 – Parte 2