Вы находитесь на странице: 1из 29

Revista The Club Megazine - 04/2003

A utilizao, reproduo, apropriao, armazenamento em banco de dados,


sob qualquer forma ou meio, de textos, fotos e outras criaes intelectuais
em cada publicao da revista The Club so terminantemente proibidos
sem autorizao escrita dos titulares dos direitos autorais.
Copyright The Club 2003
MeGAZINE 3
EDITORIAL
Editorial
Celso Jefferson Paganelli
Presidente - The Club
Editorial ...................................................................................... 03
Mirroring no Rave Report ........................................................ 04
SIntegra - Entendendo e implementando .............................. 08
Banco de Dados na Web .......................................................... 12
Transformaes XML no Delphi - Parte 1 .............................. 16
Como migrar de Clipper para Delphi de forma
transparente - Parte 3 - Final ................................................... 21
Dicas & Truques........................................................................ 25
THE CLUB
Rua Acre, 950 - Avar - SP - CEP 18.700-260
Informaes: (0xx14) 3732-3689
Suporte: (0xx14) 3733-1588
Fax: (0xx14) 3732-0987
Internet
http://www.theclub.com.br
Cadastro: cadastro@theclub.com.br
Suporte: suporte@theclub.com.br
Informaes: info@theclub.com.br
Dvidas
Correspondncia ou fax com dvidas devem ser
enviados ao - THE CLUB, indicando "Suporte".
Opinio
Se voc quer dar a sua opinio sobre o clube em
geral, mande a sua correspondncia para a seo
"Tire sua dvida".
Reproduo
A utilizao, reproduo, apropriao,
armazenamento em banco de dados, sob qualquer
forma ou meio, de textos, fotos e outras criaes
intelectuais em cada publicao da Revista
The Club so terminantemente proibidos sem
autorizao escrita dos titulares dos direitos
autorais.
Copyri ght

The Cl ub

