Collegare Microsoft Access e LibreOffice a MySQL/MariaDB tramite JDBC o ODBC

 

A) JDBC con MYSQL su Linux e MacOS

Operazioni preliminari:

1) per prima cosa andare al sito: https://dev.mysql.com/downloads/connector/j/ e scegliere 'platforms indipendent';
2) scegliere file .zip, fare il download ed estrarlo;
3) copiare il file mysql-connector-java-8.0.18.jar (o altre versioni più recenti) nella directory /usr/lib/jvm/java-xxx-openjdk/jre/lib/ext/ o altra directory analoga (può cambiare secondo la distro usata);
4) aprire un terminale e dare il comando: export CLASSPATH=$CLASSPATH:/usr/lib/jvm/java-xxx-openjdk/jre/lib/ext/mysql-connector-java-8.0.18.jar ;
5) aprire Libreoffice-Base e sotto strumenti-->opzioni--->avanzate dovreste vedere apparire una spunta sotto Oracle jdbc e il percorso del file mysql connector che avete installato. Se non lo vedete o avete problemi di connessione sarà necessario aggiungere di nuovo il path in Libreoffice andando sotto strumenti-->opzioni--->avanzate poi cliccando su 'percorso classe' a destra e poi 'aggiungi archivio' ed infine scegliendo il percorso dove sta il file mysql-connector-java.jar. Tale procedura potrebbe essere necessaria se avete installato il connettore tramite pacchetti binari forniti dalla distribuzione Linux in uso (ad esempio Fedora).

Solo per MacOS: dal punto 1) al punto 2) e poi copiare il file mysql-connector nella directory 'Libreria-->Estensioni'. Aprire LibreOffice e sotto Preferenze--->Avanzate procedere come con il punto 5) cioè scegliendo il percorso Libreria-->Estensioni--> mysql-connector....

Proseguire usando l'opzione 'MYSQL':


1) Aperto Libreoffice-Base creare nuovo database con la scelta 'collega ad un database esistente'  e scegliere nel menu a tendina MySQL poi premere 'successivo' e poi 'connetti con JDBC' e poi vai a 'successivo';
2) Inserire nome del database, identificativo del server (in locale localhost  oppure il suo indirizzo IP) poi cliccare su 'successivo' ed inserire nome user e eventuale password d'accesso al database;
3) verificare la connessione. Qualora appaia probabilmente un errore di Time zone CEST vedere sotto a 'problema noto' per risolvere. Cliccare comunque su 'Successivo' e poi su 'Fine'.
4) Si apre una finestra per salvare il database con un nome e formato  e nella finestra delle opzioni che si apre inserire la spunta 'SI' a registrare database e sua modifica e eventualmente anche per creare tabelle se interessa.

 

Oppure usare l'opzione 'JDBC' in alternativa:


1) Aperto Libreoffice-Base creare nuovo database con la scelta 'collega ad un database esistente' e scegliere nel menu a tendina JDBC  e poi premere 'successivo' e poi 'connetti con JDBC' e poi vai a 'successivo';
2) nella casella URL inserire (dopo jdbc) mysql://localhost:3306/ <nome_database> (cambiare eventualmente 'localhost' con l'indirizzo IP) e poi nella casella sotto 'Classe di driver JDBC' inserire 'com.mysql.jdbc.Driver' oppure il più recente 'com.mysql.cj.jdbc.Driver';
3) Proseguire come l'opzione precedente. Se appare un errore di Time zone CEST vedere sotto.

 .

 

B) ODBC con Windows Access

1) controllare la versione di ACCESS installata se a 32 o 64 bit. Per farlo aprire Access e poi scrivere nella casella Cortana 'gestione attività'. Controllare nelle'elenco dei 'processi---applicazioni' che versione fornisce la riga corrispondente ad Access. E' importante perchè bisogna installare il connettore MySQL corrispondente alla versione, quindi con Office Access 64 bit quello a 64 bit e con altre versioni Office più vecchie quello a 32 bit. Le versioni Access a 32 bit hanno bisogno di Visual Studio 2015 redistributable già installato ed in download da qui: https://www.microsoft.com/it-it/download/details.aspx?id=48145.

2) scaricare la versione desiderata del MySQL-connector da qui: https://dev.mysql.com/downloads/connector/odbc/

