Revista The Club Megazine - 06/2002
A 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” são terminantemente proibidos
sem autorização escrita dos titulares dos direitos autorais.
Copyright © The Club® 2002
Editorial
Editorial
Olá Amigos,
THE CLUB
Rua Acre, 950 - Avaré - SP - CEP 18.700-260
Informações: (0xx14) 3732-3689
Suporte: (0xx14) 3733-1588 - Fax: (0xx14) 3732-0987
Internet
http://www.theclub.com.br
Cadastro: [email protected]
Suporte: [email protected]
Informações: [email protected]
Dúvidas
Correspondência ou fax com dúvidas devem ser
enviados ao - THE CLUB, indicando "Suporte".
Opinião
Se você quer dar a sua opinião sobre o clube em
geral, mande a sua correspondência para a seção
Neste mês nós estamos trazendo informações muito importantes
para você. A Borland mostra o preview do novo Delphi. A maior
novidade é que o novo Delphi está seguindo em direção ao .NET. A
Borland anuncia também o fim do BDE. Outra informação muito
importante para quem trabalha ou pretende trabalhar com automação
comercial é a padronização de DLLs utilizadas em impressoras fiscais.
Para quem trabalha com Palm, vamos aprender a trabalhar com FTP
neste ambiente. E ainda nesta edição vamos começar uma série sobre o
DataSnap.
Como você mesmo pode ver, esta edição está recheada de novidades e
no mês que vem tem mais.
Até lá.
"Tire sua dúvida".
Reprodução
A 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” são terminantemente proibidos sem
autorização escrita dos titulares dos direitos
autorais.
Celso Jefferson Paganelli
Presidente - The Club
Copyright© The Club® 2001
Impressão e acabamento:
Impressos Gril - Gril Gráfica e Repr. Ind. Ltda.
Tel.: (0xx14) 3762.1345 - Fax: (0xx14) 3762.1259
Rua São Paulo, 447 - Cep 18.740-000
Taquarituba - SP
Tiragem: 5.000 exemplares
Diretor - Presidente
Celso Jefferson M. Paganelli
Diretor Técnico
Mauro Sant’Anna
Colaboradores
Claudenir C. Andrade - Mário Camilo Bohm
Marcio Alexandroni da Silva
Anderson H. Rodrigues
Delphi é marca registrada da Borland
International, as demais marcas citadas são
registradas pelos seus respectivos proprietários.
Editorial ......................................................................................... 03
News ......................................................................................... 04
Lendo informações de configuração ................................................ 07
DLL Padrão - Universalização das impressoras fiscais ...................... 10
O futuro do BDE e do SQL Links ...................................................... 14
Controlar fidelização de clientes no ECF ......................................... 15
DataSnap - Parte 1 ......................................................................... 16
LFTP - Palm ................................................................................... 21
Traduzindo as mensagens do Delphi via Translation Manager ............ 23
Perguntas & Respostas .................................................................... 27
MeGAZINE
3
NEWS
Promoção Especial: Banco de Dados ADS para 2 Usuários Grátis para
Desenvolvedores Clipper e VO.
A ReNet Tecnologia Ltda., distribuidora da Extended
Systems no Brasil, cederá em Julho/2002 para desenvolvedores
Clipper ou VO que tenham este software registrado, uma licença
de uso para 2 usuários do servidor ADS (Advantage Database Server)
para utilização em seu ambiente de desenvolvimento e testes.
Visite www.renet.com.br, cadastre-se em nossa área de
download e nos envie por fax (11 3872-4418) cópia do cartão de
registro de sua licença de uso do Clipper ou do VO, informando o
sistema operacional de rede desejado (NetWare, Linux, Windows
NT/2000 ou Windows 9x). Após, a ReNet enviará email
informando situação da solicitação e procedimento necessário
para o download do ADS. Os dados para ativação serão fornecidos
no termo de cessão de direitos de uso.
A licença para 2 usuários a ser cedida é para uso interno do
desenvolvedor e não poderá ser revendida, distribuída ou
transferida. Somente será cedida uma licença por desenvolvedor.
Visite www.renet.com.br para conhecer o ADS, clientes
nacionais e internacionais e lista completa de funcionalidades
presentes e futuras, ou contate-nos no telefone abaixo.
ReNet Tecnologia Ltda.
[email protected]
Tel.: 11 3872-0423
Fax: 11 3872-4418
A Disneylândia dos geeks
No dia 3 de junho de 2002 o jornal O Globo mostrou na capa
do seu caderno de Informática a seguinte frase: A Disneylândia
dos geeks, se referindo a Borland Conference 2002. Veja abaixo a
matéria.
Está surgindo uma nova aurora na tecnologia da
informação, e sua gênese pôde ser vislumbrada na Borland
Conference (BorCon) deste ano, que aconteceu neste resort do
oeste americano onde fica a Disneylândia original. Aurora, não
por acaso, é um dos codinomes das futuras linguagens de
programação que a empresa pretende lançar no segundo
semestre deste ano e no começo de 2003, que podem mudar a face
do e-business e da própria internet, tornando-a mais ubíqua do
que já é, através dos tão cantados e decantados web services.
A conferência é um mar de geeks do mundo inteiro, e
nenhuma palestra está completa sem a inclusão de várias linhas
de código. Mas, ao contrário da MacWorld, em que Steve Jobs
gosta de posar de Deus para uma platéia boquiaberta, a BorCon é
uma mega-reunião de família, capitaneada e organizada pelo GG
David Intersimone (ou David I, seu nome “oficial” na comunidade
de programadores), em que é impossível não se sentir à vontade.
A festa começa no próprio keynote de abertura, em que David —
vice-presidente de relações com desenvolvedores e um dos pilares
da comunidade Borland (está na empresa desde a fundação, em
1983) — faz um monte de brincadeiras antes de anunciar as
novidades, geralmente de bermuda e camiseta.
Este ano, porém, quando as luzes se apagaram no salão de
baile do Anaheim Convention Center, começou a tocar a músicatema dos filmes de 007 e logo o impagável David — uma figuraça
barbuda e bonachona de 1,90m de altura — surgiu de smoking e
pistola em punho, numa entrada triunfal. No telão, aparecia um
dos “filmes” de “David Bond”: “Licenced to Code” (“Licenciado
para programar”). Pouco depois, entrou o CEO Dale Fuller e o
keynote começou para valer.
Nova linha de desenvolvimento em Java
Não houve nenhuma chuva de lançamentos de caixinhas ao
4
longo do evento, com a exceção da nova linha “javanesa” para
desenvolvedores: o JBuilder 7 (nova versão do ambiente de
desenvolvimento Java da Borland), o Enterprise Studio 4 para
Java (que integra todos os elementos do ciclo de criação de uma
aplicação) e a Optimizeit Suite 4.2, voltada para aplicações mais
robustas. Mas o que chamou mesmo a atenção foram os previews
dos futuros Delphi, Kylix e C++. Os ambientes estão seguindo
irreversivelmente em direção ao .NET da parceira Microsoft, aos
web services e à conversa livre entre aplicações nas mais diversas
plataformas, do PC ao celular.
Foi, de fato, muito interessante essa prévia de como o
framework vai se comportar — diz João Carlos Bolonha,
consultor técnico da equipe de projetos especiais da Borland no
Brasil. — A idéia é portar o código que você já tem hoje até o
mundo .NET. Praticamente todas as funcionalidades que você
tem hoje no Delphi estarão disponíveis para o .NET, e foi
mostrado um preview do compilador, os caminhos de migração...
Envolvendo Kylix e Delphi, o ponto principal foi esse.
No caso do C++, ele será usado com o Kylix (o Delphi para
Linux) e também portado para desenvolvimento (como o Java já
é, via JBuilder MobileSet, por exemplo) em celulares 2.5G e 3G,
bem como PDAs, smartphones e outros micrinhos com o sistema
operacional móvel Symbian. Isso significa, entre outras coisas,
programar confortavelmente em simuladores de celulares dentro
do PC.
Ao usar o JBuilder MobileSet, você pode ter um simulador do
Nokia Communicator ou de um aparelho Sony Ericsson em seu
PC enquanto desenvolve ou debuga algo. O J2ME (Java 2 Micro
Edition) também tem uma API padrão para esses simuladores —
explica David. O C++ funcionará de maneira semelhante. No
keynote de abertura, foi mostrado como os ambientes de
desenvolvimento eram rapidamente compilados de um notebook
para um PC com monitor removível e para um celular. Ficou
todo mundo babando...
A “nomenclatura” das futuras linguagens foi fornecida em
MeGAZINE
NEWS
outro keynote, o de Michael Swindell, diretor de tecnologia do
grupo de RAD (Rapid Application Development) da Borland. O
supracitado Aurora é o nome “secreto” do Delphi 7, que virá com
um compilador para o .NET; depois chega o Galileo, o Delphi para
o .NET (a linguagem é definida como um puro ambiente de
desenvolvimento multiplataforma para a arquitetura da MS); e,
por fim, o Charlotte, uma nova linguagem de programação
especialmente voltada para criar e “scriptar” web services. No
campo móvel, haverá primeiro um C++ com plugins para o
Symbian OS e depois um C++ Builder para o sistema.
Keynotes de Microsoft, Intel e Sun
Nem só de Borland se alimentaram os keynotes do evento. As
parceiras Microsoft, Sun e Intel também fizeram os seus. Da
última, veio Chris Thomas, ex-estrategista chefe, que vaticinou
que estamos num novo momento de mudanças drásticas ao
tascar no telão a frase de Gordon Moore: “Você nunca sai de uma
recessão com a mesma tecnologia com que entrou nela”. Olhando
para trás, dá mesmo o que pensar. Thomas analisou as
mudanças que levaram do mainframe ao PC e do PC à internet.
E a pergunta que ficou no ar foi: o que vem depois da web? Para
ele, a resposta é a interação entre aplicações via padrões da Rede,
isto é, os web services. Eles de novo.
Hoje, as aplicações são a chave para eles — disse. — A
padronização expande as oportunidades e a melhor escolha é não
escolher. E o catalisador desta inovação é a mudança de
arquiteturas e plataformas proprietárias para plataformas
baseadas em standards.
A Microsoft, naturalmente, entoou loas à sua nova
arquitetura. Levou para isso um nome de peso, Anders
Hejlsberg, principal designer do C# (C “sharp”) e um dos
criadores do Turbo Pascal. Sua palestra foi eficiente, mas, como
confidenciou um veterano programador, “puxa vida, com esse
negócio do .NET está todo mundo amiguinho aqui este ano! Não
se fala mais mal da MS...” E da Sun veio James Gosling, o pai do
Java, que, de acordo com o tom da BorCon, sentenciou: nada é
mais stand-alone hoje. O que importa são sistemas, não programas,
e o desenvolvimento/design integrado de ponta a ponta. O
exemplo em Java foi uma demo da total simbiose dos serviços
num posto de gasolina, por exemplo, com tudo cúmplice de tudo
na parte digital: a bomba de combustível, a cobrança, as
máquinas de refrigerante e assim por diante.
Fonte: Jornal O Globo 03/06/2002
MeGAZINE
5
NEWS
O futuro da tecnologia é a integração
Eles fazem (quase) tudo juntos, incluindo keynotes. Nas
entrevistas não podia ser diferente. O CEO da Borland, Dale
Fuller, e o vice-presidente de relações com desenvolvedores, David
I, são o retrato de um modo especial de gerir negócios. Totalmente
integrados à sua comunidade de programadores, ambos
passaram madrugadas na BorCon conversando com a galera
e ouvindo as mais variadas sugestões. Aqui, falam do futuro da
TI.
O futuro são mesmo os web services? Como eles vão mudar a
cara da internet?
DALE FULLER: Os web services são as linguagens de
comunicação entre aplicações diferentes, díspares, e essa
interoperabilidade é o futuro. A força da tecnologia, hoje, está
nisso — como conectamos melhor hardware, pessoas, aplicações.
As aplicações de software se tornam mais poderosas à medida
que conversam entre si num nível cada vez mais fluido.
DAVID I: A vantagem dos web services é que eles são uma
interface. Você trabalha com interfaces, e programadores
entendem bem as interfaces, já que elas estão aí faz algum
tempo. Segundo, eles são baseados em descrições de texto das
interfaces, bem como dos parâmetros e seus tipos, usando XML.
Terceiro, são baseados num protocolo que todo mundo conhece e
entende, que é ubíquo.
Quando veremos tudo funcionando, conectado entre si?
DALE: Não creio que veremos tudo conectado a tudo. Mas
estamos começando a ver a integração. O Java foi a primeira
tentativa, e vem fazendo um ótimo trabalho, via J2EE, para
permitir que a interoperabilidade atravesse plataformas
distintas. Foi um marco nessa caminhada, pois antes disso eu só
podia escrever aplicações para uma plataforma específica, e só se
podia falar com outras através de RPCs, mas era tudo a mesma
plataforma. O Java mudou isso. E agora vem o .NET e, o mais
importante, os web services em cima, integrando tudo. Tende-se
a ver mais e mais integração de aplicações e dispositivos — por
exemplo, mais conexões com programas em aparelhos wireless
nos próximos 18 a 24 meses, mais integração entre aplicativos
via XML, via UDDI [ Universal Description, Discovery and Integration,
diretório web que permite a empresas se listarem e se descobrirem rapidamente
na rede ]. Mas você tem de lembrar que ainda há uma tremenda
quantidade de software legado [ legacy software, aplicações próprias de
uma empresa — como bases de dados — que geralmente rodam em seus
mainframes ou computadores de médio porte ] que não chegará lá tão
cedo. Vamos precisar integrar tudo, não será o caso de apenas
6
dar um salto para o futuro. Sabemos que hoje mais de 50% das
aplicações rodando no mundo, nos computadores das empresas,
ainda são baseadas em Cobol, escrito nos anos oitenta... De modo
que sabemos ter uma grande oportunidade com as novas
tecnologias, mas não podemos esquecer o passado. E esta é nossa
missão na Borland: ajudar as pessoas a entrar no futuro sem
esquecer o passado.
Não é difícil para vocês navegar através de tantas
plataformas por vezes conflitantes entre si, como Java, Windows
e .NET, Linux?
DALE: Oh, é um bocado difícil ( risos ). Por isso conto com um
pessoal capaz de reunir as complexidades e fazê-las parecer
simples para o usuário. É o que fazemos: buscamos capacitar o
novo mundo digital. Não criamos o Linux, nem o Java, apenas os
disponibilizamos para que as pessoas os usem em seu benefício.
Quais as características mais importantes dos vindouros
Delphi 7 e Kylix 3?
DAVID: No Delphi 7, a idéia é preparar cada vez mais todo
mundo para o .NET, que está saindo do forno. A primeira fase
consiste em usar um compilador do Delphi para o .NET, bem
como nossa biblioteca de componentes, construída em cima do
framework do .NET. Assim, eles poderão criar aplicações para o
ambiente. A segunda fase será a integração com designers etc,
permitindo às pessoas usar e desenvolver para o .NET. No
primeiro semestre de 2003 haverá integração total de nossos
produtos com o .NET e novas tecnologias nesse sentido virão. No
Kylix 3, a pedida é o trabalho conjunto do C++ com o Delphi em
Linux, usando nossa biblioteca CLX.
Como está indo a Borland no Brasil? Como será a primeira
BorCon nacional, em agosto, em São Paulo?
DAVID: Será junto com a Comdex. Farei um keynote sobre a
história da programação e para onde ela está indo, incluindo os
web services.
DALE: O mercado brasileiro é muito interessante. Uma das
três companhias que adquirimos no ano passado é brasileira, a
ATC. Estamos animados com os investimentos que fizemos no
país. Achamos que o Brasil e, na verdade, todo o hemisfério sul,
podem liderar a carga em direção à maior explosão de tecnologia
da informação que o mundo já viu.
Fonte: Jornal O Globo 03/06/2002
MeGAZINE
.NET
Lendo Informações
de Configuração
Por Mauro Sant’Anna ([email protected]). Mauro é um “MSDN Regional
Director”, consultor e instrutor da MAS Informática (www.mas.com.br), tendo
ministrado treinamentos na arquitetura .NET desde outubro de 2000.
Neste artigo veremos como foi a evolução do armazenamento
e leitura das informações de configuração dos programas nos
sistemas operacionais da Microsoft, desde o DOS até o .NET e
exemplos de como fazê-lo no .NET.
No início era o DOS
O sistema operacional DOS não definia uma maneira como
deveriam ser armazenadas as informações de configuração; cada
programa fazia o que queria; uma solução comum era gravar
arquivos binários no diretório do programa.
O Windows 3.0 introduziu os arquivos .INI para armazenar
as próprias informações de configuração e disponibilizou funções
para que os aplicativos pudessem fazer o mesmo. Os arquivos
.INI tinham várias vantagens:
· Suporte do sistema operacional para ler e escrever
informações;
· Usavam o sistema de arquivos para armazenar os dados,
com todas as facilidades de cópia, back-up e uso em rede. local;
· Podiam ser alterados com qualquer editor de texto em caso
de “emergências”;
O Windows 95 introduziu o “Registry”, uma base de dados
global gerenciada pelo Windows para armazenar informações de
configuração. O Registry traria as seguintes vantagens:
· Estrutura de dados hierárquica, com tipos de dados
bastante variados
· Separação das informações do usuário (sob a chave HKCU)
e as do equipamento (sob HKLM)
· O sistema operacional poderia trocar partes do Registry
assim que o usuário fizesse login, de forma a permitir que um
usuário pudesse usar qualquer computador da rede.
Problemas no Paraíso
Podemos dizer hoje que o Registry foi uma idéia que não deu
certo. Em primeiro lugar, ele não acrescentava nenhum recurso
que não poderia ser fornecido pelo próprio sistema de arquivos.
Por exemplo, poderíamos guardar informações de configuração
em diretórios especificados pelo sistema operacional e ter desta
forma todas as vantagens introduzidas pelo Registry.
O Registry introduziu diversos problemas que não existiam
anteriormente:
· É uma base de dados que pode ser corrompida e tornar o
sistema inoperável;
· É difícil fazer back-up e restore (bem mais difícil que nos
arquivos do disco)
· O Registry acaba acumulando lixo e ficando cada vez maior
e existem limites de tamanho do Registry que podem ser
ultrapassados, mesmo no Windows XP
· A troca de informações de HKCU quando o usuário faz
login revelou-se muito lenta e viável apenas em redes locais
rápidas.
Configuração .NET
Na plataforma .NET a Microsoft voltou atrás: os programas
.NET não usam o Registry e sim arquivos-texto. Não que o
Windows deixe de ter um Registry depois da instalação do .NET:
ele não só continua com o Registry como também recebe mais
MeGAZINE
7
.NET
algumas entradas. O que queremos dizer é que os programas
.NET não precisam (e não devem) usar o Registry para nada. Os
arquivos-texto nos quais devemos colocar informações de
configuração são no formato “.INI dos anos 2000”, ou seja, o
XML.
Existem vários arquivos XML com informações de
configuração:
· security.config: Informações de segurança. Não deve ser
editado diretamente, use o aplicativo gráfico “.NET Framework
Configuration tool” (Mscorcfg.msc) ou o aplicativo de linha de
comando “caspol.exe”; você pode criar programas “.bat” com o
caspol.exe de forma a automatizar a aplicação de configurações
complexas;
· machine.config: Informações globais de configuração do
computador. Pode ser alterado para conter informações de vários
programas, mas torna inviável a “instalação com xcopy”;
· web.config; Informações de configuração de aplicativos Web;
· “nome.exe.config”: Informações de configuração de
aplicativos não-Web; deve ter o mesmo nome do executável e
estar presente no mesmo diretório.
Estamos interessados nos dois arquivos associados ao
aplicativo. Embora possam conter informações diferentes e
tenham nomes diferentes, eles têm várias coisas em comum:
· São opcionais; seu aplicativo pode omiti-los;
· Podem conter entradas que não tem nada a ver com
informações que você esteja
diretamente interessado em
ler; por exemplo, opções de
depuração ou diretórios
onde se encontram outras
DLLs;
· Definem seções
específicas para
armazenamento de
informações de
configuração do usuário
Os arquivos associados
ao aplicativo podem conter
uma entrada especialmente
criada para conter
informações de
configuração chamada
“appSettings”. Veja um
trecho do arquivo de
configuração com esta
opção:
<!—Outras entradas vão
<appSettings>
<add key=”Nome1"
<add key=”Nome2"
<add key=”Nome3"
</appSettings>
value=”Valor1" />
value=”Valor2" />
value=”Valor3" />
</configuration>
A primeira entrada acima pode ser lida com apenas uma
linha de código:
Using
System.Configuration;
string Valor =
ConfigurationSettings.AppSettings[“Nome1”];
Um exemplo com aplicativo Windows
Uma situação comum é ler a string de inicialização do banco
de dados a partir do arquivo de configuração. Desta forma,
podemos alterar informações do banco sem ter que recompilar o
programa.
Crie um aplicativo novo “Windows Appplication” em C# com o
nome “WinApp.exe”. Coloque um Button e um ListBox:
<?xml version=”1.0"
encoding=”utf-8" ?>
<configuration>
8
aqui —>
MeGAZINE
.NET
Crie com o Notepad um arquivo chamado
“WinApp.exe.config” NO MESMO DIRETÓRIO DO
EXECUTÁVEL, por exemplo, \bin\debug com o seguinte
conteúdo:
Observe que teremos que colocar a seção “<appSettings>”
dentro da seção <configuration> já existente.
Adicione um Button e um ListBox ao aplicativo:
<?xml version=”1.0"
encoding=”utf-8" ?>
<configuration>
<appSettings>
<add key=”StrCnx”
value=”Database=Pessoal;
uid=appuser;pwd=tri08lk”/>
</appSettings>
</configuration>
Pode ser que este arquivo já exista,
neste caso inclua a seção “<appSettings>”
dentro da seção <configuration> já
existente. O código no evento Click do
botão é o seguinte:
string StrCnx =
System.Configuration.
ConfigurationSettings.
AppSettings[“StrCnx”];
listBox1.Items.Add(StrCnx);
Um exemplo com aplicativo
Web
Crie um aplicativo Web em C# com o nome “WebApp”.
Observe que existe um arquivo web.config já criado. Dê um
clique duplo para editá-lo:
O código no evento Click do botão é o
seguinte:
string StrCnx =
System.Configuration.
ConfigurationSettings.
AppSettings[“StrCnx”];
ListBox1.Items.Add(StrCnx);
Ler informações de configuração na
plataforma .NET é algo bastante simples
e que não sofre dos problemas do
Windows com o Registry.
Caso você queira também gravar
informações, a maneira “oficial” é criar
um arquivo XML e gravá-lo no diretório
do aplicativo. Ler e escrever é mais difícil,
contudo, pois exige conhecimentos mais
profundos de XML e a classe
XMLDocument.
MeGAZINE
9
Delphi
Dll Padrão
(Universalização das Impressoras Fiscais)
Por Claudenir C. Andrade
Em nosso país, com a saída de dois expressivos fabricantes de
Automação Comercial, permanece no país mais cinco fabricantes
de impressoras fiscais. Um dilema enfrentado por muitas
software-houses é a necessidade de se falar com vários
fabricantes de impressoras fiscais. Hoje é necessário um controle
detalhado no software para fazer com que um programa de
frente de caixa “fale” ou funcione com todas as impressoras de
mercado. Para isso o software deverá conter vários flags,
controles, Ifs etc. mais ou menos assim:
If Bematech
Bematech_FI_AbreCupom(“212132”);
If Yanco
Y200_Fiscal(“ESC32”)
If GSV
....
Sem sombra de dúvidas isso dificulta e requer um controle
muito detalhista do software e com isso um conhecimento muito
profundo de cada periférico fiscal, para saber qual função
chamar, a seqüência de escape correta, etc.
Pensando nisso a Afrac resolveu criar um “padrão
documental” de uma interface de comunicação com as
impressoras fiscais. Isso significa que quando você chamar a
função Afrac_AbreCurpom(“xxx”) esta função servirá para todas
as impressoras fiscais, abrindo cupom para todas as impressoras
fiscais existentes no mercado. Eu acompanhei muito das
reuniões do grupo técnico para a construção desta interface (que
considero um sub-set da interface que construímos na
Bematech) e muitas funções foram acrescentadas e corrigidas
nestas reuniões. No final de tudo isso, saiu um documento ou
normalização de construção de interface para impressoras
fiscais, ou seja, se um fabricante deseja estar dentro desta norma
deverá construir sua dll com base nesta norma escrita.
Do outro lado, no lado do desenvolvimento de software, o
10
desenvolvedor poderá chamar a função
AFRAC_AbreCupom(“xxx”), o único trabalho ou diferença será
que o desenvolvedor deverá baixar a dll do fabricante com estas
funções. Não haverá uma ÚNICA dll que converse com todas as
impressoras fiscais, mas sim cada fabricante fornecerá sua dll
com base no padrão escrito pela Afrac.
O Fabricante Y gera uma dll com seu protocolo de
comunicação, o Fabricante X com seu protocolo e o Fabricante Z
também, com seu protocolo e sua regra de negócios. Quando uma
software house necessitar utilizar a Impressora do Fabricante Y.,
então ele somente baixaria a dll de seu site e instalaria no PDV,
quando necessitasse utilizar o ECF do fabricante X também,
baixaria a dll deste fabricante e instalaria no PDV. Este é o
padrão de interface estabelecido pela Afrac (Associação de
Fabricantes e Revendedores de Automação Comercial).
Sem dúvida nenhuma a proposta da Afrac de ter este padrão
de comunicação é o ideal para atender a todos nós
desenvolvedores que trabalhamos com Automação Comercial.
Todos os Fabricantes estão aderindo a esta modalidade, a
Bematech tem por previsão futuramente ter esta dll também.
Mas existem questões que em meu ponto de vista não foram
pensadas no momento em que se pensou na padronização das
impressoras fiscais. Esta padronização chega em um momento
não adequado e sem nenhuma força frente a necessidades do
mercado, das software houses. Porque? Existem várias questões
envolvidas vamos analisá-las:
1) A Afrac não está propondo nada de Novo, toda a
documentação da Interface Padrão é Baseada 90% em DLL de
comunicação do Fabricante Bematech, que por vários anos já
possui uma interface em Alto-Nível, como o proposto pela Afrac
2) A Afrac em nenhum momento está se responsabilizando
pelo avanço tecnológico desta interface Padrão, tendo em vista
que existirá uma padronização de todas as interfaces, muitos
fabricantes olharão para esta padronização com bons e maus
MeGAZINE
Delphi
olhos. O que levaria o Fabricante Y gastar tempo e dinheiro
pensando em novas funcionalidades para a Interface Padrão
quando todos os fabricantes (Que são concorrentes) usufruiriam
um trabalho realizado? Quem arcaria com a despesa da pesquisa
e do tempo de desenvolvimento? Esta falta de definição
infelizmente levará a interface para o caminho do Obsoleto, pois
todos os Fabricantes concorrentes estarão esperando um ao outro
que lance e crie novas funcionalidades, como nenhum deles o
fará, pois isso beneficiará seu concorrente também, a interface
estará fadada a não evoluir.
3) Um fator a ter em mente é que a Interface Padrão não
siga a união de todos os Fabricantes , os fabricantes continuam
sendo concorrentes, continuam se diferenciando pelo suporte em
suas dll nativas (fora do padrão) e continuarão a investir
(Tempo e Dinheiro) para a evolução tecnológica de suas dlls e
drivers nativos, e não da Interface padrão Afrac, pois isso
significaria gastar tempo e dinheiro para que seus concorrentes
também se beneficiem. O resultado disso será o status estagnado
da dll.
4) Suporte será o diferencial – Não estou falando aqui do
suporte telefônico ou em campo que muitos fabricantes tem se
destacado, mas falo do suporte tecnológico, das parcerias de
tecnologia. Todos os fabricantes irão manter em paralelo suas dll
Nativas existentes e gastarão Tempo e Dinheiro para criação de
novas funções - TEF, Relatórios da Legislação, Comunicação
nativa com outros periféricos de AC, Funções cada vez mais
inteligentes e completas – Todos estes ‘features’ continuarão a
evoluir na dll Nativa e não na interface padrão, porque isso
significaria que também o concorrente, sem esforço nenhum,
teria este ‘feature’ documentado e pronto para implementar, sem
gastar tempo, sem gastar dinheiro, sem ocupar sua equipe de
desenvolvimento, sem gastar tempo em testes, liberação etc., pois
uma vez que algum fabricante tenha documentado este novo
‘feature’ na Interface Padrão, todos irão usufruir.
Estes são apenas alguns pontos a serem pensados quanto à
decisão do uso de uma interface Genérica ou não. Infelizmente
esta padronização nasce somente agora, quando na verdade
deveria nascer desde o Firmware, desde seu Set de comandos,
desde o Hardware Fiscal, e não em uma camada intermediária
como uma simples dll, porque? Explico.
No Brasil, mesmo com a existência de uma lei fiscal, existem
diferenças operacionais entre as impressoras fiscais, existe
literalmente diferenças de Escapes de comando no Firmware de
uma impressora fiscal para outra impressora. Isso é a real
impossibilidade de se ter uma padronização. Muitas empresas
investiram no padrão OLEPOS e WOSA vários outros padrões
para o desenvolvimento de software para pontos de venda e
Automação de Bancos, mas nenhum deles decolou exatamente
por dois motivos, um deles o foi o obsoleto que ficou a interface,
por não acompanhar o mercado tecnologicamente, e outro dele é
que todo padrão é um Sub-Set, queira ou não todo padrão é um
sub-set.
Conforme comento, mesmo com uma lei de Homologação
Única para as impressoras ficais, existem diferenças
significativas de “features” entre uma impressora fiscal e outra,
como por exemplo, o número de linhas em uma mensagem
promocional, impressão no verso de um cheque ou não,
cancelamento e um último cupom após a emissão de um
vinculado não fiscal, tabela de retorno de status de uma
impressora fiscal, cancelamento de um item, informações da
impressora em número de bytes etc.., Toda esta
“despadronização” nasceu de berço, no firmware que é
homologado pelos fabricantes em órgãos nomeados pelo governo a
homologar e aprovar o uso de impressoras fiscais no Brasil.
Isso que comento, significa que em um estudo realizado a
interface nasce com 40% menos de operações que qualquer dll
nativa oferecida hoje por um fabricante de Automação Comercial
e a redundância de verificações dentro do código fonte, para
identificar o fabricante, ainda irá continuar e o software ainda
terá que ter seus “Ifs” para determinadas operações.
Dando um exemplo para entendermos a diferença entre uma
dll nativa por um fabricante e uma interface padrão é o caso do
Veículo Gol 1.0, Gol 1.6 e Gol 1.8, todos estes modelos de GOL têm
algo em comum? Tem sim, todos podem andar no mesmo ritmo e
na mesma velocidade que o 1.0. Você não estaria utilizando toda a
potência oferecida pelo Gol 1.8 e 1.6, pois para igualar estaria
desperdiçando quase menos da metade da potência oferecida pelo
veículo. Ou seja, como não existe padrão de velocidade, marca,
cavalos, válvulas etc.. Para padronizar estes três modelos, como
estão hoje sem mexer no motor, teríamos que sub utilizar o 1.6 e o
1.8 porque não é possível fazer que o 1.0 tenha o mesmo
desempenho e torque que o 1.6 e 1.8.
Idêntico ao exemplo acima é o caso dos ECFs no Brasil,
existem modelos de EFC com muito mais “features” (Gol 1.8) e
existem modelos de ECF com muito menos features (Gol 1.0).
Para criar um padrão entre estes equipamentos será necessário
sub-produtor ou descartar alguns features oferecidos pela
impressora e que estão presentes naturalmente na dll nativa do
fabricante. Isso implica em menos funções para o software e
talvez em mais trabalho para se obter um resultado uma vez que
com uma escrita e uso nativo de uma dll seria de imediato.
A falta de padronização no firmware e a tentativa da Afrac
de criar um padrão em DLL de comunicação não eliminará a
necessidade de verificação do software para identificar o
fabricante para a tomada de decisão em comandos simples como
Retorno do número de série da impressora, não são todos os
fabricantes que tem a mesma quantidade de bytes a serem lidos
pelo software e nem todos os fabricantes possuem a mesma
formatação de número de série de 4 Dígitos para modelo, e o
restante para Lote e Data. Isso significa que ainda será
MeGAZINE
11
Delphi
necessário um “IF” ou uma leitura de um arquivo para se saber quantos bytes aquele fabricante em questão retorna de maneira
que a Impressora que está rodando na “ponta” nunca será totalmente transparente para o software. Graficamente falando, a
padronização resultou no seguinte:
O resultado da Padronização entre os três ECFS será uma
interface com a seguinte característica de funções:
Abre Cupom
Isso porque este será o único comando em comum existente
entre os ECFs. O que aconteceria se a Interface padrão tiver o
comando de Função Comunicação TEF? Não iria funcionar no
ECF Y e no ECF Z, ou seja, o potencial oferecido por estes ECFs
juntamente com suas dlls nativas seriam desperdiçados. A
interface padrão possui uma tabela de “features” que indica o que
faz certo ECF ou não, esta tabela é fornecida pelo fabricante
juntamente com a Interface Padrão, mas isso diz então que a
interface não deixa a impressora transparente para o software e
voltamos no cenário atual de utilizarmos os Ifs nos softwares
para a identificação da impressora e do fabricante.
Por exemplo, como solucionar o caso do número de série ou do
status da impressora fiscal? Simples, se a padronização estivesse
nascido do Firmware esta iniciativa de padronizar a DLL seria o
ideal, pois TODOS os ecfs teriam os MESMOS comandos e uma
dll padrão não desperdiçaria o potencial de determinados ECFS e
suas DLL Nativas
10.6 Então o que usar? Dll Padrão ou Nativa?
Bem, isto é uma pergunta que o leitor já deve estar se
fazendo a altura deste capitulo. Não cabe a mim decidir isso, mas
vamos analisar o cenário atual do mercado de automação para
que possa nos ajudar a decidir esta questão.
12
Cada vez mais existe a necessidade de oferecer melhores
serviços para nossos clientes, oferecer uma solução e garantir seu
funcionamento.
Este é o cenário Atual do mercado, válido principalmente
para as empresas de software, que segundo o que vimos, tem o
perfil muito mais próximo de oferecer solução para o cliente.
Quando uma software-house decide deixar seu software
“falando” com qualquer impressora fiscal do mercado ela então
passa a utilizar a Interface Padrão, pois o discurso é que esta
interface padronizada pela Afrac se comunica com qualquer
impressora fiscal. Isso significa que sua empresa de software esta
se responsabilizando pelo uso de qualquer impressora.
O cliente quando tem um problema deseja uma solução o
mais rápido possível e o mais confiável possível, ainda mais
quando estamos falando de PDV, o ponto mais estratégico de um
estabelecimento comercial, sendo assim, se uma empresa de
software garante que seu produto funciona com qualquer
periférico fiscal, mesmo que indique uma marca, está se
responsabilizando pelo uso de outras marcas que não são tão
confiáveis assim e que não oferecem um suporte ou um pósvenda adequado, e quando este ecf apresentar problemas a
primeira empresa que o cliente entra em contato é a Software
House. Isso pode ser uma faca de dois gumes, você permitir que
seu software rode com qualquer periférico significa que você
homologou este periférico e o aprovou, de nada adiantaria
implementar a dll padrão AFRAC em seu software e não assumir
responsabilidade pelo uso de determinados modelos e marcas de
ECF. Seria totalmente incoerente o discurso de “Meu Software
MeGAZINE
Delphi
Fala com Qualquer ECF. Mas o X, Y, Z não aconselho, aconselho
que use apenas o ECF A e B”, sendo assim a pergunta é: Não
valeria a pena então desenvolver utilizando a dll Nativa do
fabricante A e B? Cabe a você decidir e responder. Mas antes
disso é importante que seja pensado e ponderado as questões
abaixo, que estou certo que o ajudará a tomar a decisão:
1) Tenho todas as funcionalidades necessárias para o término
de meu software?
2) Conseguirei oferecer a meu cliente, o potencial máximo
que o ECF possui?
3) Quando necessário terei atualizações de versão de acordo
com a legislação em sua totalidade, com Relatórios, etc?
4) Há Velocidade na solução de problemas?
5) Quanto tempo está no mercado a interface X?
6) Já está depurada e testada e aprovada por muitos
desenvolvedores?
7) Todos os fabricantes me oferecem uma pós-venda,
assistência técnica, suporte que necessito para estar garantindo o
uso de qualquer ECF em meu software?
8) Por quanto tempo as marcas X e Y permanecerão no
mercado?
9) Não estarei correndo riscos possibilitando a entrada de
qualquer hardware desconhecido em meu software?
Uma vez respondida estas questões com certeza você terá
tomado sua decisão, que seja qual for, sempre garanta que seu
cliente e você nunca ficarão na mão, e sempre estará na
vanguarda da tecnologia em Automação Comercial e que assim
você poderá sempre oferecer mais e melhores serviços a seus
clientes.
MeGAZINE
Claudenir é gerente de desenvolvimento de
software na Bematech e autor do livro “Automação
Comercial com C#, VB.NET e Delphi 6” lançado
pela Editora Érica – www.erica.com.br.
Ele também pode ser contatado pelo e-mail:
[email protected].
13
DELPHI
O futuro do BDE
e do SQL Links
A Borland revela os planos para o futuro do acesso a dados no
Delphi e no C++ Builder.
Em 2000 a Borland introduziu uma nova arquitetura de
driver SQL chamada dbExpress. O dbExpress foi desenhado
para ter um acesso extremamente rápido ao dados e de fácil
desenvolvimento e configuração.
O dbExpress é um driver de arquitetura SQL pura e não usa
a tecnologia do BDE. O dbExpress também foi desenhado para
ser altamente portátil e os drivers estão sendo feitos tanto para
Windows quanto para Linux. Esta nova arquitetura de driver
substitui a funcionalidade de acesso a dados do antigo BDE SQL
Links, mas sem o runtime e o desenvolvimento sobre o BDE.
Desta vez o dbExpress (que em breve será conhecido como
DataSnap Direct) é o driver recomendado para o acesso a base de
dados SQL Server no Delphi e no C++ Builder. Nós estaremos
deixando de utilizar a tecnologia BDE SQL Links em 2002 e
2003. Isto significa que não haverá mais nenhum
aprimoramento ou melhora no SQL Links em 2002.
O dbExpress foi desenhado com o objetivo de substituir o SQL
Links, portanto nós temos sustentado a migração e transição em
mente desde o principio. A arquitetura do desenvolvimento de
aplicações com base de dados em Delphi e C++ Builder foram
desenhadas para permitir diferentes tecnologias de acesso a
dados através da camada do Dataset. Neste design os drivers do
banco de dados, desde os componentes de desenvolvimento básico
e o código fonte semelhante àqueles da nova arquitetura dos
drivers, podem ser desenvolvidos sem quebrar o desenvolvimento
básico da aplicação. Isto permite que o mesmo modelo de
programação baseado em banco de dados, componentes visuais, e
DataSnap Middleware possam funcionar sem modificação.
Alguns esforços adicionais podem ser necessários para alguns
ajustes em uma aplicação que acessava o BDE em que algum
programador possa ter usado componentes SQL Links. Tudo isto
14
significa que, o esforço de transição do SQL Links para o
dbExpress foi desenhado para ser de baixo impacto e para a
maioria dos programadores precisará o mínimo de modificação
nos códigos.
Acesso a dados para tabelas locais
O próprio BDE, menos o SQL Links, foi primeiramente
desenhado para suportar tabelas locais Paradox e DBase. O
suporte do BDE às tabelas locais irá continuar. O suporte do
BDE a tabelas locais será marcado “frozen” nos novos releases
dos produtos em 2002. Isto significa que você continuará com as
tabelas locais suportadas pelo BDE, mas nenhum
aprimoramento será mais feito no BDE. O BDE para tabelas
locais continuará a ser suportado, mas você pode considerar que
ele está no estágio final e nenhuma nova característica será
acrescentada ou qualquer bug será corrigido. Enquanto isto não
acontece, a Borland recomenda que você migre as suas tabelas
Paradox e DBase para o Interbase 6 Desktop Edition. O utilitário
Datapump incluído no Delphi e no C++ Builder torna esta
transição mais rápida e simples. Uma vez as tabelas convertidas
para o InterBase, os programadores tem a opção de utilizar os
componentes Interbase Express (IBX) ou o dbExpress para
acesso as tabelas locais do Interbase.
Conclusão
A Borland tomou um grande cuidado ao tomar as decisões
sobre nova tecnologia, particularmente porque podiam afetar os
projetos já existentes ou em desenvolvimento de seus clientes.
Segundo a Borland, os planos para o dbExpress, BDE, e SQL
Links não poderiam ter sido desenvolvidos sem extensivo
feedback de seus clientes. A Borland diz apreciar o
relacionamento que temos com seus clientes e expressam a sua
gratidão para com os seus clientes pelo interesse e a participação
da comunidade de desenvolvimento neste esforço.
MeGAZINE
Delphi
Controlar Fidelização de
clientes no ECF
Por Claudenir C. Andrade
Pode parecer estranho, mas o ECF tem uma função
importante no controle e criação do sistema de fidelização de
cliente. Por quê? Porque toda fidelização está amarrada à compra
realizada ou a um serviço prestado. Por sua vez seu sistema de
retaguarda necessita ser alimentado por valores e pontos,
realizados e trocados em seu PDV.
O ECF é uma dessas ajudas que podemos ter para que este
controle possa ser contabilizado e emitido, sem a necessidade de
mais periféricos ou mais linhas de código adicionais ao programa.
/*Logo após solcitamos a impressão das informações da
pontuação do cliente*/
Bematech_FI_UsaComprovanteNaoFiscalVinculado(Pchar(‘Parabéns
por estar participando de nosso programa – Cliente fiel é Cliente
Feliz- Sua pontuação até o momento é : 870Pontos – Não perca
tempo e troque agora mesmo por mercadorias na boca do caixa
em que você foi atendido!!! 10 Pontos é igual a R$ 2,00; sua
pontuação equivale a 1.740 Reais!!!’));
Bematech_FI_FechaComprovanteNaoFiscalVinculado();
O uso de totalizadores não fiscais, aqui neste caso, é
fundamental. Podemos, por exemplo, criar um totalizador não
fiscal chamado “Fidelidade” e emitir para o cliente. Caso seja
solicitado ou caso esta opção seja default do software, o cupom de
fidelização indicando a quantidade de pontos e acompanhada de
mensagens promocionais para esta operação.
No começo do dia devemos cadastrar os totalizadores para
garantir a existência deles para que possam ser chamados desde
nossa aplicação.
/*Para nomear um totalizador não fiscal deve ser chamada a
função seguinte que como parâmetro necessita de um índice ou
código para esse totalizador e o nome que você deseja/*
Bematech_FI_NomeiaTotalizadorNaoSujeitoIcms
(12,Pchar(’Filedização’));
Para receber compras com a pontuação de seu programa
fidelidade, também não há mistérios. Basta informar a forma de
pagamento como sendo “Fidelidade” e pronto.
As vantagens da utilização dos contadores são as seguintes:
1) Todo processo fica vinculado ao ECF, como um
equipamento de Check com os dados do software.
2) Toda a pontuação emitida fica totalizada na impressora
fiscal.
3) Todo ponto trocado por produto também fica totalizado na
Forma de Pagamento.
No final do dia você tem todas essas variáveis impressas na
redução Z ou na leituraX que pode ser impressa a qualquer
momento na impressora fiscal, tornando o processo mais idôneo e
confiável.
Agora com o totalizador criado, podemos utilizá-lo para
creditar os pontos do cliente após a emissão do cupom e imprimir
um recibo para ele:
Bematech_FI_AbreComprovanteNaoFiscalVinculado
(Pchar(‘A Prazo’), Pchar(‘1000,00’), Pchar(‘00234’));
MeGAZINE
Claudenir é gerente de desenvolvimento de
software na Bematech e autor do livro “Automação
Comercial com C#, VB.NET e Delphi 6” lançado
pela Editora Érica – www.erica.com.br.
Ele também pode ser contatado pelo e-mail:
[email protected].
15
Delphi
DataSnap – Parte I
Por Anderson Haertel Rodrigues
Introdução
COM, OLE , DCOM, MTS, COM+, ActiveX, MSTDC, MMC,
Sockets, CORBA, ORB, Stub, Skelleton, SOAP, DSOM, Interface,
Stateless, Statefull, DCE, RPC, Stack, GUID, CLSID, IID, Early
Binding, Late Binding, Regra de negócios, etc.
UFA! Quanta palavrinha/sigla nova e bonita de ser falada.
Pode ter certeza que deixei de fora mais algumas dezenas de
siglas e palavras. Todas as siglas e palavras citadas acima estão
ligadas uma as outras, é claro, respeitando seus respectivos
fabricantes, os órgãos que as implementaram e as plataformas.
Para iniciar artigos sobre DataSnap “Objetos Distribuídos
(OD)”, não posso deixar de explicar o conceito por trás dessa
tecnologia, o porque a mesma existe e como usar. Fazendo assim,
sentido as siglas apresentadas acima.
Objetos
São entidades. Que manipulam e encapsulam informações,
possui um estado e dados, sendo que, posso modificar e obter
informações sobre o mesmo.
código para executar uma determinada tarefa, independente de
localização. Isto é, eles podem estar na mesma máquina (COM) e
ou máquinas distintas (DCOM, COM+).
Estou citando os protocolos da Microsoft® neste momento,
apenas para uma explicação mais ilustrativa. Veremos mais à
frente, o que é cada Sigla demonstrada e para que serve.
Antes de explicar os protocolos envolvidos no processo de
sistemas distribuídos, não posso deixar de citar que, as
Interfaces* é uma das almas do negócio, isto é, sem um bom
entendimento de Interfaces, você com certeza não entenderá e
não saberá implementar sistemas distribuídos.
É o passo inicial para que possamos ter sucesso nessa nova
empreitada. Mas, antes de iniciarmos na parte técnica, pretendo
demonstrar o conceito 3 Camadas (MultiCamadas), falar sobre
Client/Server a diferença entre os dois e as vantagens de 3
Camadas sobre Client/Server.
*Nota: Não se preocupem, demonstrarei o que é uma
Interface e como utilizá-la nos próximos capítulos.
Existem nos objetos:
A) Atributos - Que correspondem a um valor guardado no
objeto
B) Classificação - É o agrupamento de características
semelhantes.
C) Abstração, - Abstrair características de um objeto.
D) Encapsulamento - Muito parecido com a abstração, pois
permite, ocultar detalhes de implementação ao mundo exterior.
E) Entre outras características não menos importantes, mas,
está além do escopo desse artigo.
Objetos Distribuídos
São objetos conforme explicado acima, mas, armazenam
16
Objetos Distribuídos x Programação Orientada a Objetos
(OOP)
As duas estão intimamente ligadas. Não existem Objetos
Distribuídos sem OOP. Então, se por um acaso passou pela sua
cabeça em desenvolver sistemas distribuídos sem conhecer OOP,
sinto informar que não será possível. OOP lhe permite
desenvolver sistemas Orientado a Objetos, Objetos Distribuídos,
são os mesmos Objetos só que de forma Distribuída.
Não está nos objetivos desse artigo explicar e exemplificar
OOP. Apenas mencionei OOP para demonstrar ao leitor que OD
(Objetos Distribuídos) depende de OOP.
MeGAZINE
Delphi
Multi-Tier
É uma tecnologia que nos últimos anos vem sendo discutida,
falada, mas infelizmente poucos a estão implementando. O
Conceito de Multi-Camadas foi introduzido no Delphi 3, e veio
mesmo com força no Delphi 5, onde ganhou uma ABA chamada
MIDAS.
Middleware
É camada de software responsável pela abstração e
comunicação em alto nível, onde é ela que facilita a programação
distribuída.
Neste cenário temos:
DataSnap - “MIDAS”
No Delphi 6, o MIDAS mudou de nome! Passando a se
chamar: DataSnap, onde na realidade, DataSnap é o MIDAS com
suporte a SOAP/XML HTTP. Então, daqui para frente, não
devemos mais chamar de MIDAS e sim, DataSnap, conforme a
Borland®.
As Camadas
Quando falamos em desenvolvimento em camadas, nos
referimos a um modelo de programação que prevê a divisão do
programa em 3 e ou mais partes bem definidas e distintas:
- Interface - A tela no lado Cliente/Estação Cliente – Não
confundir com Interfaces;
- Regras de Negócio - Definição de regras na camada do
meio; “falando em português bem claro”;
- Aqui ainda existe a dúvida do servidor de Aplicação.
Servidor de Aplicação é uma máquina/computador físico, isto é, é
outro computador o responsável pelo processamento das regras.
- Banco de Dados
Neste cenário, foi apresentada a clássica arquitetura 3
Camadas. Mas, por que alguns autores falam em n-Camadas e
ou Multi-Camadas?
R: O fato se dá que, nada me impede de criar uma camada
auxiliadora no desenvolvimento do meu sistema. Isto é, posso ter
uma camada de conexão ativa com o Banco de Dados, escrita
dentro do Objeto, onde meus vários módulos não necessitam criar
a sua própria camada de conexão. Esses módulos chamam e se
conectam no Banco de Dados, utilizando a nossa camada
Auxiliadora. Pronto, já temos a 4ª camada! E a Quinta, a Sexta?
- Tudo depende da sua necessidade e imaginação.
Quando falamos em 3 Camadas, alguns perguntarão:
Se existem 3 Camadas, existiu algum dia 2 Camadas? 1
Camada?
R: Sim. Existiu. E existe 2 Camadas, 1 Camada.
1 Camadas eram os famosos Mainframes. Onde a
arquitetura é Uniprocessada.
2 Camadas, é o que hoje conhecemos como: Client/Server.
Client/Server x MultiCamadas
Muitos se perguntam o por que do surgimento da tecnologia
Multi-Camadas? Poxa, estava quieto no meu canto “feliz” com o
meu Client/Server e agora todo o mundo (inclusive eu é claro!)
fala na maravilha das 3 Camadas (Multi-Camadas). Então, por
que necessito migrar e quais as vantagens que as “Camadas”
trazem para os meus sistemas?
R. Você não é obrigado a mudar sua aplicação Client/Server
para Multi-Camadas. Se você está feliz, está tudo certo e com boa
performance. Não mude!
Agora, se você já se deparou com algum desses problemas
apresentados abaixo, você é um sério candidato a pensar
seriamente na mudança do seu sistema.
As desvantagens do Client/Server
- Dispersão das regras - Quando trabalhamos com os eventos
de componentes visuais é fácil dispersarmos as regras, tais como
associarmos consistência de campo ao evento OnExit do TDBEdit
em um momento e ao evento OnValidate do TField em outro
momento. Obviamente isso causa dores de cabeça no momento da
manutenção.
- Dificuldade de distribuição – Sempre que uma regra é
alterada o programa tem que ser re-distribuído, trazendo
problemas de controle de versão e distribuição física do aplicativo
e seus complementos.
- Regras junto dos dados - Ao colocarmos as regras dentro do
banco de dados, usando os recursos nativos do banco de dados
(triggers, stored procedures e constraints), estamos
automaticamente ligando nossa aplicação ao banco de dados que
estiver sendo usado, aumentando em muito o re-trabalho, caso a
aplicação venha a ser convertida para ser usada com outro banco
de dados.
- Queda de performance – A queda de performance no
servidor, pode ser facilmente conseguida com o acúmulo de
regras e ou constraints que este deve verificar e processar. Não é
difícil encontrarmos adeptos do: Tudo fica no servidor! Ok. Para
isso teremos de ter um servidor de Banco de Dados dedicado e
extremamente potente para o mesmo não perder a sua
performance, e mesmo assim, pode ser que você se depare com a
perda de performance. Não pense que a perda de performance
será visível quando houver 10, 15 máquinas no ar. Ela deve
aparecer quando houver mais de 50, 100, 300 1000.... máquinas
acessando o seu sistema.
Isso ocorre com o famoso “gargalo de rede”. Neste momento,
não adianta melhorarmos o hardware do servidor, melhorarmos
as nossas maquinas clientes, uma rede mais veloz...... ainda
assim, podemos nos deparar com o problema de gargalo de I/O da
máquina servidora.
MeGAZINE
17
Delphi
Figura 1: Arquitetura Cliente/Servidor
As Vantagens do MultiTier
você desenvolve sistemas baseado em Multi-Camadas, você
necessita modificar apenas um .EXE e ou uma DLL que se
encontra no servidor de Aplicação. Fazendo isso, todas as estações
já enxergarão a nova regra de negócio ou a regra de negócio
modificada.
Transforme todas as desvantagens do Client/Server em
vantagens para MultiTier. Mas como?
- A não dispersão das regras - As regras de negócios estão e
devem estar todas no mesmo lugar, isto é, na camada de meio.
Não importando o tipo da regra. Desde uma regra para atualizar
o valor das contas a receber as mais complexas, como:
o Atualizar nota;
o Baixar estoque;
o Gerar financeiro;
o Gerar Contabilidade;
o Gerar Escrita Fiscal;
o Atualizar Patrimônio;
§ Todos esses processos de atualização podem ter regras de
consistência, regras de analise e várias outras necessidades
específicas do seu cliente.
Todas no mesmo lugar!
- Não existe dificuldade de distribuição – Por que? Quando
18
É claro, estamos falando em regras de negócios, se você
modificar a tela de apresentação, você necessitará atualizar seus
.EXE´s clientes que se encontram na rede. Existe uma solução
elegante para esse “problema”, conhecida como Lançador de
Aplicativos, mas a explicação dessa técnica foge do escopo do
nosso artigo.
- As Regras não ficam junto dos dados – Boa parte da
explicação já foi dada no tópico 2, mas imaginemos o seguinte:
Você precisa criar uma numeração automática para um cadastro
em especifico. Se fossemos utilizar recursos de um Banco,
poderíamos facilmente criar uma Trigger com um Generator
para o InterBase, Criar uma coluna IDENTITY para o SQLServer e as SEQUENCE´s para o Oracle. Vejam que aqui eu
“casei” minha aplicação com um Banco de Dados?! Podemos e
devemos evitar isso em MultiTier, onde criaremos uma regra de
negócios baseada na linguagem SQL-Ansi para contornarmos o
problema.
MeGAZINE
Delphi
- A Queda de Performance é contornada – Como? Load
Balance e Serialização de Servidores! Em MultiTier, podemos ter
a tarefa do servidor divida entre várias máquinas na rede.
Podemos ter a mesma regra divida entre vários servidores,
quando um servidor ficar sobre-carregado, entra em cena outro
servidor de aplicação para auxiliar o processamento de alguma
regra, e, se um servidor “X” cair, entra em cena o servidor “Y”.
Vimos nos dois exemplos citados, o Load-Balance e a Serialização.
Podemos ainda, ter regras separadas, isto é, regra de Vendas
separadas das regras de Compras.
Sendo que, estão sem servidores diferentes, e desta forma,
com certeza não teremos o problema de gargalo de rede e queda
acentuada de performance.
- Independência de Localização: - O sistema construído em
Multi-Camadas, fica livre da localização fixa do servidor de
Aplicação. Na verdade, em se falando de Delphi, nada me impede
de fixar o nome do Servidor de Aplicação nos componentes
SimpleObjectBroker* e ou no DCOMConnection*, mas eu
pessoalmente sou adepto da independência total de localização**.
*Nota: Os componentes citados serão explicados nos próximos
artigos.
**Nota: Quando formos distribuir nosso aplicativo, eu irei
demonstrar as duas técnicas, a de localização física usando os
componentes citados e a independência de localização usando o
MSIEXEC.EXE.
Figura 2: Arquitetura MultiTier
MeGAZINE
19
Delphi
Explicação Geral da Figura 2
Conclusão
Por se tratar uma figura que ao primeiro contato pode se
parecer estranha, resolvi comentar a mesma. Temos a estação
servidora de Banco no topo, na camada do meio o nosso
DataSnap fazendo a ponte entre o servidor de Banco de Dados e
os protocolos COM/DCOM/MTS/COM+/CORBA, etc.
As estações se conectam a camada do meio, onde se
encontram as regras, a camada de meio se conecta ao Servidor de
Banco de Dados e estações - Thin Client, isto é, é uma via de duas
mãos, o servidor de Banco sempre conversará com a camada de
negócios, a camada de negócios, sempre conversará com o
Servidor de Banco e com as estações e, as estações conversam
com a Camada de meio.
Não deve ser quebrado esquema de comunicação!
Os que prestaram atenção na figura, viram que existem
setas ligando a mesma máquina/estação a objetos diferentes. É
com essa técnica que conseguimos deixar os servidores
descarregados para processamento, e ainda utilizarmos por nós
mesmos a técnica de Load-Balance. Também demonstrei na
figura, que maquinas Client´s podem ser Servidoras e Client´s ao
mesmo tempo. Como isso acontece?
R: É possível transformar uma máquina client com um
poder de processamento bom em servidor e Client. Ela é Cliente
do esquema mostrado acima, mas, pode servir de Servidora, onde
nela pode ter um ou mais objeto(s) COM+/CORBA instalado(s)
para servir a outras máquinas Client´s e ou servidoras, e assim
sucessivamente.
Temos nesse cenário a arquitetura Objetos Distribuídos!
20
Tentei demonstrar nesse 1o artigo, o que é, como funciona e
para que serve a arquitetura Multi-Camadas e ainda
demonstrar Objetos Distribuídos. Com o crescimento constante
da WEB, faz-se necessário o entendimento e o desenvolvimento
de aplicações distribuídas. É um salto tecnológico grande. A
informática está em constante crescimento na procura de novas
soluções para os nossos problemas. Multi-Camadas é a evolução
do Client/Server. Também usei o termo – 3 Camadas – apenas
para exemplificar de uma forma melhor a tecnologia para o
leitor, mas, o Delphi não nos impõem nenhuma limitação para a
utilização de quantas camadas quisermos usar. Por isso, sempre
tentei utilizar a palavra: Multi-Camadas.
No próximo artigo, veremos os famosos: COM/OLE/DCOM/
MTS/COM+/CORBA/Socket´s, HTTP e SOAP
Sucesso e Saúde a todos!
Um Abraço.
Anderson Haertel Rodrigues
Consultor em desenvolvimento de Sistemas Client/
Server - MultiCamadas/DataSnap.
Oferece treinamentos para empresas em:
InterBase, SQL-Server, Delphi e COM+
[email protected] - [email protected].
Florianópolis - Santa Catarina - Brasil.
MeGAZINE
Palm
LFTP
Autor: Marcio Alexandroni da Silva
LFTP é um aplicativo gratuito de cliente FTP. Com ele,
enviar e receber dados de servidores FTP é uma tarefa simples e
automatizada, já que suporta scripts pré-configurados, onde o
usuário apenas precisará selecionar qual script utilizar e a
conexão e execução dos comandos será automática.
Além de simples e de fácil utilização, o LFTP suporta cartões
de expansão de memória para somente enviar aplicações e bancos
de dados armazenados no cartão.
O LFTP está disponível no site de busca para aplicativos
PalmOS, www.palmgear.com .
Através desta tela de configuração, os processos de conexão a
um servidor FTP e execução de comandos de transferência de
bancos de dados e aplicações ficam muito simples.
Note no canto inferior direito da tela os números 1 a 5 que
são as cinco configurações de servidor possíveis. As configurações
são:
· Server: Endereço IP do servidor. Se o servidor FTP não
utilizar uma porta padrão, adicione o número da porta depois de
um espaço.
· Login: Nome de Login no servidor.
Configuração do LFTP
As configurações do LFTP são feitas através do menu Misc/
Preferences:
· Password: Senha de acesso ao servidor FTP.
· Use scripted cmds: Quando a opção Use Prefs está marcada,
usando esta configuração executa automaticamente o script após
a conexão ao servidor FTP.
· No PASV: Seleciona modo “transfert PASV”, segundo o
autor.
· As linhas são o local onde os comandos serão colocados.
· Use Prefs: Se marcado, o Login e Senha serão enviados ao
servidor assim que a conexão for efetuada.
Se estiver desmarcado, o usuário terá que informar o Login e
Senha.
Utilização do LFTP
Para conectar a um servidor basta entrar no menu
Utility e selecionar qual configuração utilizar.
MeGAZINE
21
Palm
· ldir: Lista os bancos de dados no Palm.
· put <Nome>: Envia um Banco de Dados ou aplicação para o
servidor. Não é necessário acrescentar a extensão e o Nome é
“Case Sensitive”.
· get <Nome.extensão>: Recebe um Banco de Dados ou
aplicação do servidor. É necessário acrescentar a extensão .pdb
ou .prc e o nome é “Case Sensitive”.
· ldirfs [Diretório]: Lista os arquivos no cartão de expansão.
· putfs <Diretório/Arquivo>: Envia o arquivo do cartão de
expansão para o servidor. É necessário informar o caminho
completo, ex: putfs /DCIM/100MSDCF/DSC00001.
Durante a transferência, o LFTP mostra pontos que são
correspondentes a registros ou resource.
Resumo dos Comandos do LFTP
· pwd: Informa o diretório atual no servidor.
· cd <diretório>: Muda o diretório no servidor.
· mkd <diretório>: Cria o diretório no servidor.
· rmd <diretório>: Remove o diretório do servidor.
· del <arquivo>: Apaga o arquivo do servidor.
· dir: Lista os arquivos no servidor.
22
Observação sobre o LFTP: O usuário do Palm pode não saber
quando houve algum problema de transmissão de bancos de
dados entre o Palm e o servidor FTP. É recomendado que você
crie arquivos de controle que são enviados/recebidos por último.
Sua aplicação em ambos os lados deve testar se o arquivo de
controle chegou. Se chegou, significa que a transferência foi
completa, senão, houve algum problema com a transferência.
Marcio Alexandroni atua no desenvolvimento de sistemas
utilizando tecnologias Oracle™, Delphi™, Linux e Palm™.
Começou a trabalhar na plataforma PalmOS no início de 1999 e
hoje utiliza as ferramentas CodeWarrior, Falch.net, NSBasic e
PocketStudio.
MeGAZINE
Delphi
Traduzindo as Mensagens do
Delphi via Translation Manager
Por Alessandro Ferreira – Suporte Técnico The Club
[email protected]
Neste artigo iremos mostrar como traduzir para o português
as mensagens de erros apresentadas durante a execução de uma
aplicação, utilizando a ferramenta “Translation Manager”
disponível no Delphi.
Para exemplificar, criaremos um simples projeto para
simular alguns erros de conversão onde as mensagens de erro,
por padrão virão em inglês.
Com isso, quando executarmos a aplicação iremos receber as
mensagens de erro:
Figura 2
Figura 3
figura 1
Data Inválida: StrToDate(‘a’);
Float Inválido: StrToFloat(‘m’);
Integer Inválido: StrToInt(‘i’);
Figura 4
MeGAZINE
23
Delphi
Para o usuário final ou mesmo por uma questão de estética
de nossa aplicação, não fica bem ter mensagens em inglês e
português, principalmente porque mesmo com as mensagens em
português o cliente apenas irá ligar e dizer “que o programa deu
pau”, imagine em inglês!
Como traduzir?
Felizmente o Delphi oferece uma ótima ferramenta para
tradução das mensagens que fica disponível no menu “Project” |
“Languages”, vamos por em prática.
Importante: Salve seu projeto antes de acessar o “Translation
Manager”.
Selecione o menu “Project” | “Languages” | “Add” (Figura 5).
Figura 7
Agora clique em “Finish” e responda “Yes” na caixa de
confirmação que pede para compilar o projeto que irá ser
responsável pela tradução. (Figura 8).
Figura 5
Observe que nosso projeto já estará selecionado, apenas clique
em “Next”.
Agora selecione a linguagem, que obviamente em nosso caso
será “Português (Brazil)” (Figura 6).
Figura 8
Após a compilação, será mostrada um Form contendo as
estatísticas da compilação, conforme mostra a figura 9:
Figura 9
Figura 6
Clique em “Next”, até chegar no Form mostrado na Figura 7.
24
Tecle OK e automaticamente será solicitado para salvarmos o
projeto referente a tradução onde é sugerido uma pasta com o
MeGAZINE
Delphi
Figura 10
nome “PTB” que é a abreviação de
“Português Brazil”, dentro da pasta
principal de nosso projeto, apenas
aceite as sugestões para
prosseguirmos.
Traduzindo as mensagens.
Após salvarmos o projeto, nos
será apresentada a ferramenta
“Translation Manager”, como
mostra a figura 10.
Primeiro, deveremos ativar a
linguagem teclando “ALT+S” e
escolhendo “Portuguese (Brazil)”. O
próximo passo é localizar as
mensagens que desejamos traduzir,
para isso tecle “CTRL+F” e digite a
mensagem na caixa como mostra a
figura 11.
A mensagem será localizada na
lista de mensagens e relacionado na
janela de “Results”, bastando
darmos um duplo clique sobre a
mesma para que seja posicionada
Figura 11
MeGAZINE
25
Delphi
na lista de mensagens e finalmente traduzi-las, conforme mostra
a figura 12:
Figura 12
Repita os passos acima para as demais mensagens que deseje
traduzir e ao término tecle “CTRL+S” para salvar suas
alterações.
Figura 13
Feche o “Translation Manager” e abra o projeto de tradução
que deverá estar disponível na pasta “PTB” dentro da pasta
principal de seu projeto, teclando “CTRL+F9”.
Após compilar o projeto de tradução, abra o projeto principal e
no menu “Project” | “Languages” | Set Active e certifique-se de
estar “Portuguese (Brazil) “.
Figura 14
Agora, compile e execute seu projeto e verá as mensagens
traduzidas, conforme mostram as figuras 13, 14 e 15.
Conclusão
Existem vários artifícios que podemos utilizar para traduzir
as mensagens que serão apresentadas à nossos usuários finais.
Figura 15
26
O “Translation Manager” sem dúvidas é uma forma
bastante prática e elegante com o qual podemos obter ótimos
resultados. O projeto de exemplo referente esta matéria está
disponível para download em nosso site no endereço
www.theclub.com.br/revista/langptb.zip, até a próxima.
MeGAZINE
Perguntas & Respostas
Pergunta: Gostaria de utilizar o objeto InputBox para
receber uma senha qualquer em minha aplicação, porém ao
digitar o valor quero que apareça asteriscos, assim como posso
configurar na propriedade PassworrChar de um TEdit. Isso é
possível?
Resposta: Olhando a primeira vista não! Porém, é possível
fazer alguns tratamento via mensagens do Windows e conseguir
implementar uma rotina para mostrar um “PasswordChar” no
TEdit contido no InpuBox, veja abaixo o código:
const
InputBoxMessage = WM_USER + 123;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure InputBoxSetPasswordChar
(var Msg: TMessage); message InputBoxMessage;
public
{ Public declarations }
end;
var
Form1: TForm1;
{$R *.DFM}
procedure TForm1.InputBoxSetPasswordChar
(var Msg: TMessage);
var
hInputForm, hEdit, hButton: HWND;
begin
hInputForm := Screen.Forms[0].Handle;
if (hInputForm <> 0) then
begin
hEdit := FindWindowEx
(hInputForm, 0, ‘TEdit’, nil);
SendMessage
(hEdit, EM_SETPASSWORDCHAR, Ord(‘*’), 0);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
InputString: string;
begin
PostMessage(Handle, InputBoxMessage, 0, 0);
InputString := InputBox
(‘The Club’, ‘Digite a senha’, ‘’);
if InputString <> ‘’ then
ShowMessage(‘Retorno do InputBox ‘ +
InputString);
end;
Dúvida enviada por Alessandro F. dos Porcos - Taguaí - SP
implementation
MeGAZINE
27
Perguntas & Respostas
Pergunta: Gostaria de saber como fazer um “Sort” em uma
StringList, porém em ordem descendente.
Resposta: Isso é possível, porém através do método
“CustomSort” do TStringList, o qual possibilita fazer uma
ordenação customizada no objeto. Veja abaixo um simples
exemplo:
// função para customização da ordenação.
function CustomizeSort(List: TStringList; Index1,
Index2: Integer): Integer;
begin
if List[Index1] < List[Index2] then
Result := 1
else if List[Index1] > List[Index2] then
Result := -1
else
Result := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Lista: TStringList;
begin
Lista := TStringList.Create;
// cria lista.
try
Lista.Assign(ListBox1.Items); // pega os itens
// do ListBox.
Lista.CustomSort(CustomizeSort); // executa um
// CustomSort.
ListBox1.Items.Assign(Lista);
// devolve os
// item ordenados.
finally
Lista.Free;
// libera lista.
end;
end;
Dúvida enviada por Álcool Ferreira S/A, Osasco/SP.
Pergunta: Preciso efetuar uma consulta com o operador IN,
porém necessitaria que o subconjunto fosse um parâmetro e a
SQL não aceita que o subconjunto seja um parâmetro, como
posso implementar?
END
END
Ao informar o parâmetro “Pesq”, utilize:
SP,RJ,PR
Separando os valores por vírgula ou outro caractere
qualquer.
Dúvida enviada por Total Informática Ltda, Feira de
Santana/BA.
Pergunta: Estou utilizando FireBird e IBDataSet para
acesso a dados. Ao selecionar os dados gostaria de apenas exibilos em DBEdits mas sem deixar o usuário poder alterar, até que o
IBDataSet seja colocado em modo de edição.
Qual seria a melhor solução?
Resposta: Existem várias alternativas, uma delas seria
alterar a propriedade “AutoEdit” do componente DataSource ao
qual seus DBEdits estão ligados para “False”.
Com isso, não será permitida edição até que o TDataSet seja
colocado em modo de “Insert” ou “Edit” implicitamente.
Resposta: Realmente não é possível passar este
subconjunto como parâmetro para ser utilizado diretamente com
uma cláusula IN, porém é possível implementar utilizando a
cláusula LIKE. Veja o exemplo:
28
CREATE PROCEDURE “sp_cadteste_in”
(
Pesq VarChar(30)
)
RETURNS (
CODIGO INTEGER,
NOME VARCHAR(20) CHARACTER SET NONE,
CIDADE CHAR(20) CHARACTER SET NONE,
VALOR NUMERIC(3,3),
ATIVO SMALLINT,
UF VARCHAR(2) CHARACTER SET NONE)
AS
BEGIN
FOR SELECT CODIGO,NOME,CIDADE,VALOR,ATIVO,UF
FROM CADTESTE WHERE :Pesq Like ‘%’ || UF || ‘%’
INTO :CODIGO,:NOME,:CIDADE,:VALOR,:ATIVO,:UF
DO
BEGIN
SUSPEND;
Dúvida enviada por Infocompus Informática e Tecnologia
Ltda, Amargosa/BA.
MeGAZINE
Perguntas & Respostas
Pergunta: Existe como, através de SQL, selecionar os
registros em “Cachê” em um ClientDataSet? Como?
Resposta: Para acessar os dados que estão em “cache” em
um ClientDataSet, bastará acessar o “Delta” do mesmo que
TODAS as informações pendentes estarão disponíveis!. Veja
abaixo um simples exemplo, onde alimentamos um novo
ClientDataSet somentes com as “pendencias” de outro:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if ClientDataSet1.ChangeCount > 0 then
begin
ClientDataSet2.Data := ClientDataSet1.Delta;
ClientDataSet2.Open;
end;
end;
Dúvida enviada por Valdir Alberto Dill, Santa Helena/PR.
Pergunta: Em um formulário tenho um Edit e um Memo.
O Memo constantemente recebe textos e isso faz com que a barra
vertical vá andando automaticamente para baixo, mas o usuário
pode ir dentro do Memo e ir subindo para ver as linhas
superiores. Como posso fazer para que quando o foco estiver no
Edit e o usuário teclar seta para baixo, posicionar o Memo na
última linha sem tirar o foco do Edit?
Resposta: Poderá enviar uma mensagem ao TMemo
utilizando o evento onKeyDown do Edit, veja o simples exemplo
abaixo:
procedure TForm1.Edit1KeyDown
(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = vk_Down then
Memo1.Perform(EM_LineScroll, 0,
Memo1.Lines.Count-1);
end;
Dúvida enviada Infomaster Soluções em Informática Ltda,
Santo André/SP.
Pergunta: Como faço para simular o pressionamento da
tecla “PageDown” em um componente DBGrid sem estar com o
foco nele?
Resposta: Poderá utilizar o método “Perform” do DBGrid
MeGAZINE
enviando uma mensagem ao mesmo, veja abaixo um simples
exemplo:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
DBGrid1.Perform(wm_KeyDown, vk_next, 0);
end;
Dúvida enviada por Edson Murilo Maestri, BLumenau/SC.
Pergunta: Gostaria de conectar ao registro do Windows de
uma máquina da rede através de seu IP (Preferencial) ou pelo
seu nome, como proceder?
Resposta: Poderá acessar através do método
RegistryConnect do objeto TRegistry, veja o exemplo abaixo:
// O usuário que for acessar tem que ter permissão na
máquina remota.
implementation
uses Registry;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
R: TRegistry;
S: TStringList;
begin
R := TRegistry.Create;
S := TStringList.Create;
Button1.Enabled := not Button1.Enabled;
try
R.RootKey := HKEY_LOCAL_MACHINE;
if R.RegistryConnect(‘\\SERVIDOR’) then
begin
R.OpenKeyReadOnly(‘\SOFTWARE\TheClub’);
R.GetKeyNames(S);
Memo1.Lines.Assign(S);
end
else
ShowMessage(‘Não foi possível
conectar ao Registrador!’);
finally
S.Free;
R.Free;
Button1.Enabled := not Button1.Enabled;
end;
end;
29
Perguntas & Respostas
Funciona sem problemas, PORÉM, existe a necessidade de
dar permissão ao usuário que poderá fazer acesso ao “Registry”
da máquina remota, caso contrário não irá funcionar.
Dúvida enviada por APP Processamento de Dados S/C Ltda,
S.J.Rio Preto/SP.
ADOConnection por exemplo. Existem drivers OLEDB freewares
na Internet, poderá baixar em:
http://www.ibphoenix.com
http://www.oledb.net
Nos sites acima, além do driver para ser instalado,
encontrará exemplo da String de conexão à ser utilizada no
componente ADOConnection.
Pergunta: Porque a rotina abaixo está dando o erro
“Unassigned Code”?
Não temos uma comparação entre ADO e IBExpress para lhe
fornecer, porém o IBExpress faz acesso nativo diretamente ao
Interbase via APIs do mesmo, aproveitando dessa forma melhor
os recursos oferecidos pelo Interbase, ao passo que a conexão
através do ADO irá necessitar de um drive externo, como os
citados acima, basicamente sendo este o diferencial entre as duas
formas de conexão.
Var
VDAta : TDAte;
begin
VData := Date;
SQLDSSaldoCaixa.Close;
SQLDSSaldoCaixa.CommandText := ‘Select * from
SALDOCAIXA Where DATA>=:VDia’;
SQLDSSaldoCaixa.Params[0].asDateTime := VData;
SQLDSSaldoCaixa.Open;
end;
Dúvida enviada por Kleber Luis Marioti, Catanduva/SP.
Resposta: No caso do “CommandText” via programação
deve ser feita a criação do parâmetro “a mão”!. Veja abaixo um
simples exemplo:
var
VData : TDate;
begin
VData := StrToDate(’05/03/1991');
cdsTeste.Close;
cdsTeste.Params.CreateParam(ftDate,
‘p’, ptInput).AsDate := vData;
cdsTeste.CommandText := ‘Select *
From Sales where Ship_Date = :p’;
cdsTeste.Open;
end;
Pergunta: Como eu faço para que um laço de repetição “for”
incremente de dois em dois.
Resposta: Isso não é possível na estruturação do “FOR” do
Delphi, o incremento é feito automaticamente pelo laço de
repetição e sempre é de um em um mesmo! Nesta situação
poderá utilizar um laço “While”, como por exemplo:
Dessa forma o parâmetro será reconhecido sem problemas.
var
i: integer;
begin
i := 0;
while (i <= 10) do
begin
// suas instruções.
i := i + 2;
end;
end;
Dúvida enviada por Almir Rodrigues Borges, Araçatuba/SP.
Dúvida enviada por Marco Batista, Marília/SP.
Pergunta: Gostaria de saber como eu faço para utilizar o
ADO com o Interbase? Gostaria de saber também se existe
alguma desvantagem em utilizar o ADO ao IBExpress.
Envie-nos suas dúvidas, dicas e exemplos
Resposta: Para acessar o Interbase através do ADO será
necessário um driver OLEDB para fazer o acesso! Tendo este
driver instalado em sua máquina bastará criar a conexão via
e-mail: [email protected]
30
MeGAZINE
para que possamos publicá-las.
Download

delphi - The Club