2003
Impresso e acabamento:
Impressos Gril - Gri l Grfi ca e Repr. I nd. Ltda.
Tel.: (0xx14) 3762.1345 - Fax: (0xx14) 3762.1259
Rua So Paulo, 447 - Cep 18.740-000
Taquari tuba - SP
Ti ragem: 5.000 exempl ares
Di retor - Presi dente
Celso Jefferson M. Paganelli
Di retor Tcni co
Mauro SantAnna
Col aboradores
Marcel o Noguei ra, Al exandre Magno, Anderson H.
Rodri gues, Emerson Facunte, Mari o C. Bohm
Delphi marca registrada da Borland
International, as demais marcas citadas so
registradas pelos seus respectivos proprietrios.
Ol amigos,
Como j rotina a 103 edies, voc est recebendo sua The Club Megazine, a qual
est recheada com artigos e dicas interessantes especialmente para voc. De primeira
mo, estamos apresentando-lhes uma novidade: o DUG-BR (Delphi Users Group
Brasil) que foi lanado oficialmente no dia 29 de maro em um evento em So Paulo.
Este grupo est sendo idealizado pelos maiores nomes da comunidade Delphi no Brasil,
entre estes, o The Club, o qual est constantemente a procura de novidades para seus
associados. Maiores informaes sobre o DUG-BR, podero ser encontradas
diretamente no site www.dugbr.com.br.
Rave Report, este gerador de relatrios est surpreendendo a cada dia... Conhea
mais um recurso, o mirroring, no artigo de Marcos P. Gomes. Continuando, na revista
deste ms estamos contando com a colaborao de um novo amigo, o Victory
Fernandes, que traz um artigo interessante para quem trabalha com automao
comercial, tratando sobre o SIntegra, confiram. Banco de dados na web, voc sabe qual
utilizar? No! Ento no deixe de conferir o artigo do Emerson Facunte que est de
primeira!
Calma que ainda no acabou! Devido ao grande volume de dvidas, estamos
publicando um artigo sobre o XML Mapper, ferramenta que possibilita fazer
transformaes XML. Neste artigo, procuramos abordar apenas a ferramenta e no
prximo, como utilizar estas transformaes dentro do Delphi, visto o XML ser
praticamente um padro na troca de informaes entre aplicativos, plataformas, web,
etc, e por fim, a ltima parte do artigo de migrao de Clipper para Delphi com o
Prandini da Renet Tecnologia.
Ah, ia me esquecendo! Nossa sesso Dicas & Truques est com uma seleo de
dicas que foram algumas das mais solicitadas ao suporte este ms, lembrando que
voc poder ter acesso direto e rpido ao nosso acervo de dicas via www.theclub.com.br
na opo Suporte On-Line, o qual recebeu mais de 100 novas dicas esta semana.
Aproveite e at a prxima!
MeGAZINE 4
Delphi
O Delphi 7 incorporou muitas tecnologias novas: Bold, Model
Maker, IntraWeb e o to falado gerador de relatrios Rave
Report. Apesar da Borland nos brindar incorporando essas
ferramentas fantsticas no Delphi, sentimos que h muita
dificuldade em encontrar materiais que nos auxiliam no uso das
mesmas.
Nesse pequeno artigo, apresentarei uma tcnica chamada
mirroring no Rave Report.
Esse recurso super interessante, principalmente para quem
veio do QuickReport, como eu. Suponhamos que voc tenha 50
relatrios, e no cabealho desses relatrios voc necessite por o
Logo da empresa, nome da empresa, nmero de pginas, etc.
At a tudo bem. Quando voc tiver desenvolvendo o sistema,
s gerar um relatrio e copiar os dados para os relatrios novos.
Mas a vem o x da questo. E se com o passar do tempo voc
precisar alterar alguma informao nesses relatrios,
teoricamente voc precisaria abrir os 50 relatrios e mudar o
cabealho um a um, correto?
Em alguns geradores de relatrios a resposta seria sim! Voc
teria que fazer todo esse esforo braal, mas com o Rave Report
podemos contornar esse problema usando um recurso chamado
mirroring (espelhamento).
Para isso, basta apenas definirmos uma pgina Global na
rea chamada Global Pages Catalog, adicionar um componente
chamado Section e adicionar todas as informaes que
desejarmos dentro dessa Section.
No nosso relatrio colocaremos uma Section, isso ficar mais
claro para voc na construo do relatrio passo a passo, mas,
antes de iniciar o trabalho com o mirroring vamos criar um
relatrio simples para isso:
Abra o Delphi e crie uma nova aplicao.
Na aba Standard adicione um Button e uma Table
Mirroring no
Rave Report
Nome TbClients
DatabaseName DbDemos
Table animals.dbf
Aps esta operao v at a aba Rave e adicione o
componente RvTableConection. Este componente responsvel
pelo gerenciamento dos dados. O Rave trata as conexes com a
tabela diferente do QuickReport. No QuickReport os
componentes acessavam diretamente os componentes TDataSet.
No Rave h uma pequena diferena no conceito, se usarmos
componentes Table para conexo com nossa tabela, ento
deveremos usar o componente QRTableConection, se usarmos
uma Query, deveremos utilizar o componente
RvQueryConection, e assim por diante.
Dentro do Rave so esses componentes RvTableConection,
RvQueryConection, RvDataSetConection e RvCustomConectiom
que enxergaremos ao fazer nossas conexes, dentro do designer
do relatrio.
Agora, configure as seguintes propriedades do
RvTableConection :
Nome RvTbClients
Table TbClients
Por Marcos P. Gomes
MeGAZINE 5
Agora que j configuramos toda nossa parte de conexo,
ainda na aba Rave, adicione o componente RvProject e o
componente RvSystem.
RvProject1 responsvel pelo nosso projeto Rave, aqui
que definimos se nosso projeto ser anexado nossa aplicao ou
se ele ficar em um arquivo externo (.RAV).
RvSystem responsvel por vrias configuraes de nosso
relatrio (Unidade de medida, caption do preview, posio inicial
do preview, sada padro do relatrio, etc.)
D um duplo clique no componente RvProject1, isso far com
que o Rave Report Design seja aberto e assim ns poderemos
criar nosso relatrio.
Agora j dentro do Rave, v em File | New Global Page isso
far com que seja adicionado um novo item na rea Global Pages
Catalog (Tree Panel). Mude a propriedade Name para Cabealho.
Global Pages, todos os relatrios enxergam essas pginas
V at a aba Standard (dentro do Rave) e adicione o
componente Section, dentro dessa Section, voc dever colocar
todos seus componentes que sero comuns todos os demais
relatrios, deste projeto.
Neste exemplo, colocamos um Text Component que se
encontra na aba Standard, escrito apenas o texto Exemplo de
Relatrio com Mirroring, a depois, voc pode usar sua
imaginao e personalizar seus cabealhos e rodaps de acordo
com seu gosto e sua necessidade.
Section com as informaes comuns a todos relatrios
Nosso cabealho est pronto, agora vamos criar nosso
relatrio e fazer com que nossa Global Page chamada Cabealho
entre em ao.
Como disse acima, o Rave usa seus prprios componentes
para acessar o banco de dados, ento devemos criar nossa
conexo. Para isso, v ao menu File | New Data Object ou clique
no boto .
Selecione a opo Direct Data View. Ser listado o
RvTableConnection que colocamos no nosso formulrio l no
Delphi.
Selecione o rvTbClients e clique em Finish. Mude a
propriedade Name para dvClientes.
Com isso terminamos toda parte de conexo entre o Relatrio
Rave e nossa aplicao. Agora vamos continuar a construir nosso
relatrio.
Clique no Report1 que se encontra na seo Report Library e
mude a propriedade Name para Clientes.
Adicione ao relatrio o componente Section que se encontra
na aba Standard, clique na propriedade Mi rror e perceba que ela
j traz um item cabecalho.Section1. Esse o Section que colocamos
l na rea Global Pages Catalog.
Apenas ligando esse componente j suficiente para que tudo
que alterarmos na rea Global Pages Catalog, seja atualizado
automaticamente nos demais relatrios.
Adicione um Region Component que est na aba Report. O
Region deve ocupar toda a rea de impresso, pois todas as
bandas que colocarmos dentro do relatrio devem estar
obrigatoriamente dentro de um Region Component.
Adicione um Band Componet para que possamos montar o
cabealho do relatrio e dentro do Band Component insira trs
Text Component, que se encontra na aba Standard.
Mude o contedo dos Texts para Nome, Endereo e Cidade.
Agora que nosso cabealho ficou pronto, adicionaremos nossa
rea de dados.
Adicione um DataBand Component que se encontra na aba
Report, ajuste a propriedade DataView desta banda para
dvClientes e arraste os campos dvClientesFIRST_NAME,
dvClientesADDRESS_1 e o dvClientesCITY para dentro dessa
DataBand. Para arrastar os campos, necessrio que
mantenhamos a tecla CRTL pressionada.
Com isso, nosso relatrio de Clientes est pronto e teremos
algo semelhante a prxima imagem.
Delphi
MeGAZINE 6
Relatrio de Clientes, para visualizar pressione F9
Salve seu projeto Rave (File | Save) com o nome de
mirroring.rav. O prximo passo preparar nossa aplicao
Delphi para executar esse relatrio. Volte para o Delphi e adicione
um boto, no evento OnClick adicione o seguinte cdigo:
RvProject1.Execute;
No componente RvProject1, clique em ProjectFile e selecione
o arquivo mirroring.rav e nossa aplicao final ficar da
seguinte forma:
Concluso
O processo de mirrorig com o Rave muito simples, como
voc pde conferir com apenas alguns componentes e conectando
algumas propriedades podemos economizar um tempo valioso na
construo de nossos relatrios, essa apenas uma das inmeras
facilidades que o Rave Report nos oferece.
O projeto de exemplo referente este artigo est disponvel
para donwload em http://www.theclub.com.br/revista/
rave0403.zip.
Aplicao no Delphi
Sobre o autor
Marcos P. Gomes trabalha como desenvolvedor de
sistemas em uma empresa do ramo automobilstico,
desenvolve sistemas em diversas linguagens e um
dos fundadores do site http://www.delphibr.com.br/.
Tambm faz parte do grupo de moderadores da lista
de discusso lista-delphi@yahoogrupos.com.br. Pode
ser contatado pelo e-mail marcos@delphibr.com.br.
Delphi
MeGAZINE 8
Creio que muitos de vocs leitores, assim como eu, venham
sendo constantemente abordados por seus clientes a respeito da
obrigatoriedade de seus respectivos sistemas satisfazerem
legislao do SIntegra.
Assim como h algum tempo atrs houve uma onda acerca
da obrigatoriedade dos emissores de cupom fiscal - ECF, existe
uma tendncia cada vez maior por parte da Federao em cobrar
das empresas que as mesmas estejam adaptadas ao sistema do
SIntegra.
Em ambos os casos, cabe a ns desenvolvedores, a
compreenso e adaptao dos aplicativos de nossos clientes.
Tentando facilitar e agilizar este processo de implementao e
adaptao, venho por meio deste artigo apresentar caractersticas
gerais do SIntegra bem como uma soluo de implementao
rpida e segura do mesmo, a SIntegra32Dll.dll.
O que o SIntegra?
O Sistema Integrado de Informaes sobre Operaes
Interestaduais com Mercadorias e Servios - SIntegra, foi criado
visando o controle informatizado das operaes de entrada e sada
interestaduais realizadas pelos contribuintes do ICMS.
Sendo o SIntegra obrigatrio a todos os contribuintes que
emitam documento fiscal por processamento de dados (Notas
Fiscais ou Cupons Fiscais) e/ou faam a escriturao de Livro
Fiscal por processamento de dados, existe a necessidade da
adaptao de grande parte dos softwares comerciais, para que
atendam nova legislao.
O SIntegra descrito no Convnio ICMS 57/95, que define
quem considerado contribuinte usurio de sistema de
processamento eletrnico de dados, disciplina as obrigaes a
serem cumpridas por estes contribuintes e estabelece o padro de
arquivo magntico para entrega ao Fisco.
Entendendo o Arquivo do SIntegra
Em termos prticos o arquivo do SIntegra pode ser resumido,
do ponto de vista do desenvolvedor, como um arquivo de texto
formatado segundo um padro pr-definido, onde cada linha do
arquivo corresponde a um Registro, que contm vrios campos,
tambm pr-definidos de acordo com o tipo de registro. Registros
e campos estes oriundos das informaes contidas nos
documentos fiscais que devem ser validados pelo Programa
Validador antes de serem entregues ao Fisco.
Existe uma srie de registros disponveis para serem
adicionados no arquivo, sendo que cada um deles tem suas
caractersticas, aplicaes e requisitos. A exemplo:
REGISTRO 10:
Mestre do Estabelecimento - Indentifio do Estabelecimento informante
um registro obrigatrio a todo e qualquer arquivo do SIntegra, e
contm dados sobre a quem pertence aquele arquivo, como CGC,
IE, e Endereo do estabelecimento informante.
REGISTRO 11:
Dados complementares do informante um registro obrigatrio a
todo e qualquer arquivo do SIntegra, e contm dados
complementares sobre a quem pertence aquele arquivo, como
Telefone, Bairro, e CEP do estabelecimento informante
REGISTRO 50:
Este registro dever ser composto por contribuinte do ICMS,
SIntegra
Entendendo e implementanto!
Por Victory Fernandes
Delphi
MeGAZINE 9
obedecendo a sistemtica semelhante da escriturao dos livros
Registro de Entradas e Registro de Sada
REGISTRO 51:
Este registro dever ser composto somente por contribuintes
do IPI, obedecendo a sistemtica semelhante da escriturao
dos livros Registro de Entradas e Registro de Sadas
Estes so alguns exemplos de registros e suas aplicaes, no
entanto, impressindvel para a implementao do SIntegra, seja
utilizando a SIntegra32Dll.dll ou no, que o desenvolvedor leia
atentamente a documentao do Convnio ICMS 57/95 que
dicerta sobre o SIntegra e toda sua sistemtica.
Antes de questionar como deve ser o arquivo final do
SIntegra emitido por seu cliente, necessrio que voc conhea
bem todos os Registros possveis de serem adicionados a um
arquivo do SIntegra. S assim voc ser capaz de traar as
necessidades do seu cliente e definir quais dos registros o arquivo
dele deve conter.
Entendendo um Registro do SIntegra
Como forma de exemplificar a confeco do arquivo
magntico como um todo, vamos agora analisar a implementao
do Registro 50.
O Convnio ICMS 57/95 indica que registro 50 deve ser
gerado para cada um dos seguintes tipos de documentos fiscais:
Nota Fiscal, Modelo 1 ou 1-A (cdigo 01) - Quanto ao ICMS
Nota Fiscal / Conta de Energia Eltrica - Modelo 6 (cdigo
06),
Nota Fiscal de Servio de Comunicao - Modelo 21
Nota Fiscal de Servios de Telecomunicaes - Modelo 22
(cdigo 22)
Sendo formatado de acordo com a tabela abaixo:
01 Tipo "50" 02 1 2 N
02 CNPJ CNPJ do remetente nas entradas e do destinatrio nas sadas 14 3 16 N
03 Inscrio Estadual Inscrio Estadual do remetente nas entradas e do destinatrio
nas sadas
14 17 30 X
04 Data de emisso ou
recebimento
Data de emisso na sada ou de recebimento na entrada 8 31 38 N
05 Unidade da Federao Sigla da unidade da Federao do remetente nas entradas e do
destinatrio nas sadas
2 39 40 X
06 Modelo Cdigo do modelo da nota fiscal 2 41 42 N
07 Srie Srie da nota fiscal 3 43 45 X
08 Nmero Nmero da nota fiscal 6 46 51 N
09 CFOP Cdigo Fiscal de Operao e Prestao 4 52 55 N
10 Emitente Emitente da Nota Fiscal (P-prprio/T-terceiros) 1 56 56 X
11 Valor Total Valor total da nota fiscal (com 2 decimais) 13 57 69 N
12 Base de Clculo do ICMS Base de Clculo do ICMS (com 2 decimais) 13 70 82 N
13 Valor do ICMS Montante do imposto (com 2 decimais) 13 83 95 N
14 Isenta ou no-tributada Valor amparado por iseno ou no incidncia (com 2 decimais) 13 96 108 N
15 Outras Valor que no confira dbito ou crdito do ICMS (com 2 decimais) 13 109 121 N
16 Alquota Alquota do ICMS (com 2 decimais) 4 122 125 N
17 Situao Situao da nota fiscal quanto ao cancelamento 1 126 126 X
Delphi
MeGAZINE 10
Nesta tabela, percebemos a ordenao dos campos do registro
50, bem como a quantidade de dgitos de cada campo e seu tipo de
formatao, X alfanumrico e N numrico.
Os campos de formatao tipo X alfanumrico devem ser
preenchidos com espaos em branco a direita, caso seu contedo
no tenha o nmero de dgitos do campo especfico.
Os campos de formatao tipo N numrico devem ser
preenchidos com zeros a esquerda, caso seu contedo no tenha o
nmero de dgitos do campo especfico.
Assim, o registro deve ser gerado como mostra a ilustrao:
O que a SI ntegra32Dl l .dl l ?
Como o SIntegra se baseia em uma srie de informaes
entradas pelo usurio do sistema gerencial em questo. Como
estas informaes devem ser cuidadosamente tratadas antes de
serem enviadas para o banco de dados do sistema e por fim
utilizadas na gerao do arquivo de texto, sob pena de recusa do
arquivo gerado por parte do Programa Validador, foi desenvolvida a
SIntegra32Dll.dll, como uma soluo que visa facilitar e agilizar o
processo de tratamento destas informaes.
Uma dll que implementa boa parte dos tratamentos
necessrios para a gerao do arquivo magntico e pode ser
usada em conjunto com qualquer linguagem de programao.
Dentre as muitas vantagens da SIntegra32Dll.dll destacam-se:
Velocidade na implementao e adaptao do seu software
legislao do SIntegra
Validao e formatao automtica dos campos de acordo
com os padres do SIntegra
Validao de informaes como: Datas, CNJP, CPF, UF e
CEP.
Validao de informaes especficas do SIntegra como:
CFOP, CIF/FOB, Cdigo de Identificao do Convnio, Cdigo de
Finalidades da Apresentao do Arquivo Magntico, Cdigo de
Identificao da Natureza das Operaes Informadas, Cdigo de
Modelo de Documentos Fiscais, Cdigo de Posse das Mercadorias
Inventariadas, Emitente de Nota Fiscal, Cdigo da Situao
Tributria.
Tratamento de Erros que retorna String indicando qual dos
valores passados est incorreto.
Tudo isso torna a dll uma soluo muito
eficiente, pois importante lembrar que
o arquivo do SIntegra ser gerado referente a
um perodo anterior, com base em
informaes que j foram adicionadas a um
banco de dados e que devem ser
coerentes com o sintegra.
Ento, a dll deve ser usada na verdade
em dois momentos, a exemplo:
Momento 1: Em um sistema de controle
de Notas fiscais com Sintegra, a entrada e
sada das notas deve ser feita levando em
considerao que o banco de dados gerado
ser usado para gerao do sintegra, assim,
logo aps o preenchimento de cada nota fiscal, o sistema antes de
mandar as informaes para o banco de dados, pode antes de
tudo chamar a dll para os registros correspondentes e testar se
houve erro, salvando as informaes, caso nenhuma exceo seja
encontrada.
Momento 2: No momento da gerao do arquivo magntico
propriamente dita, o sistema deve ler as informaes do banco de
dados e fazer as chamadas s funes da dll de acordo com o
registros desejados.
A SIntegra32Dll.dll composta por uma funo Inicia_Sintegra,
uma funo Finaliza_Sintegra e mais uma funo para cada um
dos tipos de registros disponveis nos padres do SIntegra.
A funo Inicia_Sintegra indica Dll que o uso da mesma ser
iniciado, o que faz com que todos os seus contadores sejam
zerados e a dll esteja pronta para ser usada. Esta funo deve ser
chamada antes de serem chamadas as funes que iro gerar os
registros do SIntegra.
Delphi
MeGAZINE 11
A funo Finaliza_Sintegra indica Dll que o uso da mesma
ser finalizado.
As funes de Registro, so as funes principais da Dll. Elas
recebem os parmetros necessrios para a criao do registro,
retornando uma String contendo o registro completamente
formatado ou retornando uma String de erro, caso algum
parmetro esteja incorreto.
Assim, para implementar a linha do Registro 50 descrito
anteriormente, a chamada funo da dll seria feita da seguinte
forma:
var
Form1: TForm1;
implementation
Function Registro50(CNPJ, Insc_Est,
Data_Emissao_Recebimento, UF,
Modelo, Serie, Nro,
CFOP, Emitente, Valor_Total,
Base_ICMS, Valor_ICMS, Isenta,
Outras, Aliquota, Situacao:
ShortString): ShortString;
stdcall;
external SIntegra32Dll.DLL;
procedure TForm1.Button3Click(Sender: TObject);
var
TempStr: String;
begin
//Registro50 - Registro de Total de Nota Fiscal
TempStr := Registro50(23.859.507/0001-09', //CNPJ
7.075.793.310.062, //Insc_Est
21/06/95', // Data_Emissao_Recebimento
BA, //UF,
1, //Modelo
1, //Serie
501306, //Nro
5111, //CFOP
P, //Emitente
518,19, //Valor_Total
518,19, //Base_ICMS
36,27', //Valor_ICMS
, //Isenta
0,00, //Outras
7,00, //Aliquota
N //Situacao
);
if TempStr[1] <> - then
Memo1.Lines.Add(TempStr)
//Adiciona no Memo o Registro 50 formatado
else
ShowMessage(Copy(TempStr, 6, Length(TempStr)));
//Mostra a mensagem de erro recebida
end;
A SIntegra32dll.dll vem acompanhada da documentao
completa sobre como utilizar suas funes e quais os tipos de
erros retornados por cada funo.
H ainda um demo completo em Delphi que mostra como
conectar a dll ao seu programa e testar a sada da mesma.
Para obter uma cpia e maiores informaes sobre a
SIntegra32Dll.dll visite os sites:
http://www.delphibr.com.br/vendas.php
http://www.victory.hpg.ig.com.br/
Concluso
Com este artigo, espero ter esclarecido alguns
questionamentos bsicos sobre a sistemtica do SIntegra, bem
como ter trazido ao seu conhecimento a SIntegra32Dll.dll, uma
soluo nica no mercado para este tipo de implementao.
Abaixo esto alguns links relacionados ao assunto abordado
neste artigo:
Site Oficial do Sintegra
http://www.sintegra.gov.br/
Ministrio da Fazenda
http://www.fazenda.gov.br/
Conhea a Nomenclatura Comum do Mercosul
http://www2.ciesp.org.br/oportunidades/ncm.asp
Sobre o autor
Victory Fernandes desenvolvedor scio da TKS
Software - Solues de Automao Comercial e
Softwares Dedicados. Pode ser contactado em
victory@igara.com.br, ou atravs dos sites
www.victory.hpg.com.br www.igara.com.br -
www.enge.cjb.net.
Delphi
MeGAZINE 12
Com o forte avano da Internet em todo o mundo, temos uma
tendncia natural de aplicaes baseadas nesta tecnologia.
Podemos classificar como aplicaes, as famosas sopas de
letrinhas, como: B2B, B2C, EDI, e assim por diante.
Quando navegamos na Internet, percebemos um mundo
totalmente dinmico, com informaes em real-time (jogos ao
vivo, debates, entrevistas), ofertas de ltima hora, lojas virtuais
trazendo promoes de acordo com o nosso perfil, pesquisas
interativas, web-mails, enfim, uma infinidade de informaes ao
nosso dispor. E o que est por trs de tudo isso? Nossos ilustres
bancos de dados.
A real necessidade de disponibilizar informaes e
interatividade, exige o uso do banco de dados. Mas qual o banco
de dados mais adequado para esse tipo de aplicao. A pergunta
poderia ser feita no plural, j que existem diversos modelos de
aplicaes, bem como inmeras tecnologias de banco de dados
disponveis.
Atualmente as empresas que desenvolvem gerenciadores de
banco de dados, esto redimensionando suas equipes, e focando
no desenvolvimento de novas tecnologias adequadas Internet,
ou seja, o modelo Relacional est perdendo espao para o modelo
Orientado a Objeto.
Modelo Relacional
O modelo relacional foi desenvolvido para atender regras de
negcios estveis e um grande volume de informaes com baixa
complexidade. No modelo relacional temos linhas e colunas (2D),
onde as regras de negcio fazem o papel da simples consistncia.
A linguagem SQL predomina neste padro, e est ganhando
a fora do XML. Mas isso no suficiente para atender uma
nova realidade: objetos. O papel dos objetos fundamental nos
bancos de dados web, onde vdeos, imagens, informaes
complexas, sesses, trafegam de uma maneira bastante crtica.
Obviamente o XML oferece maior integrao entre o banco de
dados e o cliente, mas no atende plenamente a nova realidade.
Pensando neste fator, algumas empresas esto
incrementando o engine dos seus produtos com uma tecnologia
hbrida, oferecendo o modelo relacional com suporte a orientao
objetos, os chamados ORDBMS.
Na realidade este modelo no faz acesso direto aos objetos, to
pouco oferece suporte a manipulao e indexao dos mesmos.
Tanto o acesso como a manipulao, so feitas atravs de tabelas
relacionais auxiliares, onde predomina o modelo convencional de
acesso s informaes.
Ento surgiram os bancos de dados puramente baseados em
orientao a objeto, os chamados ODBMS.
Modelo Orientado a Objetos
Existem diversos ODBMS no mercado, como o Cache e o
Jasmine.
A forte integrao com linguagens totalmente orientadas a
objeto, como o Java, trazem uma vantagem incrvel para as
aplicaes Web.
A transparncia no tratamento de documentos XML,
manipulao de objetos em real-time, integrao com sistemas
legados, e at mesmo o tratamento de informaes de bases
relacionais como objeto, tornam os ODBMS a melhor escolha
para a Internet.
Banco de Dados na Web
Opes, Infra-estrutura, Tendncias
Por Emerson Facunte
Delphi
MeGAZINE 13
Necessidade x Escolha
O fator mais crucial para o desenvolvimento de um novo
projeto baseado em Web, est na escolha do Banco de Dados.
Obviamente a tecnologia de desenvolvimento tambm deve
ser adequada, para trabalhar em sintonia com o SGDB.
Tecnologia Observaes
Java Totalmente orientada a objetos, possui forte integrao com os ODBMS, alm de recursos
extremamente poderosos para a Internet, como EJBs, Servlets e o JSP. Transparncia no modelo
multicamadas, e independncia de plataforma (sistema operacional).Atualmente grandes
corporaes esto adotando o Java para as suas aplicaes.
Delphi / Kylix Assim como o Java, tambm totalmente orientada a objetos, com recursos especficos para o
desenvolvimento de aplicaes Web, e o modelo de desenvolvimento RAD (Rapid Application
Development), ou Desenvolvimento Rpido de Aplicaes. O Delphi conta com inmeros projetos
de Internet, e vem ganhando um mercado bastante promissor. Servidores Linux e Windows
podero abrigar aplicaes desenvolvidas em Kylix/Delphi.
PHP A Zend, responsvel pelo engine do PHP, iniciou a implementao do suporte a orientao a
objetos, ganhando um pblico ainda maior. Sem dvida o PHP o campeo no quesito: nmero
de aplicaes na Internet, justamente pela simplicidade de desenvolvimento e implantao dos
sistemas. Embora no seja recomendado para grandes aplicaes, algumas empresas contrrias
a isso, esto utilizando largamente a tecnologia. Assim como o Java, o nosso amigo PHP
tambm multiplataforma.
ASP.Net Amigos, eu era um dos maiores crticos da tecnologia ASP, mas o novo modelo proposto pela
Microsoft, baseada em sua tecnologia .NET (dot Net), extremamente fantstica, e tambm
totalmente orientada a objeto. Nem preciso dizer que possui um forte suporte ao SQL Server,
ainda mais com a nova tecnologia ADO.Net.
Os grandes Data Centers j esto preparados para a tecnologia .Net.
Ainda existe a barreira multiplataforma, mas acredito que uma questo de tempo, j que existem
projetos paralelos
Tabela 1 Tecnologias de Desenvolvimento
Tecnologia de Desenvolvimento
Particularmente recomendo as seguintes tecnologias de
desenvolvimento: (ver tabela acima)
Banco de Dados
A tabela 2 ilustra quais so as opes recomendadas, de
acordo com o volume de acesso e o tipo de aplicao.
Tabela 2 Opes em Banco de Dados
Delphi
Intranets
Sites Institucionais / Pessoais
at 200 sesses simultneas
Firebird - Interbase - MySQL - PostGreSQL
Intranets
Canal de Notcias
B2B
de 200 sesses a 1000 sesses simultneas
Cache - Firebird - Interbase - Jasmine
PostGreSQL - SQL Server - SyBase
Notcias
D2B
B2C (e-Commerce)
Leiles
de 1000 sesses a 5000 sesses simultneas
Cache - D2B - Firebird - Interbase
Jasmine - Oracle - SQL Server
SyBase
B2C (e-Commerce)
Leiles
acima de 5000 sesses simultneas
Cache - DB2 com tecnologia SQL J
DB2 com tecnologia SQL J
SQL Server + Microsoft Site Server
SyBase + EIP (Enterprise Information Portal)
MeGAZINE 14
Anlise dos SGDBs
Cache
Orientao objetos o ponto forte deste banco. Oferece
integrao com EJB (Enterprise Java Beans), alm de trazer um
timo servidor de aplicaes, ferramentas administrativas e um
ambiente de desenvolvimento, baseado na tecnologia CSP (Cache
Server Pages). O Cach est conquistando o mercado brasileiro,
justamente pela sua poltica de licenciamento, robustez,
performance e flexibilidade. Atende desde pequenas aplicaes,
at mesmo as de misso crtica.
DB2
Sei que dispensa apresentaes, mas o DB2 um SGDB
muito robusto e multi-plataforma. Possui otimizao de
pesquisas (vital para grandes portais), tecnologia SQL J (total
suporte ao Java). Traz consigo poderosas ferramentas de
administrao, onde a simplicidade ponto alto.
Integrado ao servidor de aplicaes WebSphere (IBM), o DB2
mostra todo o seu poder de performance, escalabilidade e
segurana. Realmente a Big Blue nos surpreende a cada verso,
implementando novas tecnologias e tornando o DB2 cada vez
mais robusto.
Firebird
Muito conhecido na Comunidade Delphi, o Firebird concebido
a partir do Interbase (Borland). Por ser open-source, vem
ganhando novos recursos e quebrando algumas barreiras neste
imenso mercado de banco de dados. Bastante robusto, est sendo
reescrito em C++, para oferecer suporte a orientao objetos.
Atualmente disponvel em mais de 10 plataformas, o Firebird
possui suporte a mltiplos processadores, replicao de dados,
otimizao de pesquisas, entre outros recursos.
Interbase
O Interbase muito semelhante ao Firebird, justamente
porque foi seu progenitor. importante frisar que os dois esto
seguindo caminhos diferentes, portanto, sugiro que acompanhem
o processo de evoluo de ambos.
Jasmine
Assim como o Cache, totalmente orientado objetos, e
possui alta escalabilidade.
A integrao com o Java transparente, facilitando muito os
trabalhos das equipes de desenvolvimento. A CA (Computer
Associates) est trabalhando de maneira intensa no Jasmine,
aperfeioando o mdulo de segurana, bem como sua
performance. Excelente opo para aplicaes Internet.
MySQL
O queridinho da maioria dos desenvolvedores Web,
justamente pela simplicidade, distribuio free, e os inmeros
servidores de hospedagem que oferecem suporte ao banco.
Projetado para trabalhar com grande volume de dados, est
ganhando um recurso indispensvel: integridade de dados. A
popularidade do MySQL est crescendo a cada dia, e ganhando
mais adeptos. Indicado para aplicaes pequenas e mdias, mas
um grande portal de notcias nacional, arriscou desenvolver uma
aplicao baseada em PHP e MySQL, e por enquanto est dando
certo.
Oracle
Poderia apenas citar o nome deste maravilhoso SGDB, mas
impossvel. Oracle Oracle e pronto. No amigos, temos muito
mais surpresas por a. A Oracle conseguiu melhorar ainda mais
a performance do seu famoso SGDB. A verso 9i possui
otimizaes, alm de oferecer um modelo hbrido de orientao a
objetos. Obviamente no oferece total suporte objetos, mas
continua no topo ao lado do DB2. Assim como o DB2, o Oracle 9i
possui o seu servidor de aplicaes, o 9iAS, alm de oferecer o
Portal Server, dando muito trabalho aos seus concorrentes.
PostGreSQL
A maior revelao dos ltimos tempos, tambm baseado na
tecnologia relaciona-orientado a objetos. Alm de ser totalmente
free, oferece maior escalabilidade que o seu suposto concorrente
direto: MySQL. Muito mais robusto e performance invejvel,
possui representao no Brasil atravs da dbExperts, que
desenvolveu diversas ferramentas de administrao, tornando
ainda mais nobre o produto. Excelente opo para pequenas,
mdias e at mesmo grandes aplicaes.
SQL Server
O SQL Server 2000 evoluiu muito em diversos pontos, como:
segurana, performance e escalabilidade. As ferramentas
administrativas que acompanham o produto, causam inveja em
seus concorrentes, alm de um excelente material didtico, com
timos exemplos. Grandes portais esto adotando o produto pela
performance e escalabilidade, alm claro, da tima poltica de
licenciamento da Microsoft. Assim como seus concorrentes, a
Microsoft dispe do Site Server, um excelente servidor de
aplicaes, e muito recomendado para grandes portais.
SyBase
Excelente banco de dados, ultra portvel, serviu como base
para o SQL Server, mas num passado distante, j que os dois
seguiram caminhos diferentes. O Sybase oferece a maioria dos
recursos encontrados em outros SGDBs, e est preparando uma
nova verso, orientada a objetos. Com o seu produto EIP
Delphi
(Enterprise Information Portal) oferece maior segurana e
performance em grandes aplicaes.
Infra-estrutura
Amigos, tenham sempre em mente que suas aplicaes
possam sofrer o efeito da multiplicao dos pes, ou seja, faa
uma anlise criteriosa, com o objetivo de obter o nmero mdio de
sesses simultneas e volume de informaes a serem
manipuladas. Com esses dados poderemos projetar a infra-estrutura
necessria para nossa aplicao.
Regra nmero 1: Utilize o modelo 3tier (3 camadas ou
mltiplas camadas).
Nunca disponibilize o seu SGDB no mesmo servidor da
aplicao.
Trabalhar com o SGDB em cluster uma regra obrigatria
quando ultrapassamos 200 sesses simultneas. At mesmo as
aplicaes menores deveriam trabalhar em cluster, mas devido ao
alto custo de equipamento e licenas de software, muitas
empresas no podem usufruir desta tecnologia.
Amigos, desejo muita luz e sucesso a todos.
Links
Cache www.netcache.com.br
DB2 http://www.ibm.com/br/products/software/db2
Firebird http://www.firebirdsql.com
Interbase www.borland.com.br/interbase/index.html
Jasmine www.ca.com
MySQL www.mysql.org
Oracle www.oracle.com.br
PostGreSQL http://pgsql.dbexperts.com.br:8000/
SQL Server www.microsoft.com.br
SyBase www.sybase.com
Sobre o autor
EMERSON FACUNTE (emerson@facunte.com.br)
Consultor de Tecnologia com diversos livros publicados,
especialista em desenvolvimento de aplicaes e-
Business utilizando a ferramenta Delphi, baseado em
WebSnap, DataSnap, BizSnap e ISAPI/Apache Modules.
Faz parte do DreamTeam da Saraiva.COM, utilizando
tecnol ogi as Del phi e Java. Escri tor com 6 l i vros
publ i cados, sendo doi s, di ri gi dos para o
desenvolvimento de aplicaes Web.
Delphi
MeGAZINE 16
A necessidade de trocar informaes entre aplicaes, bancos
e at mesmo plataformas diferentes, fez com que a utilizao de
arquivos XML venha crescendo cada dia mais rpida e saber
como ler e gerar tais arquivos torna-se imprescindvel em
qualquer aplicativo hoje. O Delphi, a partir de sua verso 6
Enterprise, oferece um timo suporte a manipulao de XMLs,
tanto atravs de componentes, quanto a ferramenta de apoio, e
sobre isso que iremos tratar neste artigo.
O suporte para transformaes XML provido de duas
formas. O primeiro uma coleo de componentes que permitem
acessar arquivos XML e convert-los para serem utilizados
dentro do Delphi e vice-versa, como, por exemplo, preparar um
arquivo XML para poder ser utilizado via ClientDataSet, ou,
pegar o contedo de um ClientDataSet e gerar um arquivo XML
para ser compartilhado com outros aplicativos. O segundo uma
ferramenta especial chamada XML Mapper, a qual permite
gerar arquivos estruturados para a transformao de arquivos
XML.
Este artigo o primeiro de duas partes. Neste,
demonstraremos como utilizar a ferramenta XML Mapper para
criar arquivos de transformao XML. Na parte 2, abordaremos
como usar estes arquivos de transformao com os componentes
Transformations do Delphi.
XML e ClientDataSets
Podemos armazenar dados carregados em um ClientDataSet
em arquivos fsicos no disco basicamente em dois formatos:
Formato binrio proprietrio, ou em formato XML. Tambm,
possvel ler os dados armazenados em um ClientDataSet como
XML lendo sua propriedade XMLData. Em ambos os casos, o
formato de dados XML particular ao ClientDataSet. Este
formato inclui metadata, informaes de change-log, e os dados
em questo. Em outras palavras, no possvel carregar dados
de qualquer arquivo XML em um ClientDataSet; podemos
apenas utilizar arquivos XML que possuam a estrutura exigida
pelo ClientDataSet.
Uma conseqncia desta estruturao exigida pelo
ClientDataSet, que provavelmente um arquivo XML gerado por
outras aplicaes no Delphi, no sero compatveis com o
ClientDataSet. Por exemplo, veja o arquivo XML mostrado na
Figura 1.
<customers>
<customer custno=1001">
<name>John Doe</name>
<address>101 Broadway Avenue</address>
<city>New York</city>
<state>New York</state>
<zip>00123</zip>
<credit>GOOD</credit>
<comments></comments>
</customer>
<customer custno=1002">
<name>Jane Doe</name>
<address>1001 Main Street</address>
<city>Los Angeles</city>
<state>California</state>
<zip>90123</zip>
<credit>GOOD</credit>
<comments>This is a great customer.</comments>
</customer>
</customers>
Figura 1: Exemplo de arquivo XML que no foi gerado
conforme o padro XML adotado pela Borland (Data packet
format).
Por Alessandro Ferreira, alessandro@theclub.com.br
Transformaes XML no Delphi
Parte 1
Utilizando o XML Mapper
Delphi
MeGAZINE 17
O arquivo XML apresentado na Figura 1, faz uso de
elementos XML para apresentar os dados da tabela Customer. Se
estes mesmos dados fossem inseridos em um ClientDataSet, e a
verificssemos a propriedade XMLData do ClientDataSet, o
arquivo resultante seria algo parecido com o mostrado na Figura
2, ou seja, o padro especial adotado pela Borland (XML data
packet).
<?xml version=1.0" standalone=yes?>
<DATAPACKET Version=2.0">
<METADATA><FIELDS>
<FIELD attrname=custno fieldtype=
string WIDTH=4"/>
<FIELD attrname=name fieldtype=
string WIDTH=21"/>
<FIELD attrname=address
fieldtype=string WIDTH=32"/>
<FIELD attrname=city fieldtype=
string WIDTH=32"/>
<FIELD attrname=state fieldtype=
string WIDTH=32"/>
<FIELD attrname=zip fieldtype=
string WIDTH=32"/>
<FIELD attrname=credit fieldtype=
string WIDTH=4"/>
<FIELD attrname=comments
fieldtype=string WIDTH=32"/>
</FIELDS><PARAMS/></METADATA>
<ROWDATA>
<ROW custno=1001" name=John Doe
address=101 Broadway Avenue city=New
York
state=New York zip=00123"
credit=GOOD
comments=/>
<ROW custno=1002" name=Jane Doe
address=1001 Main Street city=Los
Angeles
state=California zip=90123"
credit=GOOD
comments=This is a great customer./>
</ROWDATA>
</DATAPACKET>
Figura 2: Arquivo XML conforme o padro Borland
(XML data packet format).
O XML data packet contm substancialmente mais
informao que um arquivo XML simples, mostrado na Figura 1,
observe, que alm dos dados, temos elementos XML vazios, ou
seja, elementos que representam o metadata das informaes
contidas no arquivo XML. Contudo, o arquivo apresentado na
Figura 2, ainda est bastante simples. Este arquivo poder
conter ainda mais elementos XML vazios indicando, por exemplo,
se houve mudana de log, funcionalidade esta mantida pelos
mtodos MergeChangeLog ou ApplyUpdates, onde possvel
manter o estado de registros aps manutenes executadas via
ClientDataSet.
Obviamente, o arquivo XML mostrado nas Figuras 1 e 2 no
podem ser mesclados. Mas, felizmente os componentes de
transformaes XML disponveis no Delphi, permitem
transformar o arquivo XML exemplo da Figura 1 para o arquivo
XML exemplo da Figura 2, e vice-versa. Em outras palavras, os
componentes de transformaes XML permitem utilizar dados
XML de um arquivo com formato no data packet para um
ClientDataSet e deste fazer o processo inverso.
Os componentes de transformao existentes no Delphi, para
que possam executar esta pequena maravilha, necessitam de um
arquivo XML especial onde feito um mapeamento entre os dois
formatos. Para gerar este arquivo XML especial, iremos fazer uso
da ferramenta XML Mapper que acompanha o Delphi.
XML Mapper
Veja o XML Mapper logo abaixo na Figura 3.
Figure 3: A ferramenta XML Mapper.
Criando uma Transformao a partir de um
arquivo XML
Os passos seguintes demonstram como converter os dados
Delphi
MeGAZINE 18
armazenados no arquivo XML exemplo mostrado na
Figura 1, em um XML data packet. Um arquivo contendo
estes dados estar disponvel para download no link
especificado no final deste artigo, com o nome de
xmldata.xml.
Primeiro, v em Tools | XML Mapper no menu de seu
Delphi para abrir o XML Mapper. Feito isso, no menu
principal do XML Mapper, selecione File | Open. Agora,
v a pasta onde voc salvou o xmldata.xml, selecione-o e
clique em OK. O XML Mapper abrir este arquivo e
exibir a sua estrutura no painel Document.
Vale lembrar que tambm poder ser carregado um
arquivo de schema ou documento de tipo de definio
(DTD), permitindo criar a transformao do XML sem a
necessidade de se ter o arquivo XML em questo. Alm
disso, voc pode visualizar a informao do XML schema
clicando na aba Schema View, como mostrado na Figura 4.
O prximo passo identificar quais atributos e elementos do
arquivo XML queremos acessar no ClientDataSet; Isso poder
ser feito, adicionando cada atributo e elemento que deseja-se
transformar ao painel de transformao.
Caso queira adicionar todos os atributos e elementos, clique
com o boto direito no item principal do treeview e escolha Select
All. Para adicionar somente alguns atributos e elementos, v
selecionando um a um. Neste momento ainda, o painel
Datapacket permanecer em branco.
Agora que voc j identificou quais campos deseja
transformar, voc est pronto gerar a to esperada
transformao.
Certifique-se de que a opo XML to datapacket esteja
selecionada e estando tudo nos conformes, v ao menu Create |
Datapacket from XML. Voc poder visualizar a transformao
no painel do lado direito (Datapacket), mostrando campo a campo
que voc selecionou ser transformado, como mostra a Figura 5.
Para testar realmente se a converso foi bem sucedida, clique
o boto Create and Test Transformation e poder visualizar os
dados convertidos sendo mostrados em um DBGrid. (Figura 6).
Figura 5 Transformao realizada
Figura 4 XML Mapper / Schema View
Figura 6
Dados convertidos
Delphi
MeGAZINE 19
Neste DBGrid (Figura 6), voc poder conferir que o
resultado apresentado fielmente o contedo apresentado na
Figura 1, contudo, separado em campos e na estrutura que o
ClientDataSet necessita, tudo sem muito stress, utilizando-se das
facilidades que o XML Mapper nos proporciona.
Contudo, se o resultado da transformao no for o esperado,
e voc precisar fazer alguns ajustes, feche o formulrio onde est
sendo apresentado o DBGrid, e volte ao XML Mapper. Por
exemplo, se voc desejar alterar o tamanho do campo Name,
selecione tal campo no treeview a esquerda de seu XML Mapper e
depois clique na aba Node Properties, onde ter uma gama de
configuraes que poder aplicar ao referido campo. (Figura 7).
Figura 7 Propriedades do campo name
Uma vez ajustadas as propriedades de um campo, para
visualizar se o resultado o esperado, clique o menu Create |
Datapacket from XML e depois o boto Create and test
transformation . Se tudo estiver OK, feche novamente o
formulrio que contm o DBGrid, e no menu principal do XML
Mapper escolha File | Save | Transformation. O XML Mapper
ir sugerir o nome ToDP.xtr (para data packet). Voc poder
aceitar este nome ou informar outro que achar mais conveniente.
Estando os painis Document e o Datapacket populados, voc
poder agora facilmente fazer o processamento inverso, ou seja,
de data packet para XML. Para comear, selecione a opo
Datapacket no painel de transformaes.
Para testar a transformao de data packet para XML, clique
no boto Create and Test Transformation. O XML Mapper ir
exibir o documento como mostrado na Figura 8. Feche a
visualizao aps verificar se est tudo correto, e vamos salvar o
arquivo de transformao selecionando o menu File | Save |
Transformation.
Transformando a partir de um XML Data Packet
No tpico anterior, voc fez a transformao de um data
packet para um documento XML. Esta transformao foi
bastante simples porque a estrutura do arquivo XML j estava
definida, ou seja, nos baseamos em um arquivo XML j existente.
Criar esta mesma transformao quando o arquivo XML no
existe, um pouquinho mais complicado, porm, no um bicho
de sete cabeas e irei demonstrar logo abaixo como proceder.
Neste exemplo, utilizaremos um arquivo chamado data.xml (que
tambm est disponvel para download no link ao final deste
artigo), vamos l!
Abra o XML Mapper novamente (menu Tools | XML Mapper
do Delphi). Caso j esteja aberto, feche o arquivo aberto
anteriormente para iniciarmos uma nova transformao (menu
File | Clear All). Agora, abra o arquivo data.xml (que padro
ClientDataSet XML) clicando com o boto direito no panel
Datapacket (lado direito do XML Mapper) e escolhendo Open
Datapacket. Observe que a estrutura do arquivo data.xml ser
carregada.
O prximo passo clicar com o boto direito do mouse sobre o
Figura 8 Data packet para documento XML
Delphi
MeGAZINE 20
item Clientdataset e selecionar a opo Select All
Children. Fazendo isso, voc estar
automaticamente povoando a lista Selected Fields
no painel de Transformao. Se voc desejar
transformar apenas alguns campos, v clicando
campo a campo e selecionando-o com Select.
Bem, agora voc est pronto para definir a
estrutura do arquivo XML para o qual voc quer
transformar o data packet. No menu principal do
XML Mapper, selecione Create | XML From
Datapacket. Fazendo isso, ser exibido uma caixa
de dilogo com o ttulo Create XML From
ClientDataSet, como mostrado na Figura 9.
Figura 9 Caixa de Dilogo XML From Datapacket
Voc poder utilizar esta caixa de dilogo para configurar os
atributos e elementos para a gerao de seu documento XML a
partir do formato do ClientDataSet, ou seja, voc ir criar um
arquivo semelhante ao apresentado na Figura 1, a partir de um
data packet semelhante ao mostrado na Figura 2.
Altere o parmetro Root name para Customers, o campo
ROW para customer, e o campo @custno de custno para @custno.
(Atente-se para que o XML case-sensitive, ou seja, faz distino
de maisculos e minsculos; sendo assim, digite os valores acima
exatamente da forma que desejar utiliz-los mais tarde).
Aps fazer os ajustes aos nomes, e a definio de atributos ou
elementos (colocando @ antes dos nomes que voc quer que sejam
gerados), clique o boto Create. O XML Mapper completar as
definies necessrias para a transformao, como apresentado
na Figura 10.
Finalizando, voc pode criar sua transformao de data
packet para arquivo XML agora. Comece clicando em Create and
Test Transformation. O XML Mapper ir exibir uma amostra da
estrutura de sua transformao, semelhante ao visualizado na
Figura 8. Assim, voc poder analisar se tudo est como o
esperado e se sim, voltar ao XML Mapper e em seu menu
principal selecionar File | Save | Transformation para concluir.
Com estas definies atuais no XML Mapper, voc pode criar
uma transformao de arquivo XML para data packet, ou seja, o
inverso do que acabamos de fazer. Para isso, basta selecionar a
opo XML to Datapacket no painel de transformaes e depois
clicar em Create and Test Transformation, fechando o
formulrio de visualizao recm apresentado e no menu
principal do XML Mapper selecionar File | Save |
Transformation.
Concluso
O XML Mapper permite criar arquivos de transformao com
extrema facilidade e desenvoltura. Estes arquivos de
transformao podero ser utilizados dentro do Delphi atravs dos
componentes Transformations (no so Tranformations
Tabajara, hein!) para permitir que um ClientDataSet leia e ou
grave a partir de documentos XML data packet ou no, porm,
isso ir ficar para o nosso prximo artigo, no ms que vem.
Os arquivos referente este artigo esto disponveis para
download em:
http://www.theclub.com.br/revista/xmltrans_parte1.zip
Figura 10 XML Mapper com as definies j completadas
Delphi
MeGAZINE 21
Clipper/Delphi
Nesta ltima parte, veremos detalhadamente a integrao do
software TDataSet Descendente com o servidor ADS (Advantage
Database Server) e outros itens de interesse. Os tpicos
abordados sero:
1. O Cliente/Servidor ADS (Advantage Database Server).
2. A Integrao do Cliente/Servidor ADS com o TDataSet
Descendente.
3. A Nova Base de Dados (ADT) e suas Funcionalidades.
4. A Facilidade de Instalao e Manuteno do Cliente/
Servidor ADS.
5. Consideraes Gerais
1 - O Cliente/Servidor ADS (Advantage Database
Server)
J falamos sobre o TDataSet Descendente em modo local,
mas com o crescimento da base dados e do nmero de usurios
chegar um momento em que a implantao da arquitetura
cliente/servidor ser necessria, para eliminar problemas de
corrupo de dados, reduzir trfego de rede e implementar
controle de transaes e alto nvel de segurana, alm de outras
funcionalidades inerentes a esta filosofia. Existem ouras solues
no mercado que se destinam a estes propsitos, mas para sua
implementao requerido grande dispndio de recursos
humanos e investimentos na renovao do seu ambiente de
hardware.
O servidor ADS foi concebido pela Extended Systems, para
dar tratamento cliente/servidor s bases DBF/NTX/CDX e com
sua evoluo para ADT/ADI. Dentre suas funes bsicas, o ADS
resolve plenamente o problema de corrupo de dados, trfego de
rede, controle de transaes e segurana da base. Possui muitas
outras funes que auxiliaro o usurio na manuteno de sua
base de dados. grande sucesso nos Estados Unidos e sua fama
se projetou para o mundo inteiro, chegando ao Brasil em 1993,
distribudo pela ReNet Tecnologia Ltda.
A primeira verso foi para sistema operacional Novell
Netware e para linguagem de programao Clipper que, na
poca, eram muitos populares e bastante utilizados nas empresas
do mundo inteiro. Com o passar do tempo outros servidores e
suporte a outras linguagens de desenvolvimento foram
acrescentados. Hoje, o ADS suporta os sistemas operacionais
Windows NT/2000/XP, Linux, Netware e Windows 95/98/ME e
linguagens Clipper, Delphi, Visual Basic, Visual Objects, Kylix,
C
++
Buider e outro ambientes Windows atravs de interface OLE
DB (para ADO), driver ODBC ou interface ACE API
(Application Programming Interface).
Tabelas DBF sem ADS
A utilizao de arquivos formato DBF, utilizado em Clipper e
Delphi, sem ADS pode resultar na corrupo da base devido a
gravao dos dados ocorrer sem controle. Podemos citar como
exemplo o header de um arquivo que pode informar a existncia
de 241 registros, quando na verdade existem 237 (ou outro
nmero qualquer). Como se no bastasse, a queda de uma
estao faz com que todo o sistema pare at que o responsvel
aparea, verifique o problema, reindexe os arquivos (nunca um
s) e autorize o re-incio da utilizao. Tomar muito mais tempo
para correo, caso o arquivo de dados tambm esteja danificado.
Como Migrar de Clipper
para Delphi de Forma
Transparente
Parte 3 Final
Por Jos R. Prandini (prandini@renet.com.br)
MeGAZINE 22
No caso de queda de uma estao ou do sistema, as
transaes que estiverem sendo realizadas ficaro incompletas e
haver a necessidade dos famosos programas de acerto de
arquivos, bastante comuns em qualquer empresa. Finalmente,
importante saber que os arquivos trafegam pela rede livremente,
ocasionando perda de desempenho. Como exemplo, podemos citar
o caso em que voc solicita informaes de um cliente chamado
Walter e por estar no final do arquivo, seus dados so
carregados pela rede at se chegar ao registro desejado. Aqui
podemos estar falando tanto de 1.000 ou de 100.000 registros.
Tabelas DBF com ADS
Com o ADS, os problemas acima descritos param de ocorrer,
pois ele exerce um controle efetivo sobre a base de dados,
gerenciando a entrada e sada de todas as atualizaes efetuadas.
Entre algumas das funes principais do ADS podemos citar:
Todo o processamento do sistema passa a ser efetuado no
servidor ou servidores de dados;
Gerenciamento dos arquivos, no permitindo que dados
sejam lidos ou gravados com problemas;
Caso um arquivo tenha sido gravado com outro software no-
ADS enquanto esta tabela no estiver em uso por aplicao ADS,
e uma corrupo de dados tenha sido gerada, o servidor ADS
registrar em seu log o erro quando ler este registro e forar o
usurio a corrig-lo para que o sistema volte a funcionar
normalmente. Isto muito importante pois fora o administrador
do sistema tomar as devidas precaues quanto ao que o usurio
pode ou no fazer com os arquivos. Como meios de corromper um
arquivo podemos citar a utilizao do DBU do Clipper, o FoxPro,
Access etc. A ttulo de curiosidade, bom saber que o DBU do
Clipper, por ser um programa PRG normal, pode ser linkado
para trabalhar, sem problemas, com o ADS, Tambm
importante lembrar que a Extended Systems criou um DBU
Windows prprio, chamado de ARC32 (Advantage Data Architect)
que alm de possuir todas as caractersticas do DBU, propicia
uma srie de outras funes, tais como: importao de arquivos
Paradox para a base ADT, dicionrio de dados, gerenciador
remoto ADS, controle de ambiente do ADS etc.;
O Controle de Transaes torna o sistema mais confivel,
evitando a perda de dados quando ocorrerem problemas com a
estao. Como nenhuma gravao aconteceu efetivamente, basta
realizar a transao novamente e continuar o processamento;
O ADS permite esconder os diretrios e arquivos dos
usurios tornando o sistema bastante seguro de atualizaes fora
do sistema, bem ou mal intencionadas. Para isto, basta tirar os
direitos de rede dos usurios nas pastas de dados e inserir no
aplicativo uma simples linha de cdigo em Clipper e alterar uma
propriedade em Delphi;
O ADS permite conexo remota, atravs do AIS (Advantage
Internet Server), que hoje parte integrante do servidor ADS. O
AIS uma soluo que utiliza a Internet como meio de
transferncia e atualizao de dados. O cliente faz o login na
Internet, no entra em nenhum browser e por intermdio de um
endereo IP do servidor que tenha o ADS instalado, ele consegue
interagir com qualquer arquivo de seu sistema em conjunto com
os usurios locais.
Assim as atualizaes ficaro mais dinmicas, evitando a
criao de arquivos de apoio s atualizaes.
2 - A Integrao do Cliente/Servidor ADS com o
TDataSet Descendente
O Delphi chegou e foi se firmando no mercado de informtica
e uma de suas possibilidades a de poder ler um arquivo de base
DBF, apesar de no poder faz-lo em tempo real com o Clipper,
pois utiliza outro tipo de ndice, o MDX.
Pensando nisto, a Extended Systems desenvolveu o TDataSet
Descendente que permite a integrao do Delphi com o ADS e
possibilita a leitura dos arquivos de base DBF/NTX/CDX em
tempo real com o Clipper, de forma completa e sem margem para
erros.
Foi mais adiante, permitindo que esta base tambm pudesse
ser lida em modo local (royalty free), ou seja, sem a aquisio do
servidor ADS, permitindo assim que o usurio consiga migrar de
Clipper para Delphi sem investimentos em software, podendo
aguardar o momento certo em que uma filosofia cliente/servidor
seja realmente necessria.
A Extended Systems tambm criou uma base proprietria, o
ADT/ADI/ADM, espelhada nos arquivos Paradox do Delphi.
Assim est concludo o ciclo, pois o usurio pode migrar de
Clipper para Delphi sem nenhuma mudana em sua base de
dados ou pode transformar sua base Paradox em base ADT, com
algumas mudanas, no muito complicadas. Pode ainda iniciar
sua base ADT, se estiver iniciando os trabalhos com Delphi. Cabe
lembrar aqui que, com ADT, a utilizao do BDE (Borland
Database Engine) no ser mais necessria, pois a herana do
TDataSet no exige a utilizao desta engine.
Como esta migrao para TDataDescendente, que a princpio
pode ser utilizado sem o ADS, no gerar gastos extras para a
empresa, fica mais fcil testar e verificar como o software se
comportar em suas instalaes. Vale ressaltar que todas as
informaes referentes ao TdataSet Descendente, neste e em
artigos anteriores tem a mesma validade para o Kylix e
C
++
Builder. A Nova Base de Dados (ADT) e suas funcionalidades.
Clipper/Delphi
MeGAZINE 23
3 - A Nova Base de Dados (ADT) e suas
Funcionalidades
A Extended Systems tambm criou uma base proprietria, o
ADT/ADI/ADM, espelhada nos arquivos Paradox do Delphi.
Assim est concludo o ciclo, pois o usurio pode migrar de
Clipper para Delphi sem nenhuma mudana em sua base de
dados ou pode transformar sua base Paradox em base ADT, com
algumas mudanas, no muito complicadas. Pode ainda iniciar
sua base ADT, se estiver iniciando os trabalhos com Delphi. Cabe
lembrar aqui que, com ADT, a utilizao do BDE (Borland
Database Engine) no ser mais necessria, pois a herana do
TDataSet no exige a utilizao desta engine.
Como esta migrao para TDataDescendente, que a princpio
pode ser utilizado sem o ADS, no gerar gastos extras para a
empresa, fica mais fcil testar e verificar como o software se
comportar em suas instalaes. Vale ressaltar que todas as
informaes referentes ao TdataSet Descendente, neste e em
artigos anteriores tem a mesma validade para o Kylix e
C
++
Builder. A Nova Base de Dados (ADT) e suas Funcionalidades.
A base ADT utiliza ndices muito parecidos com os ndices de
base CDX do Clipper, ou seja, os ndices agrupados em um nico
arquivo, sendo selecionados por tags. Na converso do Paradox
criado um ndice (ADI) com o nome de PRIMARY, que deve ter
seu nome trocado e se necessrio ser colocado como ndice
default dos ndices existentes, no dicionrio de dados do ADS,
caso ele seja utilizado. O nmero de ndices existentes em um
arquivo chega a 50, podendo ser utilizada expresses e condies
em sua estrutura.
A converso de arquivos para a base ADT pode ter sua
origem em:
Fonte de Dados ADO
Paradox
Dbase
Pervasive SQL (Btrieve)
Arquivo Texto
4 - A Facilidade de Instalao e Manuteno do
Cliente/Servidor ADS
O usurio, quando decide ir para a filosofia cliente/servidor,
seja com Clipper, Delphi ou com qualquer outra linguagem
Windows, como: Visual Basic, Visual Objects e outras, ter
diversas dvidas quanto ao trabalho a ser enfrentado ou hardware
a ser adquirido. Quando se tratar do ADS, estas respostas no
sero difceis de serem respondidas, pois a Extended Systems,
confiante em seu produto, criou a avaliao do ADS, por um
tempo pr-determinado, em que o usurio roda suas aplicaes
em tempo de produo, se assim optar e decidir pela compra do
produto final aps ter certeza de que nenhuma surpresa ir
ocorrer, podendo inclusive continuar rodando normalmente,
devendo apenas reinstalar o ADS com a nova senha adquirida.
O ADS foi projetado para que usurios com um mnimo de
conhecimento de seu servidor, seja em Windows 2000/NT/XP, 95/
98/ME, Linux ou Novell Netware, consigam instal-lo facilmente.
Sua manuteno muito simples e aps a atualizao dos
parmetros de seu sistema de dados e ajuste do ambiente
Windows, se for o caso, pouco restar a fazer. Realmente, no
requer DBA para sua utilizao.
Quantos aos programas, ser necessrio algum esforo extra,
que mostraremos a seguir.
Clipper - Somente a Linkagem do OBJ do programa, no
sendo necessrio compilao. Esta linkagem pode ser efetuada
normalmente, com Rtlink, Exoespace ou Blinker.
Delphi - Se o sistema estiver preparado para o ADS, a
simples troca de uma propriedade de True/False permite ao
programa ser gerenciado pelo ADS. Caso o sistema no esteja
preparado ainda, ser necessria uma converso. Neste caso
teremos que utilizar o AdsTable e AdsQuery ao invs do Table e
Query. As propriedades destes componentes continuam as
mesmas e no ser uma mudana desgastante. No caso de
mudana do Paradox para a base ADT, teremos que lidar com o
ndice primrio, que gerar algum trabalho mas em contra-
partida, no teremos mais a preocupao com o BDE (Borland
Database Engine).
Para outras linguagens Windows, como Visual Basic,
Visual Objects e outras, temos a opo de utilizar o ODBC do
ADS, que, quando instalado, se integra com o ODBC do
Windows. Como o ODBC um driver, o processo de interao
com a base DBF/NTX/CDX simples, exigindo somente o
direcionamento dos drivers para os arquivos desejados.
Outra opo ser a de utilizar os provedores OLE DB / ADO
que acessam os dados do servidor ADS, local ou remoto, de forma
nativa, exigindo pouco trabalho por parte do usurio
Outras Funcionalidades Importantes do Servidor
ADS
Existem muitas outras funes importantes no ADS que no
foram tratadas aqui para que o artigo no se tornasse um
manual do produto, mas poderemos citar brevemente alguns
itens:
Integridade Referencial (Referential Integrity) Meio pelo qual
o relacionamento de ndices tratado em arquivo. Especificando
as regras de Integridade Referencial voc ter muito mais
Clipper/Delphi
MeGAZINE 24
segurana em seu banco de dados, por exemplo, que cada
representante de vendas esteja associado a um departamento.
Procedimentos Armazenados (Stored Procedures) - So rotinas
escritas, normalmente, pelo administrador do sistema e na
linguagem do servidor. Rodam de forma independente da
aplicao. Na maioria dos casos, requerem a compra de um
software em separado. A Extended Systems desenvolveu um novo
tipo de Stored Prodedures em que a linguagem a escolhida pelo
desenvolvedor, e no ser necessrio que somente o
administrador do sistema possa escrever estas rotinas. Por estas
e muitas outras mudanas, seu nome foi trocado para Extended
Procedures.
Advantage Internet Server (AIS) - O AIS foi integrado ao
servidor ADS e a conexo a partir de uma estao requer que o
arquivo de configurao ADS.INI esteja na estao.
5 - Consideraes Gerais
Pelo que pudemos ver nestes artigos, a utilizao de um
gerenciador de banco de dados como o ADS (Advantage Database
Server) de simples utilizao, exigindo algum esforo extra,
como no caso do Delphi com TdataSet Descendente ou
praticamente nenhum, como no Clipper e os outros de base
Windows (ODBC / ADO).
O melhor jeito de comprovar a facilidade que descrevemos
neste arquivo e a aderncia a seus aplicativos efetuar a
avaliao do ADS e comprovar na prtica que tudo aconteceu da
forma esperada e desejada, e que o investimento a ser efetuado
ser seguro, pois os benefcios j foram comprovados.
O download dos produtos referenciados pode ser efetuado a
partir da rea de download da ReNet (www.renet.com.br).
Procure em ADS Interfaces Clientes o arquivo ADE 6.2
TDataset Descendente para Delphi e C++ Builder (com suporte a
Delphi 7 e C++ Builder 6) ou a interface cliente que deseje testar,
e em Ferramentas ADS para Windows o arquivo ARC32
(Advantage Data Architect). Avaliaes do cliente/servidor ADS
devem ser solicitadas ReNet Tecnologia Ltda.
Sobre o autor
Jos R. Prandini (prandini@renet.com.br).
ReNet Tecnologia Ltda.
www.renet.com.br
renet@renet.com.br
Tel.: 11 3872-0423
Fax: 11 3872-4418
Clipper/Delphi
MeGAZINE 25
Printers - Como retornar informaes das
impressoras instaladas na mquina
Nesta dica, demonstraremos como retornar informaes teis
das impressoras instaladas na mquina, como por exemplo, o
caminho da rede, seu nome de compartilhamento, porta, etc.
Insira um componente ListView e um boto, como mostra a
figura 1.
Na lista de uses, declare:
uses
Printers, WinSpool;
{ Procedure que ir adicionar as informaes ao
ListView }
procedure AdicionaImpressoras(LV: TListView;
Servidor, NomeImpressora,
Compartilhamento, Porta, NomeDriver, Comentario:
String);
var
i: integer;
begin
with LV do
begin
Items.Add;
i := Items.Count-1;
Items[i].Caption := Servidor;
Items[i].SubItems.Add(NomeImpressora);
Items[i].SubItems.Add(Compartilhamento);
Items[i].SubItems.Add(Porta);
Items[i].SubItems.Add(NomeDriver);
Items[i].SubItems.Add(Comentario);
end;
end;
O retorno das informaes ser feito
atravs da API EnumPrinters:
procedure GetPrinterList(List:
TListView);
var
Dicas &Truques
MeGAZINE 26
Buffer, PrinterInfo: PChar;
Flags, Count, NumInfo: DWORD;
i: Integer;
Level: Byte;
begin
Flags := PRINTER_ENUM_CONNECTIONS or
PRINTER_ENUM_LOCAL;
Level := 2;
Count := 0;
EnumPrinters(Flags, nil, Level, nil, 0, Count,
NumInfo);
if Count > 0 then
begin
GetMem(Buffer, Count);
try
if not EnumPrinters(Flags, nil, Level,
PByte(Buffer), Count, Count, NumInfo) then
Exit;
PrinterInfo := Buffer;
for i := 0 to NumInfo - 1 do
begin
case Level of
2: begin
AdicionaImpressoras(List,
PPrinterInfo2(PrinterInfo)^.pServerName,
PrinterInfo2(PrinterInfo)^.pPrinterName,
PPrinterInfo2(PrinterInfo)^.pShareName,
PPrinterInfo2(PrinterInfo)^.pPortName,
PPrinterInfo2(PrinterInfo)^.pDriverName,
PPrinterInfo2(PrinterInfo)^.pComment);
Inc(PrinterInfo,
SizeOf(TPrinterInfo2));
end;
4: begin
AdicionaImpressoras(List,
PPrinterInfo4(PrinterInfo)^.pServerName,
PPrinterInfo4(PrinterInfo)^.pPrinterName,
null,
null,
null,
null);
Inc(PrinterInfo, SizeOf(TPrinterInfo4));
end;
5: begin
AdicionaImpressoras(List, null,
PPrinterInfo5(PrinterInfo)^.pPrinterName,
null,
PPrinterInfo2(PrinterInfo)^.pPortName,
null,
null);
Inc(PrinterInfo,SizeOf(TPrinterInfo5));
end;
end;
end;
finally
FreeMem(Buffer, Count);
end;
end;
end;
{ abaixo, fazemos a chamada da procedure no evento
OnClick do boto }
GetPrinterList(LView);
O projeto completo referente esta dica est disponvel para
download em http://www.theclub.com.br/downloads/
ListaImpressoras.zip.
MS-Access - Como criar uma tabela com campo
Auto-Numerao no Access
Uma das formas de se criar uma tabela em qualquer banco
de dados, atravs de instrues DDL (Data Definition
Language), contudo, cada banco possui suas particularidades.
No caso do Access, para criar uma tabela contendo um campo
tipo Auto-Numerao, voc poder utilizar a seguinte instruo:
CREATE TABLE Nome_Tabela (
Campo_Auto Counter Primary Key,
Campo_Texto Text(50) NOT NULL,
Campo_SimNao Logical NOT NULL
);
ADO - Implementando mtodo UpdatesPending
em objetos ADODataSet
Quando trabalhamos com CachedUpdates em um DataSet do
BDE (Query, Table), temos como verificar se existem
informaes pendentes em cache, e aps isso aplic-las atravs do
mtodo ApplyUpdates. Contudo, os objetos ADO no trazem um
mtodo especfico para isso, mas, podemos conseguir um
resultado bem aproximado. Veja a funo abaixo:
function ADOUpdatesPending(ADODataSet:
TCustomADODataSet): Boolean;
var
dsClone: TADODataSet;
Dicas &Truques
MeGAZINE 27
begin
dsClone := TADODataSet.Create(nil);
try
dsClone.Clone(ADODataSet);
dsClone.FilterGroup := fgPendingRecords;
dsClone.Filtered := true;
Result := not (dsClone.Bof and dsClone.EOF);
dsClone.close;
finally
dsClone.Free;
end;
end;
Windows - Como obter a data e hora de acesso,
criao e alterao de um arquivo
Neste exemplo, utilizamos o objeto TSearchRec para retornar
as datas e horas de um arquivo.
var
SearchFile: TSearchRec;
lpSystemTime: TSystemTime;
begin
{ arquivo }
FindFirst(c:\PDOXUSRS.NET,faAnyFile,SearchFile);
try
{ Criao }
FileTimeToSystemTime
(SearchFile.FindData.ftCreationTime,lpSystemTime);
Edit1.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
{ Modificado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastWriteTime,lpSystemTime);
Edit2.text:=DateTimeToStr
(SystemTimeToDateTime(lpSystemTime));
{ Acessado }
FileTimeToSystemTime
(SearchFile.FindData.ftLastAccessTime,lpSystemTime);
Edit3.text:=DateTimeToStr(SystemTimeToDateTime(lpSystemTime));
finally
FindClose(SearchFile);
end;
end;
Arrays - Como pesquisar valores
A partir do Delphi 6, temos um suporte melhor
manipulao de arrays. Na unit StrUtils (veja artigo em nossa
revista de Agosto/2002) existem vrias funes para
manipulao de arrays. Veja abaixo:
implementation
uses StrUtils;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Cores: Array[0..4] of String;
i: Integer;
begin
Cores[0] := amarelo;
Cores[1] := verde;
Cores[2] := azul;
Cores[3] := branco;
Cores[4] := preto;
i := AnsiIndexText(azul, Cores);
ShowMessage(A cor azul est na posio +
IntToStr(i) + do
Array);
end;
ClientDataSet - Como clonar/duplicar um registro
O ClientDataSet entre inmeras propriedades e mtodos
interessantes, possui um que permite fazer uma clonagem do
cursor atual de dados, o qual iremos utilizar para duplicar o
registro corrente no mesmo, veja abaixo:
procedure CloneRecord(Cds: TClientDataSet);
var
CdsClone: TClientDataSet;
i: integer;
begin
CdsClone := TClientDataSet.Create(Application);
try
CdsClone.CloneCursor(Cds, True);
Cds.Append;
for i := 0 to Cds.FieldCount-1 do
Cds.Fields[i].Value :=
CdsClone.Fields[i].Value;
CdsClone.Close;
finally
CdsClone.Free;
end;
end;
Dicas &Truques
MeGAZINE 28
procedure TForm1.Button1Click(Sender: TObject);
begin
CloneRecord(ClientDataSet1);
end;
Intraweb - Como converter uma aplicao stand-
alone para ISAPI a partir da verso 5.1
Aps atualizar o Intraweb para a verso 5.1 ou superior, os
passos para converter uma aplicao stand-alone para ISAPI,
ficaram um pouco diferentes em relao a verso anterior, a 5.0.
Veja abaixo como proceder:
{ Aplicao Stand-Alone }
program Exemplo;
uses
Forms,
IWMain,
ServerController in ServerController.pas
{IWServerController:
TIWServerController},
DatamoduleUnit in DatamoduleUnit.pas
{DataModule1: TDataModule},
Unit1 in Unit1.pas {IWForm1: TIWFormModuleBase};
{$R *.res}
exports
GetExtensionVersion,
HttpExtensionProc,
TerminateExtension;
begin
Application.Initialize;
Application.CreateForm(TformIWMain, formIWMain);
Application.Run;
end.
{ convertida para ISAPI }
library Exemplo;
uses
ISAPIApp,
IWInitISAPI,
ServerController in ServerController.pas
{IWServerController:
TIWServerController},
DatamoduleUnit in DatamoduleUnit.pas
{DataModule1: TDataModule},
Unit1 in Unit1.pas {IWForm1: TIWFormModuleBase};
{$R *.res}
exports
GetExtensionVersion,
HttpExtensionProc,
TerminateExtension;
begin
IWRun;
end.
Intraweb Retornar o path
Uma necessidade freqente no desenvolvimento web,
retornar o path onde nossa aplicao est rodando no servidor
Web. Felizmente, o Intraweb tira isso de letra, veja abaixo:
uses
SWSystem;
procedure TformMain.IWButton1Click(Sender: TObject);
begin
IWEdit1.Text := gsAppPath; // retorna o path
end;
IP Como retornar o hostname a partir de um
endereo IP
Em muitas situaes, necessitamos saber o nome de uma
mquina e temos apenas seu endereo IP. Na unit WinSock,
poderemos encontrar diversas APIs para este tipo de abordagem,
veja abaixo um simples exemplo:
implementation
uses WinSock;
{$R *.dfm}
function ResolveHostByIp(IP: string): String;
type
TAPInAddr = Array[0..100] of PInAddr;
PAPInAddr = ^TAPInAddr;
var
Dicas &Truques
MeGAZINE 29
WSAData: TWSAData;
Address: String;
InetAddr: u_long;
HostEntPtr: PHostEnt;
HostEnt: THostEnt;
HostName: String;
len, struct: Integer;
i: Integer;
begin
Result := ;
WSAStartUp( $101, WSAData );
try
Address := Trim(IP);
if Address = then
raise Exception.Create
( IP address not entered );
// Convert textual IP address to binary format
InetAddr := inet_addr( PChar(Address) );
if InetAddr = SOCKET_ERROR then
raise Exception.Create
( Invalid address entered );
// Get hist entry by IP
HostEntPtr := GetHostByAddr( @InetAddr, len,
struct );
if HostEntPtr = NIL then
raise Exception.Create( WinSock error: +
IntToStr(
WSAGetLastError() ) );
// Insert hostname into list
HostName := String( HostEntPtr^.h_name );
Result := HostName;
except
on E: Exception do begin
Beep();
ShowMessage( E.Message );
end;
end;
WSACleanUp();
end;
Para utilizar:
Edit.Text := ResolveHostByIp(200.210.71.16); / /
r et or na o nome da mqui na
MS-Access Como verificar se uma tabela existe
no banco de dados
Existem vrias formas para verificarmos se uma tabela
existe dentro de um banco de dados, porm, umas das mais
simples atravs do objeto Database conectado ao banco, veja
abaixo:
function CheckTable(Database: TComponent; Tabela:
string): Boolean;
var
Tabelas: TStringList;
begin
Result := False;
Tabelas := TStringList.Create;
try
if Database is TDatabase then // BDE
TDatabase(Database).GetTableNames(Tabelas);
if Database is TAdoConnection then // ADO
TAdoConnection(Database).GetTableNames(Tabelas);
if Tabelas.IndexOf(Tabela) >= 0 then
Result := True;
finally
Tabelas.Free;
end;
end;
{ Chamada da funo }
if CheckTable(ADOConnection1, country) then
ShowMessage(Existe!)
else
ShowMessage(No Existe!);
Windows Como criar grupos e subgrupos de
programas no menu iniciar
Uma das formas para fazer a criao de grupos e subgrupos
de aplicativos no menu iniciar do Windows, obtendo o path de
sistema onde o Windows guarda estas informaes e nele criar os
grupos. Veja abaixo como proceder:
implementation
uses ShlObj, FileCtrl;
{$R *.dfm}
Dicas &Truques
MeGAZINE 30
function GetProgramFolder: string;
var
pidl: PItemIDList;
Path: array[0..MAX_PATH] of char;
begin
SHGetSpecialFolderLocation(Application.Handle,
CSIDL_PROGRAMS,
pidl);
SHGetPathFromIDList(pidl,path);
Result := path;
Result := Result + \;
end;
function CriaGrupo(Path: string): Boolean;
begin
Result := ForceDirectories(GetProgramFolder+Path);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if CriaGrupo(TheClub\Grupo 1) then
ShowMessage(Grupo TheClub\Grupo 1 criado com
sucesso!);
if CriaGrupo(TheClub\Grupo 2) then
ShowMessage(Grupo TheClub\Grupo 2 criado com
sucesso!);
if CriaGrupo(TheClub\Grupo 3) then
ShowMessage(Grupo TheClub\Grupo 3 criado com
sucesso!);
end;
Windows Como desabilitar uma combinao de
teclas genericamente
Para desabilitar uma combinao de teclas vlida para todos
os formulrios da aplicao, ser necessrio fazer um tratamento
de mensagens do Windows. O exemplo abaixo demonstra como
desabilitar a combinao CTRL+P:
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure ProcessaMsg(var Msg: TMsg; var
Handled:
Boolean);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ procedure de tratamento }
procedure TForm1.ProcessaMsg(var Msg: TMsg; var
Handled:
Boolean);
begin
if Msg.message = WM_KEYDOWN then
begin
if (GetASyncKeyState(VK_CONTROL) <> 0) and
(GetASyncKeyState(Ord(P)) <> 0) then // Ctrl+P
begin
ShowMessage(Ctrl+P est sendo
desabilitado!);
Msg.wParam := VK_CLEAR;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
{ liga a procedure }
Application.OnMessage := ProcessaMsg;
end;
end.
Clipper Imprimir em modo paisagem na HP
Para que se consiga imprimir em modo paisagem na
impressora HP Deskjet, necessrio enviar um comando para
que a mesma possa mudar a orientao de impresso. Veja
abaixo como fazer isso via Clipper:
CLEAR
SET DEVICE TO PRINTER
SET PRINTER ON
// habilita modo paisagem na HP
@ prow(),pcol() say CHR(27) + &l1O
@ 11,10 SAY REPLICATE(*, 200)
@ 12,10 SAY REPLICATE(*, 200)
EJECT
SET DEVICE TO SCREEN
SET PRINTER OFF
Dicas &Truques