Esse artigo faz parte da revista Clube Delphi edição 37. Clique aqui para ler todos os artigos desta edição

imagem

Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.

Do Clipper para o Delphi

Migração tranqüila com o Advantage Database Server

Um problema que, vez por outra, aparece para os desenvolvedores é a necessidade de migrar sistemas antigos, escritos em Clipper, para Delphi. Normalmente são sistemas implantados há vários anos na empresa, já com diversas "atualizações" e uso bastante difundido. Sua substituição não pode ser feita de qualquer maneira, pois o sistema está implantado em praticamente todos os departamentos e os arquivos DBF contêm a vida da empresa dos últimos 10 a 15 anos. Além disso, o desenvolvimento de um novo sistema, do porte do que está implantado, levaria muito tempo para ser finalizado.

Como fazer para que o novo sistema conviva pacificamente com o antigo, enquanto os módulos vão sendo desenvolvidos? É necessário que ambos os sistemas acessem e atualizem os mesmos dados de maneira transparente, sem conflitarem entre si.

Pensando numa solução

A primeira idéia que vem à mente é usar o BDE com arquivos DBF. Mas essa abordagem tem o  problema de não permitir o uso dos índices nativos do Clipper (arquivos NTX), além de apresentar problemas de locking – o sistema de travamento de registros do BDE não é o mesmo do Clipper; usando-se a RDD MDX, para dBase IV, disponível no Clipper 5.01, 5.2 ou 5.3, pode-se solucionar o problema dos índices, mas não o problema do travamento. Além disso, o driver BDE para arquivos dBase não traz muita confiabilidade, e reindexações constantes são ainda necessárias. Assim, o que parecia uma solução passa a ser um problema ainda maior.

A segunda idéia é abandonar, definitivamente, os arquivos DBF, passando para uma solução cliente/servidor mais robusta – MS SQL Server, Oracle, InterBase, MySQL, PostgreSQL são alguns dos bancos de dados sugeridos quando analisamos essa idéia. Sem dúvida, o uso de um desses bancos traria  grandes vantagens ao sistema; maior confiabilidade e robustez, maior velocidade e menor tráfego na rede são algumas delas.

Porém há um problema: o que fazer enquanto o sistema estiver sendo desenvolvido? Seguindo essa abordagem, o sistema precisaria ser construído completamente e implantado de uma vez só. Um dia os usuários, ao chegarem ao trabalho, ligariam seus computadores, e no lugar de sua velha e familiar tela DOS encontrariam um sistema novinho em folha, escrito em Delphi, acessando um banco de dados cliente/servidor.

Essa idéia, na teoria, é excelente, mas na prática... Imagine só, nesse dia, quando os chamados de suporte começarem a aparecer de todos os departamentos da empresa, sejam eles relativos a partes do programa que não funcionam, a consolidações que não foram feitas ou estão incorretas, ou de operadores que não sabem trabalhar com o sistema. Tudo isso, além do problema de o que fazer com os dados antigos – temos de garantir uma migração para a nova plataforma com o mínimo de perdas possível. Sem dúvida, é uma idéia viável, mas de difícil implementação.

Uma abordagem mais conveniente

O mais conveniente seria uma solução que permitisse usar os arquivos DBF antigos, com o mínimo de modificações no sistema em Clipper (se possível, sem nenhuma mudança), e que tivesse confiabilidade para não trazer mais problemas. Dessa maneira, o sistema poderia ser desenvolvido modularmente, ou seja, com cada módulo sendo testado antes de implantado, e com problemas na implantação podendo ser solucionados antes da passagem para o próximo módulo. Uma opção é usar o Advantage Database Server (ADS), que permite acessar tabelas DBF com a confiabilidade de um banco de dados cliente/servidor.

O ADS, que já se encontra na versão 6, é uma ferramenta cliente/servidor multiplataforma, que permite acessar tabelas DBF, mas trabalha de maneira muito diferente do Clipper ou do dBase. Estas são ferramentas desktop, nas quais todo o processamento é feito na estação, e o servidor é um mero armazenador de informações; por exemplo, quando queremos saber o total de vendas do dia anterior, devemos trazer toda a tabela de vendas do servidor para a estação, totalizar as vendas e mostrar o resultado, o que aumenta muito o tráfego de rede.