3) una volta installata cercare 'strumenti amministrazione' (digitare in Cortana per trovare il tool) --->origini dati ODBC (32 o 64 bit). A seconda di quello che avete installato apritelo e sotto 'DSN di sistema' con 'Aggiungi' selezionate il driver scorrendo le opzioni fino a 'MYSQL ODBC' sia in versione Ansi che Unicode. Scegliete Unicode se non sapete bene cosa fare e si aprirà la finestra dei parametri di connessione. Nella prima casella inserite il nome della connessione, poi selezionate TCP (in genere già abilitato) scrivete localhost (oppure l'indirizzo IP della macchina dove si trova il database) e lasciate il numero porta di default a meno che non l'abbiate cambiato installando MySQL. Inserite user del database MySQL ed eventuale pwd ed infine scegliete il database da collegare. A sinistra cliccate sul tasto 'Test'. Se la connessione è OK dovrete vedere il nome della connssione nell'elenco dei DSN di sistema;

4) Aprire Access e creare un database vuoto, poi aprite 'Dati esterni' sezione 'Importa' --> 'Altro' (le opzioni possono cambiare di posto nelle varie versioni di Office) scegliete l'opzione ODBC database e spuntate l'opzione 'Collega all'origine dati..." poi nella finestra successiva scegliete 'Origine dati computer' e dovreste vedere il nome del vostro collegamento DSN creato. Una volta dato OK selezionate le tabelle del database MySQL che volete collegare e sarete in grado di vedere i record del vostro database MySQL su Windows Access.

 

 

C) JDBC con LibreOffice per Windows

Si presuppone di avere già installato Libreoffice per Windows e Java. La procedura di collegamento prevede come per Linux un MySQL connector Java, da scaricare nella versione .zip 'piattaforme indipendenti' da: https://dev.mysql.com/downloads/connector/j/;
Scompattare il file e copiare il file mysql-connector-java.jar nella directory dove è installato Java su Windows, in genere C:\Programmi\Java\jre\lib\ext poi aprire LibreOffice e sotto 'Strumenti-->opzioni-->avanzate' settare il 'percorso classe' --> 'aggiungi archivio' con il percorso al file suddetto. Creare poi un nuovo database con la procedura già descritta per Linux.

 

 

Problema noto con JDBC e LibreOffice: errore di mancato accesso per problemi di Time zone CEST. In tal caso bisogna:

A) Selezionare il file del database creato in LibreOffice ed aprirlo;
B) andare sotto 'Modifica --> Database --> proprietà' e isotto 'Generale --> nome database' aggiungere questa stringa:?autoReconnect=true&useLegacyDateTimeCode=false&serverTimezone=MST;

C) cliccare 'prova la connessione' ed il problema dovrebbe essere risolto. Usando l'opzione alternativa 'JDBC' per creare la connessione la procedura è identica solo che la stringa va aggiunta nella casella URL dopo il nome del Database (esempio: jdbc:mysql://localhost:3306/<nome_database>?autoReconnect=true&useLegacyDateTimeCode=false&serverTimezone=MST).

 

 Alla fine di queste procedure sarete in grado di gestire a piacimento il database MySQL/MariaDB usando come frontend Access o LibreOffice-Base anche in remoto, sfruttando le possibilità offerte da queste applicazioni gestionali.

Ricordarsi che eventuali firewall, specie se il collegamento avviene tra macchine diverse o in remoto, sono per la stragrande maggioranza la causa di mancate connessioni. Controllare bene quindi le regole del firewall, soprattutto quelle relative alle porte 80 e 3306. Inoltre, altra causa di mancate connessioni  sono spesso le opzioni relative ai privilegi d'accesso al database MySQL/MariaDB. Infine, se avete database MySQL su spazi acquistati da provider e volete connettervi fuori dalla loro rete interna, è molto probabile che non riuscirete a farlo e questo per ovvi motivi di sicurezza (un'eccezione mi pare sia costituita da Netsons). Per esigenze di questo tipo in genere bisogna acquistare VPS o Cloud VPS.

Queste istruzioni valgono (salvo eccezioni) anche usando il fork MariaDB di MySQL come Database. Ad esempio, scaricando il connettore Java JDBC dal sito di MariaDB mariadb-java-client-2.x.x.jar  e se lo si usa al posto di quello di MySQL non dovrebbero esserci problemi, almeno fino alla versione 8 di MySQL perchè da questa i due database perdono in parte la loro compatibilità. Se si rilevano problemi provate a cambiare la classe di driver richiesta da LibreOffice inserendo 'org.mariadb.jdbc.Driver'.