Mi sta capitando, per fortuna o per sfortuna
di dover mettere le mani dentro a database access, dalla mia linux box, per migrazioni dal sistema proprietario a Database aperti (e più performanti! ^_^).
La fortuna è che mi piace fare esperienza! ^_^
Comunque, in qualche ora di ricerca ho fatto fatica a capire come usare ODBC per accedere ai dati, la parte che non ho trovato facilmente è stato come aggiungere driver e datasources (avrò usato le parole sbagliate in google… oppure non c’è molta documentazione indexata dagli spider del motore di ricerca…).
La soluzione mi è arrivata incappando in un post di una mailing list.
Per prima cosa si devono installare questi pacchetti (come riferimento uso la mia ubuntu gutsy):
sudo apt-get install libmdbodbc
Un tool grafico per sfogliare i database mdb:
sudo apt-get install mdbtools
Successivamente si deve aggiungere al file /etc/odbcinst.ini il driver (inteso come libreria condivisa) inerente al driver per MS ACCESS, così da segnalare a odbc come maneggiare i file di tipo mdb:
[MDBToolsODBC] Description = MDBToolsODBCdrivers Driver = /usr/lib/libmdbodbc.so.0 Usage = 1 FileUsage = 1
Ovviamente, occhio al fatto che nella vostra distribuzione lo shared object sia in /usr/lib, sennò cambiate la stringa dopo Driver = in modo che rispecchi la posizione del file nel vostro filesystem.
Ora, supponendo che il file .mdb sia in /home/mionome/Documents/Prova.mdb si deve aggiungere questa sorgente di dati al file /etc/odbc.ini:
[Prova] Description = Prova Sample Database Driver = /usr/lib/libmdbodbc.so.0 Database = /home/mionome/Documents/Prova.mdb
Ora, come prova, si può provare il comando:
isql Prova
che vi metterà in connessione con il database Access specificato nel datasource.
A questo punto, visto che ne ho bisogno in un progetto ruby, devo installare anche i bindings odbc per questo linguaggio:
sudo apt-get install libdbd-odbc-ruby
Che ci permette, sotto irb, di provare il collegamento al database dall’ambiente ruby:
require "odbc" ODBC.drivers ODBC.datasources connection = ODBC.connect "Prova"
Lanciando il comando irb mi trovo nell’ambiente interattivo di ruby, molto comodo per eseguire delle prove; come prima cosa è importante il require “odbc” che carica il modulo ODBC, per sapere se ruby vede i driver e i datasource di odbc (perchè mai non dovrebbe? ^_^) ho provato a richiamare i due metodi statici: drivers e datasources che restituiscono entrambi i rispettivi array (benissimo, vedo effettivamente quelli inseriti nei due file di configurazione), per ottenere l’oggetto database, su cui poi operare attraverso i metodi elencati nelle pagine di Ruby ODBC Reference, devo fare la connessione al datasource giusto (ODBC.connect “Prova” è l’omologo in ambiente ruby di isql Prova).
A questo punto si possono provare le query:
query = connection.prepare("SELECT * FROM PROVA_TABLE")
query.execute.each_hash() { |row| print row.inspect }
query.drop
connection.drop_all
Pubblicato da Gabriele Tassoni
Rotolo, rotolo e ancora rotolo, mi "faccio prendere" da ogni novità e mi imbarco sempre in mille cose più grosse di me... la sfida è la parte divertente... farcela è il premio più ambito.
Mi occupo di Domotica e programmazione agile e web based in vari linguaggi e in più mi sono lanciato, come prof., nell'avventura universitaria... non mi bastavano i casini di tutti i giorni... ^_^