Outro problema que ocorre com freqüência com ferramentas desktop, é a necessidade de reindexação. Como todo o processamento é feito no cliente, ao inserir alguma informação o índice é atualizado também no cliente. Caso a estação saia do ar, o DBF estará atualizado mas o índice não, obrigando a reindexação.

Além desses problemas, temos um não ligado diretamente à arquitetura do Clipper: a ausência do gerenciamento de transações. Quando a impressora trava no meio da nota fiscal, parando o sistema, como saber o que foi gravado e o que não foi ?

Cliente/servidor com o ADS

Com ferramentas cliente/servidor todas as informações são processadas no servidor; apenas os resultados são transferidos para o cliente. Em vez de o cliente receber toda a tabela e separar os dados que lhe interessam, ele requisita ao servidor somente o que deseja, e o servidor processa a requisição e envia os resultados. Além de reduzir o tráfego na rede, isso aumenta a confiabilidade: todo o processamento é feito pelo servidor, que gerencia as requisições, trava os registros internamente, mantém os índices, e pode controlar as transações.

Caso uma estação saia do ar, os índices não serão afetados, pois são mantidos pelo servidor; uma impressora travada no meio da emissão de uma nota faria com que toda a transação fosse desfeita, voltando os dados do sistema ao estado anterior à emissão da nota. Temos, assim, um aumento de desempenho e de confiabilidade do sistema, pois não precisamos nos preocupar com reindexações ou gravações pela metade.

Observe que essas vantagens são comuns a todos os gerenciadores de bancos de dados cliente/servidor. O que os diferencia são as características internas, o desempenho, a capacidade de gerenciar mais ou menos usuários e a maneira de acesso a dados.

O ADS, como as outras ferramentas cliente/servidor, também tem essas características. Existem versões de servidores para Windows (NT/2000/XP ou 95/98/ME), Linux e Netware. Os clientes podem ser feitos com Clipper (mais adiante veremos como transformar uma aplicação Clipper para que se torne cliente de um servidor ADS), FiveWin, Delphi/Kylix, ou qualquer outra linguagem que possa utilizar a ODBC ou ADO.

Uma vez adquirido o servidor ADS, pode-se usar qualquer cliente gratuitamente. O cliente é completamente independente do servidor, podendo até estar numa plataforma completamente diferente dele. Por exemplo, podemos criar um cliente Kylix que acessa o servidor Windows, ou um cliente Delphi acessando um servidor Linux ou Netware. A comunicação pode ser feita pelo protocolo TCP/IP ou IPX.

Dessa maneira, pode-se adquirir o ADS para desenvolver a migração do sistema Clipper para Delphi e, enquanto isso não acontece, tornar o sistema Clipper cliente/servidor, sem custo adicional.

O ADS permite utilizar os índices e Memos Clipper (NTX/DBT) ou FoxPro (CDX/FPT). Caso você esteja usando os índices NTX em sua aplicação Clipper e não queira mudá-los, pode continuar usando-os simultaneamente com os módulos já convertidos, sem nenhum problema.

Convertendo uma aplicação Clipper para ADS

As aplicações Clipper não necessitam de nenhuma conversão para poderem acessar os mesmos arquivos que uma aplicação Delphi com ADS. Porém, é recomendado que seja feita uma conversão, para aproveitarmos os recursos oferecidos pelo Advantage Database Server.

A maneira mais fácil de converter a aplicação é fazendo a linkedição com as bibliotecas do ADS. Não é necessária nenhuma modificação do código fonte e ele passa a poder usar os recursos do ADS. Essa linkedição faz com que o programa Clipper, ao invés de usar a RDD padrão (dbfntx ou dbfcdx), passe a usar a RDD do ADS (dbfcdxax ou dbfntxax), comunicando-se com o servidor para efetuar as operações nas tabelas.

Para isso, basta incluir o objeto dbfcdxax.obj ou dbfntxax.obj, a biblioteca dbfaxs.lib e as bibliotecas de comunicação no script de linkedição. Por exemplo, para linkeditar o programa meuprog usando o rtlink, bastaria um comando como o seguinte:

 

rtlink fi meuprog,dbfcdxax lib dbfaxs,axscomm,clipper,extend,terminal

 

...

Quer ler esse conteúdo completo? Tenha acesso completo