Changes

Aggiunto pagina dedicata al collegamento di LibreOffice a MariaDB
{{header_it|title=Collegare LibreOffice Base a MariaDB / MySQL| keyword={{Template:keyword_it_libreoffice}}| description=Collegare LibreOffice ad un Database Server esterno | link_page=connect_libreoffice_to_mariadb}}

== '''COLLEGARE LIBREOFFICE BASE A MARIADB / MYSQL''' ==

'''LibreOffice''' è una suite di programmi per ufficio che includono un Word Processor (Write), un foglio di calcolo (Calc), un programma per presentazioni (Impress) e molto altro. '''Base''', uno dei programmi inclusi, consente di gestire i propri dati immagazzinandoli in un database locale ed inoltre di creare e salvare ricerche, maschere per l'inserimento dei dati e stampe di riepilogo. Tutto il necessario per realizzare applicazioni collegate ai dati. Esiste inoltre la possibilità di collegare il programma ad un server esterno per consultare dati condivisi via rete. Nel presente articolo illustrerò come '''collegare Base ad un Database Server esterno utilizzando driver JDBC'''.

=== Introduzione ===
A partire dalla versione 7, '''[https://it.libreoffice.org LibreOffice] Base''' include un proprio database (Relational Database Management System) basato su [http://www.firebirdsql.org '''FireBird SQL''']: un motore relazionale leggero e ricco di funzionalità, con svariate decine di anni di sviluppo sulle spalle. Versioni precedenti, la 6 ad esempio, erano invece basate su [http://hsqldb.org '''Hyper SQL'''] e, prima ancora, '''Adabas D'''. Il programma include da sempre il necessario per collegarsi ad altri RDBMS, sia in maniera nativa che sfruttando l'integrazione con il linguaggio '''Java''' e le sue librerie. Il ricorso ad un database esterno risulta particolarmente conveniente quando diventasse necessario far consultare i dati a più persone o programmi, anche contemporaneamente. '''Quando un'applicazione singolo utente diventa insufficiente un database server ad accesso condiviso dimostra tutta la sua potenza e versatilità'''.

Un collegamento LibreOffice / Database Server ('''R'''elational '''D'''ata'''B'''ase '''M'''anagement '''S'''ystem) consente di:
* '''Creare piccole applicazioni aziendali'''.
LibreOffice consente di creare maschere collegate ai dati per consultarli, inserirne di nuovi o modificare e cancellare quelli esistenti. Grazie all'impiego di linguaggi di programmazione di alto livello consente inoltre di sviluppare automatismi, controlli ed il necessario per un programma gestionale. Il risultato non sarà paragonabile ad un prodotto rifinito, sviluppato da un programmatore professionista, ma un prototipo oppure un programma che tamponi dignitosamente nel breve periodo carenze del software istituzionale.
* '''Amministrare un RDBMS remoto'''.
Ogni Database Server serio offre i propri strumenti di amministrazione integrati, installabili sia localmente che accessibili via rete. LibreOffice non si propone di sostituire tali strumenti, piuttosto di integrarli fornendo un'interfaccia semplice per eseguire operazioni comuni come: creare o modificare tabelle, importare dati da file in formati tabellari quali '''ods''' di Calc o '''csv''', eseguire correzioni di piccoli errori sui dati ed altre semplici operazioni di amministrazione.
* '''Legare i dati estratti a documenti Write o Calc'''.
Capita di dover produrre documenti basati su modelli sempre uguali in cui compilare poche informazioni specifiche. Qualora vi fosse questa necessità, è possibile utilizzare la funzione "'''Stampa in Serie'''" di LibreOffice per legare documenti ai dati estrapolati da un foglio di calcolo o altra sorgente, ad esempio un database. È possibile usare i dati estratti da un database esterno anche per realizzare liste di distribuzione di e-mail e quant'altro.

=== Prerequisiti ===
Esistono sostanzialmente due modi per collegare LibreOffice ad un database esterno:
* Attraverso '''driver specifici''' compilati in apposite librerie ed installati sulla stessa macchina su cui risiede LibreOffice.
* Attraverso le '''estensioni JDBC''' del linguaggio Java: un'interfaccia comune per eccedere ai dati contenuti in svariati database relazionali.
La seconda soluzione è preferibile per una somma di ragioni:
* Prima di tutto la semplicità: non sono richieste operazioni di amministrazione o privilegi elevati nè conoscenze di sistemi operativi. È sufficiente scaricare un file localmente ed informare LibreOffice della sua locazione. Un'operazione che può essere eseguita da chiunque.
* È generica. '''Qualsiasi architettura o sistema operativo per cui sia disponibile una Macchina Virtuale Java può usare JDBC'''. Data la diffusione di Java ed il numero impressionante di dispositivi su cui può girare, si tratta probabilmente della soluzione più universale esistente in informatica.
* Fornisce un eccellente livello di astrazione per cui, se un domani si volesse cambiare il RDBMS che ospita i dati, sarà sufficiente procurarsi un nuovo driver, migrare i dati e configurare il collegamento al nuovo database per ottenere le medesime funzionalità.

Supponendo di volersi collegare ad un RDBMS '''MariaDB''' o '''MySQL''', prima di procedere bisognerà assicurarsi che sulla macchina siano installati sia '''LibreOffice''' che una '''Java VM''' recente. Bisognerà inoltre procurarsi le '''credenziali di accesso''' al database che si desidera interrogare. Un fatto da tenere a mente: '''Base non consente di creare un nuovo database, ma solo di collegarsi ad uno già esistente'''. Il database può essere anche vuoto, ma deve esistere e deve essere configurata un'utenza che possa accedervi. Una volta reperito quanto sopra, bisogna procurarsi i driver JDBC adatti alla versione del RDBMS.

=== Scaricare ed Installare i Driver JDBC ===
I driver JDBC sono solitamente distribuiti in forma di file avente estensione '''jar''', abbreviazione di '''J'''ava '''AR'''chive, un formato usato per le classi ed i programmi scritti nel linguaggio Java. Al contrario di altri formati, gli archivi Java non devono essere "installati", ma è sufficiente copiarli in una directory leggibile dal programma che li andrà a leggere ed usare.

I driver per MariaDB e MySQL possono essere scaricati dai rispettivi siti ufficiali. Data l'origine comune, in passato i driver di un database potevano essere utilizzati anche per l'altro e viceversa. Al momento di scrivere queste righe, MySQL 8 e MariaDB 10.5 hanno preso strade divergenti per cui la considerazione potrebbe non essere più valida. In generale i driver di un prodotto dovrebbero funzionare anche con l'altro, ma non è garantito il supporto completo di tutte le funzionalità.

==== Driver JDBC di MariaDB ====
I driver JDBC di MariaDB sono costantemente sviluppati e nuovi rilasci si susseguono al ritmo di uno ogni paio di mesi. Un elenco completo dei rilasci può essere consultato scorrendo la seguente pagina: [https://mariadb.com/kb/en/mariadb-connector-j-releases Mariadb Connector J Releases] (In inglese). I pacchetti di installazione possono essere scaricati seguendo i collegamenti della [https://downloads.mariadb.org/connector-java/+releases pagina dei download]. La versione da scaricare dipende dalla Java VM installata. Per versioni della JVM minori o uguali alla 7 bisogna scaricare un driver del ramo 1.x, mentre per la versione 8 e successive deve essere selezionato il ramo 2.x. Si raccomanda di scaricare sempre l'ultimo rilascio disponibile che contiene le ultime correzioni e migliorie apportate al codice sorgente. L'ultimo rilascio dovrebbe supportare tutte le versioni disponibili del database server. Solo nel caso in cui si riscontrassero problemi, errori inaspettati o rallentamenti inspiegabili, si consiglia di provare una versione precedente del driver. Molte versioni del medesimo driver possono coesistere sulla stessa macchina. Dato che non è richiesta installazione, più archivi possono essere salvati nella medesima directory o in cartelle diverse. È compito dell'utente o dell'amministratore assicurarsi che LibreOffice selezioni il driver voluto quando si configura il collegamento.

Al momento di scrivere, l'ultimo rilascio disponibile è '''2.7.2''' cui corrisponde il file '''mariadb-java-client-2.7.2.jar'''. Una volta scaricato, il file deve essere copiato in una directory locale leggibile dall'utente o dagli utenti che lo dovranno usare. Se il computer fosse usato da un unico utente, si consiglia di creare una cartella chiamata fantasiosamente ''jdbc'' nella sua directory principale e poi spostarvi l'archivio '''mariadb-java-client-2.7.2.jar'''. Se la macchina fosse accessibile a molti utenti e tutti dovessero collegarsi al database, si consiglia di creare la cartella ''jdbc'' all'interno di una directory di sistema raggiungibile da tutti. Ovviamente, nell'ultimo caso menzionato, l'operazione dovrà essere eseguita da un amministratore che, oltre a creare la directory, dovrà preoccuparsi di assegnare permessi di lettura opportuni alla cartella prescelta ed all'archivio.

Optando per l'uso di una directory di sistema, nel caso il sistema operativo sia della famiglia UNIX come Linux o MacOsX, si consiglia l'uso di ''/opt'', cartella progettata per contenere programmi opzionali non standard. Si sconsiglia invece di far ricorso a ''/tmp'' in quanto tale cartella esiste per i soli dati temporanei ed in alcuni sistemi è mantenuta in memoria RAM ed il contenuto non viene mai scritto su disco. Segue l'elenco dei comandi da eseguire:
'''mkdir''' ''/opt/jdbc''
'''mv''' mariadb-java-client-2.7.2.jar ''/opt/jdbc/''
'''chmod''' 0755 ''/opt/jdbc/''
'''chmod''' 0644 ''/opt/jdbc/mariadb-java-client-2.7.2.jar''

che sono sufficienti per rendere accessibili ed operativi i driver.

==== Driver JDBC di MySQL ====
Valgono le stesse considerazioni esposte per i driver JDBC di MariaDB al paragrafo precedente. I driver per MySQL possono essere scaricati seguendo i collegamenti presenti nella [https://dev.mysql.com/downloads/connector/j pagina dei download]. Al momento di scrivere l'ultima versione disponibile è la '''8.0.23'''. L'archivio jar è distribuito in diversi formati per maggior comodità degli utenti desiderosi di usare un programma di installazione: pacchetti per varie distribuzioni Linux, un eseguibile per i sistemi operativi della famiglia Windows ed alcuni archivi compressi multi-piattaforma. Supponendo di optare per l'ultima voce dell'elenco, si dovrà scegliere un archivio compresso in formato '''zip''', comune in ambiente MicroSoft, oppure '''tar.gz''' molto diffuso in ambiente UNIX.

Supponendo nuovamente di lavorare in un ambiente UNIX e di aver selezionato la directory ''/opt/jdbc'' come destinazione dei driver, i comandi di "installazione" sono:
'''mkdir''' ''/opt/jdbc''
'''tar''' ''-zxf'' mysql-connector-java-8.0.23.tar.gz
'''mv''' ./mysql-connector-java-8.0.23/mysql-connector-java-8.0.23.jar ''/opt/jdbc/''
'''chmod''' 0755 ''/opt/jdbc/''
'''chmod''' 0644 ''/opt/jdbc/mysql-connector-java-8.0.23.jar''

digitati i quali i driver saranno pronti per l'uso. Nel caso si optasse per un pacchetto oppure il programma di installazione, i driver verranno installati in una directory predefinita. Consultare la documentazione dei driver e del proprio sistema operativo per ricavare la locazione dei driver da configurare in LibreOffice.

=== Associare i Driver a LibreOffice ===
Una volta che i driver JDBC siano stati salvati in una cartella di proprietà di un utente oppure in una di sistema, bisogna informare LibreOffice della presenza e della locazione degli archivi che li contengono. Per farlo:
* Avviare il programma principale, non Write, Calc, Base o un altro sottoprogramma.
* Selezionare la voce di menù '''Strumenti → Opzioni''' / '''Tools → Options'''.
* Selezionare la voce '''Avanzate''' / '''Advanced''' in modo da far comparire "'''Opzioni Java'''" / "'''Java Options'''" nella parte destra della finestra delle opzioni.
[[File:Libreoffice option advance.jpeg||Figura 1: Opzioni Avanzate di LibreOffice.]]

* Verificare che sia spuntata la voce "'''Usare un Java runtime environemet'''" / "'''Use a Java runtime environemet'''" e che sia elencata almeno una macchina virtuale nella casella sottostante. In caso contrario potrebbe essere necessario informare manualmente LibreOffice dell'esistenza di Java premendo il pulsante '''Aggiungi''' / '''Add''' e cercando la locazione precisa in cui è installato.
* Premere il terzo pulsante in basso a destra: "'''Percorsi delle Classi'''" / "'''Class Path'''".
[[File:libreoffice_option_class.jpeg||Figura 2: Percorsi.]]

* Premere il pulsante "'''Aggiungi Archivio''' / '''Add Archive'''"
* Cercare e selezionare il file *.jar dei driver.
[[File:libreoffice_option_class_select.jpeg||Figura 3: Ricerca dei File jar.]]

* Premere il pulsante "'''OK'''".
* Premere il pulsante "'''OK'''" nella finestra dei parametri.
* Riavviare LibreOffice.

Al successivo avvio LibreOffice potrà usare il driver registrato per collegarsi a database server.

L'operazione deve essere eseguita per tutti gli utenti dato che le configurazioni sono personalizzate.

=== Creare un Database ===
Come anticipato LibreOffice non può creare nuovi database, ma solo collegarsi a quelli esistenti. Ciò implica che la sorgente dei dati debba essere creata preventivamente con altri mezzi:
* '''PhpMyAdmin''': Interfaccia web.
* '''mysql''': Il client per l'interfaccia testuale a riga di comando.
* Una delle mille applicazioni grafiche che consentono di amministrare database server sia locali che remoti.
Supponendo di voler creare un database chiamato "presenze" e di assegnare privilegi amministrativi all'utenza omonima, le istruzioni da eseguire via riga di comando saranno:
'''mysql''' ''-u'' root ''-p''
<syntaxhighlight lang="sql">
CREATE DATABASE `presenze`;
CREATE USER `presenze` IDENTIFIED BY '<password>';
GRANT ALL ON `presenze`.`*` TO 'presenze';
</syntaxhighlight>

con cui si creer&agrave; un nuovo database vuoto e l'utenza amministrativa che useremo in seguito per configurare il collegamento via LibreOffice. Impostare la password prescelta al posto di <password>.

=== Configurare e Testare il Collegamento ===
Quando sia il database che le credenziali di accesso sono disponibili &egrave; possibile dedicarsi alla configurazione del collegamento del modulo '''Base''' al server. La stringa di collegamento &egrave; l'unico argomento che differenzia MariaDB da MySQL, come verr&agrave; sottolineato al momento opportuno. I passi da seguire sono:
* Aprire il programma Base di LibreOffice richiamandolo da men&ugrave; oppure eseguendo un doppio click sull'apposita icona porpora.
* All'avvio il programma chiede se creare un nuovo database, aprire un file database esistente oppure collegarsi ad uno esterno.
[[File:libreoffice_database_select.jpeg||Figura 4: Selezione di un Database.]]

* Si selezioni la terza opzione impostando MySQL anche nel caso di un server MariaDB e premendo poi "'''Next'''" / "'''Avanti'''".
[[File:libreoffice_database_connect_001.jpeg||Figura 5: Procedura di Collegamento - Passo 1.]]

* Imporre l'uso dei driver JDBC selezionando la seconda opzione dell'elenco.
[[File:libreoffice_database_connect_002.jpeg||Figura 6: Procedura di Collegamento - Passo 2.]]

* Configurare i parametri di collegamento che consistono nel nome del database, nell'indirizzo IP oppure nel nome del server e nella porta corrispondente al servizio. Nell'esempio si &egrave; usato "presenze" come nome del database, localhost, cio&egrave; la macchina locale, come indirizzo del server ed infine la porta 3306 che specifica un server MariaDB / MySQL. Impostare i parametri pi&ugrave; indicati per la propria rete.
[[File:libreoffice_database_connect_003.jpeg||Figura 7: Procedura di Collegamento - Passo 3.]]

Nella cella "'''Classe di driver JDBC'''" / "'''MySQL JDBC driver class'''" a destra in basso impostare:
* org.mariadb.jdbc.Driver per un server MariaDB.
* com.mysql.jdbc.Driver per un server MySQL.
facendo attenzione alle lettere maiuscole.

* Impostare le credenziali di accesso. L'utenza "presenze" nel campo "'''Nome Utente'''" / "'''User Name'''" e spuntare il flag "'''Password richiesta'''" / "'''Password required'''". Eseguire un test di collegamento premendo l'apposito pulsante. Verr&agrave; richiesto di scrivere la password associata all'utenza "presenze" usata nell'esempio. Nel caso tutto sia stato configurato a dovere verr&agrave; mostrato un messaggio di successo, altrimenti un errore.
[[File:libreoffice_database_connect_004.jpeg||Figura 8: Procedura di Collegamento - Passo 4.]]

La cause pi&ugrave; probabili di errore sono la password errata oppure un parametro mal configurato. Ripetere i passi di configurazione controllando tutti i valori immessi &egrave; la migliore soluzione. Maggiori dettagli potrebbero essere riportati nel messaggio di errore stesso.

* Salvare la configurazione. Base necessita un nome per il file avente estensione '''odb''' in cui saranno salvati i parametri di collegamento e gli eventuali oggetti creati come ricerche, maschere, ecc. Una volta creato, il file potr&agrave; essere aperto ogni qual volta sia necessario collegarsi al database.

=== Collegarsi al Database ===
Per sfruttare il file creato al paragrafo precedente bisogna per prima cosa aprirlo mediante doppio click del mouse. All'apertura Base mostrer&agrave; la schermata principale consistente in una barra a sinistra contenente le tipologie di oggetto contenute nel file e due pi&ugrave; ampie finestre a desta separate verticalmente. La finestra pi&ugrave; in alto contiene le procedure di creazione degli oggetti mentre quella sottostante contiene l'elenco degli oggetti creati e salvati in precedenza. Selezionando un oggetto o una tipologia di oggetti verr&agrave; richiesta la password per collegarsi al database:
[[File:libreoffice_database_auth.jpeg||Figura 9: Autenticazione.]]

Dopo aver fornito la password di accesso si potr&agrave; accedere agli oggetti contenuti nel database ed avviare le procedure di creazione.

=== Una Breve Descrizione degli Oggetti ===
Un file '''odb''' contiene 4 tipologie di oggetti:
* '''Tabelle''' / '''Tables''': Le sorgenti dei dati. Nel caso di database collegato, le tabelle non contengono i dati reali, ma solo la definizione dei collegamenti attraverso cui leggerli.
* '''Query''' / '''Queries''': Interrogazioni salvate. Quando si ripete una ricerca molto spesso conviene salvarla in modo da non doverla riscrivere ogni volta.
* '''Maschere''' / '''Forms''': Maschere di inserimento dei dati. Possono essere create facilmente con l'apposita procedura guidata e personalizzate usando un opportuno linguaggio di programmazione.
* '''Stampe''' / '''Reports''': Stampe compilate aggiungendo dati estratti dal database ai modelli creati.

Selezionando una classe di oggetti compariranno i collegamenti alle procedure guidate per crearne di nuovi. '''Quando si crea una nuova tabella bisogna sempre ricordarsi di assegnarle una chiave primaria''' altrimenti Base non sar&agrave; in grado di consultare o modificare i dati correttamente. Una '''chiave primaria''' &egrave; un identificatore univoco per una riga di una tabella.

=== Alternative ===
Esistono delle alternative valide all'uso di JDBC per collegarsi ad un database ? Una riposta esaustiva richiederebbe svariati articoli. In sostanza possiamo dire che dipende da molti fattori tra cui l'ambiente su cui si sta sviluppando l'applicazione, il linguaggio impiegato, l'architettura, il sistema operativo e molto altro ancora.

Una prima alternativa &egrave; rappresentata dalle '''librerie di collegamento fornite dai produttori di RDBMS'''. Dette librerie devono essere scritte nel linguaggio con cui si intende sviluppare ed &egrave; raro che gli sviluppatori di database supportino tutti i linguaggi di programmazione esistenti. Inoltre le librerie devono essere installate. Nuovamente, gli sviluppatori di database non supportano tutti i sistemi operativi e tutte le potenziali architetture, ma solo quelle su cui hanno convenienza. Per ultimo le librerie sono proprietarie e raramente gratuite. Quando esistono, hanno l'oggettivo vantaggio di supportare la maggioranza, se non la totalit&agrave;, delle funzionalit&agrave; offerte dal RDBMS e spesso garantiscono prestazioni migliori. Il tutto al prezzo della genericit&agrave; che una soluzione come JDBC garantisce.

Una seconda alternativa, disponibile quasi esclusivamente per Windows, consiste nei '''driver ODBC''' che, dal punto di vista pratico, si avvicinano molto a JDBC. Non tutti i produttori di database server forniscono driver ODBC per i loro prodotti e, quando lo fanno, spesso trascurano piattaforme diverse da Windows. I driver ODBC hanno inoltre il problema di dover essere installati e configurati da un amministratore per la piattaforma specifica. Possono esserci differenze tra le versioni a 32 o 64 bit e spesso tutta la catena da driver a applicazione deve supportate la medesima versione per evitare conflitti. Hanno gli stessi svantaggi delle librerie proprietarie senza condividere i vantaggi prestazionali o in termini di funzionalit&agrave; supportate.

Un'ultima soluzione, che cito per sola completezza, consiste nel '''Borland DB Engine''': una "alternativa" a ODBC sviluppata da uno storico rivale di MicroSoft. La tecnologia &egrave; stata dichiarata definitivamente morta nel 2014, ma capita ancora di trovare applicazioni basate su di essa. Purtroppo condividono gli stessi problemi della tecnologia ODBC che si proponevano di sostituire. Non sono comunque una tecnologia supportata da LibreOffice e pertanto inutile ai fini dell'articolo.

=== Back-up ===
Prima di concludere, un avviso inerente la sicurezza dei dati. Un database salvato localmente ha il vantaggio di poter essere copiato facilmente: una copia del file '''odb''' rappresenta un back-up consistente e puo' essere usata per un ripristino completo nel caso l'originale andasse cancellato o risentisse di una corruzione. Quando ci si collega ad un database remoto bisogna tenere in considerazione che localmente sono salvati gli oggetti e la definizione dei dati, ma non i dati stessi. Un back-up consistente deve prevedere sia il file '''odb''' che una copia dei dati estratta dal database server. Si consiglia di consultare la documentazione del RDBMS installato per imparare ad estrarre una copia consistente dei dati necessaria in caso di ripristino completo.


== CONCLUSIONI ==

Nell'articolo &egrave; stata descritta la procedura per '''collegare il modulo Base di LibreOffice ad un database esterno mediante l'ausilio di driver JDBC'''. Per gli esempi ci si &egrave; appoggiati su MariaDB e/o MySQL, due database relazionali molto diffusi e ricchi di funzionalit&agrave;, ma la procedura esposta &egrave; universale e pu&ograve; essre usata con qualsiasi altro RDBMS disponibile sul mercato: '''Firebird''', [[virtualbox_installare_mssqlserver_su_centos#Installare_un_Client_di_Amministrazione_/_Sviluppo | '''Ms SQL Server''']], '''Oracle''', '''PostgreSQL''', '''SyBase''', ecc. Funziona con qualsiasi sistema operativo della famiglia Linux, MacOsX o Windows ed &egrave; indipendente dall'architettura sia essa a 32 o 64 bit. L'uso congiunto di LibreOffice e di un RDBMS consente di sfruttare tutta la potenza e la fressibilit&agrave; di un database relazionale condiviso via rete con un'interfaccia grafica semplice ed intuitiva.


Per commenti, consigli, domande inviate una e-mail all'indirizzo ''studiosg [chiocciola] giustetti [punto] net''.


Link esterni

----

* [http://www.firebirdsql.org Home page di FireBird SQL (In inglese)]
* [http://hsqldb.org Home page di Hyper SQL (In inglese)]
* [https://it.libreoffice.org Home page di LibreOffice]
* [https://it.wikipedia.org/wiki/JDBC Pagina di Wikipedia dedicata a JDBC]
* [https://mariadb.org/ Home page di MariaDB (In inglese)]
* [https://www.mysql.com/it/ Home page di MySQL]


----

{{footer_it | link_page=connect_libreoffice_to_mariadb}}