[Roma.pm] cestinando windows sui server...

Emanuele Zeppieri ema_zep at libero.it
Wed Jan 31 14:35:06 PST 2007


> -----Original Message-----
> From: roma-bounces+ema_zep=libero.it at pm.org 
> [mailto:roma-bounces+ema_zep=libero.it at pm.org] On Behalf Of 
> Marco Balestra
> Sent: Wednesday, January 31, 2007 10:35 AM
> To: roma at pm.org
> Subject: [Roma.pm] cestinando windows sui server...
> 
> 
> Il primo passo è fatto, un server linux gira nella mia azienda e con  
> Apache + Perl CGI (che usano WriteExcel) svolge in pochi secondi  
> compiti che prima richiedevano decine di minuti con la preesistente  
> (rigida) soluzione ASP + VBA + MSSQL.

Bravo e grazie! :-)
Oltre ad aver reso un servizio alla tua azienda, hai anche contribuito
(ancora una volta) alla diffusione di Perl, che de 'sti tempi di
accerchiamento da parte di Java da un lato, di .NET dall'altro, di
Python da sopra e di Ruby da sotto, è una cosa quanto mai utile.

> Ora mi sto preparando al prossimo passo: presumibilmente 
> dovrò essere  
> in grado di leggere file di Askia (ovvero dei file di MSAccess  
> rinominati in .QES) ed estrarne i dati per poterli aggregare in file  
> Excel.
> 
> Mi sono fatto il solito giretto su CPAN e su google, quello che mi  
> frena da una soluzione basata su ODBC è che in realtà dovrei  
> uploadare dinamicamente dei file di MSAccess da parsare al volo.  
> Vista (wow!) la summa delle esperienze qui presenti, qualcuno di voi  
> ha già sperimentato una soluzione decente per un simile compito?

Allora, standoci (o meglio essendoci stato) dentro fino al collo, te
dico le varie soluzioni sperimentate nel corso degli anni.

1.
Esportazione del file mdb in file di testo: Access permette di farlo
piuttosto facilmente (sia in formato CSV che con campi a lunghezza
fissa), mediante una cosiddetta "specifica di esportazione", che si crea
con Access medesimo a colpi de mouse, e che poi è utilizzabile da VBA.
OK, probabilmente *non* è quello che serve a te, ma lo cito per
completezza e perché è la soluzione che stiamo adottando per lavoro
proprio adesso, in una situazione del tutto simile alla tua: dobbiamo
prendere il back-end di una nota applicazione in uso in ambito
medico-ospedaliero, che alla fine è una volgare applicazione VBA, che
esporta il back-end anche in formato testo. Magari controlla se la tua
"Askia" può fare altrettanto, potresti risparmiarti un sacco di ca...
Ehm, di pruriti nel fondo schiena.

2.
Se fossi sotto Windows, potresti connetterti al db access (ovvero al
file mdb) via DBI mediante DBD::ADO:
http://search.cpan.org/~sgoeldner/DBD-ADO/

L'ho usato e va benissimo ma, come detto, gira solo sotto Windows, per
cui tu dirai: che me lo stai a di' a fa'?! Perché può tornare utile
nello scenario 4 sotto descritto...

3.
Tutto sotto Linux, senza alcuna contaminazione con Windows.
In questo caso corri a scaricare gli mdbtools:
http://mdbtools.sourceforge.net/

dei quali puoi servirti un 2 diversi modi:

3A.
Ti connetti al file mdb via DBI mediante DBD::ODBC, sfruttando il driver
ODBC per *nix incluso negli mdbtools. Ricordo che a suo tempo dovetti
bestemmiare un po', ma alla fine funzionò a dovere (essendo passato del
tempo, gli mdbtools si sono evoluti e magari ora anche il set-up sarà
più semplice).

3B.
(Meglio) sfrutti il tool di conversione di mdbtools (magari
automatizzandone l'uso con apposito scriptino Perl) che importa i dati
del file mdb in un db tipo PostgreSQL o MySQL, così ti ritrovi i dati
direttamente dentro un db-server al quale potrai accedere via DBI (sotto
Linux) senza alcun problema. Con questa soluzione, in pratica, il file
mdb non lo vedi proprio e cominci a lavorare direttamente con un db
"serio".

4.
Soluzione mista: la tua applicazione Perl gira sotto Linux, ma il file
mdb lo lasci sulla macchina Windows.
Se questa strada fosse per te praticabile, si può implementare facendo
girare dbiproxy.pl (e quindi DBI::DBI::ProxyServer)
http://search.cpan.org/~timb/DBI/dbiproxy.PL
http://search.cpan.org/~timb/DBI/lib/DBI/ProxyServer.pm

sulla macchina Windows: dbiproxy si connette al file mdb locale mediante
DBD::ODBC o DBD::ADO, e tu da Linux ti connetti al proxy (mediante
DBD::Proxy).

Il vantaggio di questa soluzione è che salti a pie' pari il
treasferimento del/dei file mdb dalla macchina Windows alla macchina
Linux, che anche quello può essere una rogna, se lo devi schedulare.
Lo svantaggio è che richiede un'applicazione aggiuntiva (dbiproxy.pl) in
esecuzione (e quindi da amministrare) sulla macchina Windows.

Insomma, in un modo o nell'altro alla fine se fa, tutto (o quasi) con
Perl ;-)

Se incontri problemi specifici, fammi sapere.

Ciao,
Emanuele.



More information about the Roma mailing list