[Cascavel-pm] Perl DBI -> Access

Luciano Giordani Bassani lgbassani em terra.com.br
Terça Abril 11 05:42:31 PDT 2006


Olá!


Eu tenho uma sistema em mysql, que uma parte dos dados é alimentado pelo 
MS Access. Para fazer a replicação dos dados eu uso scripts em Perl 
usando o OLEDB 4.0 por meio do ADO (o script roda em uma máquina 
windows) e foi onde eu consegui a melhor performance.

Sinceramente não acho que tu vais conseguir bons resultados acessando o 
MS Access do GNU/Linux. Não sei como isso está agora, mas na época que 
eu fiz a pesquisa para implementar os scripts de replicação de dados, eu 
desisti de usar o Linux depois de tentar varias maneiras.

O grande problema do MS Access é que ele não é um SGDB, mas sim um 
grande arquivo texto-proprietário. Isso tem algumas vantagens e muitas 
desvantages.

Entre as desvantagens, posso citar: gera um tráfego gigantesco na rede, 
quando existe mais de uma máquina cliente acessando a base de dados 
(quando esta base de dados está grande), o sistema se torna vunerável a 
possíveis corrupções, pois reina uma anarquia controlada (toda as 
máquinas metem a mão na base de dados, mas ninguém controla isso de 
fato), as tuas dores de cabeça em gerenciar o MS Access aumetam 
geometricamente conforme o número de máquinas clientes aumenta.

Existem vantagens também, como por exemplo, uma consulta única é 
infinitamente mais rápida nele. Quando se usa vários clientes acessando 
a base de dados, vc tem um sistema com processamento distribuído (mas 
haja banda de rede para dar suporte a isso), etc.

Bom, agora vamos aos fatos:
Na época que eu tentei acessar direto um banco de dados em Access pelo 
Linux eu não consegui, pois o GNU/Linux não sabe ler os arquivos do MS 
Access, mesmo que tu tenha um ODBC instalado na máquina, não vai 
adiantar de nada, pois vc vai precisar de algum programa que consiga ler 
isso. O oledb, o ado, etc são implementações que só rodam no Windows, 
por isso a interface DBI deles não vão funcionar no GNU/Linux. Talvez tu 
até consiga fazer isso rodar via wine ou usando alguma ferramenta 
proprietária, mas tu vai perder tempo com algo que não vale a pena.

Em relação a acessar remotamente esta base de dados, também não vai ser 
possível, pois o MS Access não é um SGDB. Tu até vai conseguir 
configurar o ODBC na máquina Windows onde está a tua base de dados, mas 
tu vai ver que não existe nenhum parâmetro para vc conseguir acessar 
esta base de dados externamente.

Contudo a tua tarefa não é impossível. Eu diria que existem 3 maneiras 
de tu fazer isso de forma satisfatória, sem ficar careca:

1 - Tu implementar uma base de dados na tua máquina GNU/Linux (pode ser 
mysql, postgresql, o que tu quiser) e fazer replicação dos dados do MS 
Access para ela (e vice-e-versa) usando scripts em perl ou qualquer 
outra ferramente de replicação que permita isso. Eu uso este método e 
funciona bem, mas requer que tu faça um controle diferenciado, como por 
exemplo criar tabelas de saída de dados ou implementar um sistema de 
auditoria para saber qual dado deve ser replicado para onde.

2 - Implementar um servidor web na tua máquina windows (de preferência 
Apache ;-)  ) e colocar todos os teus scripts Perl de manipulação de 
dados lá. Esta é a solução mais fácil, mas pelo fim tu vais acabar 
fazendo tudo no Windows com isso, pois vai sobrar pouca coisa para a 
máquina GNU/Linux fazer. Cuidado com esta solução, pois para coisinhas 
simples, base de dados pequenas, etc, ela vai funcionar muito bem, pois 
o Perl no Windows funciona 100%, contudo se tua base de dados aumentar 
muito e se tiver muitas consultas ao teu Access, tu vai começar a 
entender pq todo mundo diz que o Access não é recomendável.

3 - Usar o DBD::Proxy. Não sei exatamente como ele funciona, mas sei que 
tu vais ter que implementar um script na tua máquina Windows que lê o MS 
Access e atende as requisições de outro script na máquina GNU/Linux. 
Esta solução complica, também, quando tem muitas consultas ao mesmo 
tempo em uma base de dados grandes (base de dados grande, em termos de 
MS Access, significa uns 300MB no arquivão deles), mas é mais leve do 
que a segunda solução.


Acho que o texto ficou meio longo, mas é que gosto de defender meus 
pontos de vista... Contudo, vamos fazer um resumo para ficar mais fácil. 
Vou ser bem direto...

R1 = OLEDB, ADO, ODBC, entre outros. Todos só rodam no Windows.

R2 = Nenhum. Se tu quiser acessar no GNU/Linux direto, vai ter que usar 
um script de replicação ou então o DBD::Proxy

R3 = Remotamente, não, pois a máquina que estiver com o ODBC configurado 
vai ter que saber "falar a língua nativa" do MS Access (remoto, neste 
caso, só se o arquivão mdb estiver em uma pasta compartilhada, eh, eh, eh)

R4 = Bom, não sei dos outros, mas eu fiz uma integração de dados usando 
replicação com Perl e mysql para um cliente nosso. O sistema está 
rodando no endereço www.couronet.com.br mas precisa de senha para 
acessar. É um sistema fechado apenas para os clientes da empresa que nos 
contratou.



SDS,

Luciano





Ednardo Lobo escreveu:

>Pessoal,
>
>Estou em vias de iniciar um projeto onde necessitarei acessar uma base 
>de dados Microsoft Access por meio de DBI ou de alguma outra API 
>disponível para Perl. O script será executado em um servidor Linux de 
>onde conectará em um servidor Windows para ler e escrever nas tabelas de 
>um BD Access.
>
>Necessito trocar informações com pessoas que tenha alguma experiência 
>com Access, com o objetivo de não só verificar a viabiabilidade de 
>realizar tal procedimento, mas também de compilar um mini tutorial a ser 
>publicado aqui na lista ou em algum site da comunidade.
>
>Incialmente necessito das seguintes informações:
>
>1) Quais os drivers existente para acesso ao Access?
>
>2) Desses, qual o mais recomendado parar ser utilizado em Linux?
>
>3) O acesso pode ser feito via ODBC?
>
>4) Pessoas/empresas que já realizaram isto?
>
>
>Grato,
>
>  
>


Mais detalhes sobre a lista de discussão Cascavel-pm