OpenOffice.org 2 Base

Progetto Biblioteca con OOo 2 Base v. 2.3

Un esempio mediamente avanzato su Piattaforma Windows - Linuxware


E' ONLINE LA VERSIONE REMIX DELLA BIBLIOTECA CON OPENOFFICE.ORG BASE 3

Aggiornamenti dalla versione 2.2

Nella attuale versione 2.3 ho affrontato il problema della costruzione di una sorta di menù per poter accedere alle varie maschere o altro (report). Inoltre, per completare il progetto ho affrontato il problema dei report o rapporti o formulari che ho risolto con la "vecchia maniera" del collegamento dinamico ad uno o più fogli elettronici. Nelle prossime versioni tenterò di costruire una macro (tipo autoexec) per far aprire automaticamente una determinata maschera con un menù autonomo.

Aggiornamenti dalla versione 2.1

Ingenuamente, nella versione 2.1 le macro del progetto Biblioteca erano incorporate in una libreria del gruppo Macro Personali. Stranamente e al contrario delle macro incorporate in un documento qualsiasi di Openoffice.org 2, quando il file biblioteca.odt viene spostato su un altro computer non si porta dietro le macro incorporate e quindi ho dovuto affrontare il problema di come fare a trasportare le macro del database da un computer ad un altro.

Dopo estenuanti ricerche sul web ho trovato una soluzione. Forse non è quella canonica ma FUNZIONA!.

Dove scaricare la versione italiana di OpenOffice.org 2 ?

 

Partiamo dall'obiettivo finale
Database

Tabelle

Relazioni

Dati

Query

Forms

Maschera libri

1° problema

2° problema

Ricerca

Pulsanti e Macro

Esportazione ed importazione delle macro

Ultimi ritocchi

Costruire un menu

Report

Download

Premessa

Questa miniguida non è per chi inizia da zero ma non è neanche esaustiva. E' basata su un esempio mediamente avanzato nel senso che viene affrontato il problema delle tabelle con relazioni, delle sottomaschere collegate, dei campi di tipo combo, dei pulsanti,  delle macro, del menu e dei report. Il minimo indispensabile per poter parlare di DATABASE e per poter competere con il rivale a codice chiuso e a pagamento MS ACCESS. Non ultimo viene introdotta un minimo di grafica.

* Avvertenza - per il corretto funzionamento di questo e di tutti i database è necessario registrarli nel proprio computer cliccando su Strumenti -> Opzioni -> OpenOffice.org Base -> Database -> Nuovo  -> Sfoglia e poi indicare il database da registrare ed un eventuale nome per identificarlo.

* Avvertenza - per poter utilizzare le macro si deve installare la libreria esterna allegata al progetto, come spiegato in seguito

Chi avesse difficoltà a reperire una copia di Openoffice.org 2 può riceverla dal Centro Servizi Informativi del Comune di Campagnano di Roma in cambio di n. 2 CD ROM vuoti. mail: informatica@comunecampagnano.it

 

Partiamo dall'obiettivo finale : la maschera dell'archivio biblioteca | back

L'obiettivo finale di questo progetto (alla versione 2.2 ovvero la seconda con OOo 2 base) è quello di creare una maschera per l'immissione e la ricerca di dati in un database RELAZIONALE ovvero un archivio con più tabelle collegate tra loro. L'archivio esemplificativo è quello di una BIBLIOTECA, il motore del database è quello proprio di Openoffice.org base ovvero HSQL. La sperimentazione prevede un minimo di GRAFICA, l'uso di PULSANTI e quindi di MACRO.

=-~°~-=

DATABASE | back

Dopo aver scaricato ed installato la versione italiana di OpenOffice.org 2 e dopo aver aperto l'applicazione OpenOffice.org Base apparirà un pannello generale dove si può scegliere di creare un database nuovo, cliccando su avanti e poi su fine si può salvare il file con un nome tipo biblioteca nella cartella desiderata. Il file avrà la tipica estensione dei database di Openoffice.org 2 base ovvero biblioteca.odb.

=-~°~-=

TABELLE | back

Le tabelle del database sono 4: una tabella principale LIBRI e tre secondarie collegate alla principale: AUTORE, GENERE e LINGUA. La struttura, completa di chiave primaria e contatore dove necessario, delle tabelle è mostrata nella seguente figura.

Struttura della tabella LINGUA:

Struttura della tabella GENERE:  

   

     

Struttura della tabella AUTORE:

 

Struttura della tabella LIBRI:   

 

       

 =-~°~-=

RELAZIONI | back

I campi correlati delle tabelle e le RELAZIONI tra la tabella principale e le tre secondarie sono mostrati in figura

 

 =-~°~-=

DATI | back

Aprire la tabella autori e immettere due o tre autori con le rispettive date e luoghi di nascita e morte (se morti)

Aprire la tabella lingua e immettere due o tre lingue

Aprire la tabella genere e immettere due o tre generi

=-~°~-=

QUERY (RICERCHE) | back

Per ogni tabella viene creata una query (tramite procedura guidata) contenente tutti campi, ogni query ordina la tabella corrispondente per uno o più campi in maniera crescente:

nome tabella nome query 1° campo ordinato 2° campo ordinato
genere Q_genere genere  
lingua Q_lingua lingua  
autore Q_autore autore  
libri Q_libri autore titolo

=-~°~-=

FORMS (MASCHERE - FORMULARIO) | back

Utilizzando la "Procedura guidata", con pochi click si creano le maschere Q_genere, Q_lingua e Q_autore basate sulle rispettive Query che a loro volta ordinano le rispettive Tabelle. Notare che le forms - maschere- formulari sono nel formato tabellare (aspetto simile ad una tabella)

 

     
 =-~°~-=

MASCHERA LIBRI | back

La maschera libri deve contenere i 4 campi genere, lingua, autore e titolo ma in effetti si dovrà digitare solo il titolo in quanto le informazioni relative agli altri 3 campi sono state gia registrate nelle relative tabelle.  Quindi una volta digitato il titolo sarà sufficiente selezionare il valore da inserire da un apposito campo a finestra chiamato combo.

 

1° problema: Come fare se il valore da inserire nel nuovo record non è presente tra quelli disponibili nel COMBO? | back

In questo caso tramite un pulsante collegato ad una macro si aprirà la maschera basata sulla query della relativa tabella i valori della quale hanno popolato il COMBO. In questo modo si potrà aggiungere il valore mancante nella tabella e quindi nella query e quindi nel combo, previa aggiornamento della maschera con un altro pulsante di sistema.

Sequenza delle operazioni

1) nuovo record 2) apro il combo genere e non trovo il valore 3) clicco sul pulsante aggiungi un genere 7) aggiorno la maschera principale

4) si attiva la macro

5) si apre la maschera genere

6) aggiungo il valore mancante

 2° problema: Come fare se il valore da inserire nel nuovo record è solo uno di una serie di valori presenti nella tabella collegata? | back

Questo caso, abbastanza frequente, si risolve aggiungendo alla maschera principale una sottomaschera che contiene tutti i dati secondari relativi al campo principale che è collegato alla maschera principale. E' il caso dell'autore. Nella maschera principale c'è un combo che ci permette di selezionare univocamente un autore per nome e cognome. Però la tabella collegata AUTORE contiene altre informazioni come luogo e data di nascita e morte. Il combo mostra solo il valere "nome e cognome" ma aggiungendo la sottomaschera basata sulla query e quindi sulla tabella AUTORE potremo vedere sulla maschera anche le altre informazioni.

 =-~°~-=

RICERCA | back

Lo strumento di ricerca sempre disponibile perchè di sistema è il cannocchiale che si trova in basso a sinistra della maschera. Cliccandolo si apre un pannello dove si può cercare qualunque cosa su qualunque campo della maschera.
Un altro modo, più elegante consiste nell'inserire un "campo di controllo tabella" nella maschera. Questo campo di controllo mostra la query sulla quale è basata la maschera e quindi tutti i record. Dato che la query ordina tutti i dati in modo crescente per autore e poi per titolo è molto semplice verificare se un dato libro di un dato autore è presente nell'archivio o meno spostandosi con il cursore. E' da notare la corrispondenza del record nella tabella con il record della maschera.

 =-~°~-=

PULSANTI e MACRO | back

Il primo problema (di cui sopra) è stato risolto con l'uso di pulsanti e macro. Il pulsante si inserisce nella maschera semplicemente cliccando sulla barra degli strumenti la seguente immagine , poi si assegna una macro nell'evento "durante l'esecuzione" della scheda "eventi" delle proprietà del pulsante.

Ovviamente bisogna aver preparato in precedenza la macro che si desidera invocare con la pressione del mouse sul pulsante. Aprire il menu OpenOffice.org Basic

Dal menu Strumenti Macro OpenOffice org Basic si può creare una nuova LIBRERIA di nome Standard1 passando per il menu Organizza macro.  Poi passando per Openoffice.org basic e gestisci e poi library ed in seguito aggiungi, infine cliccando sul file dialog1.xlb oppure su script1.xlb si importa la libreria esterna contenente tutte le macro. Questa libreria appena importata diventa interna e personale, infatti farà parte del gruppo delle "Macro personali". Questa operazione di importazione deve essere ripetuta ogni qualvolta si voglia spostare l'archivio su un altro computer. Le macro che dovremo scrivere per aprire le maschere saranno apri_autori, apri_genere e apri_lingua. Sono tutte contenute nel Module1 della libreria Standard1.

Per scrivere una nuova macro si passa per gestisci e poi per nuovo, si assegna un nome e infine si scrive il codice nel linguaggio BASIC come mostrato in seguito:

REM ***** BASIC *****
Dim oForm
sub main
subDisplayForm("biblioteca.odb","Q_autore")
end sub
sub subDisplayForm(sDatabaseName as string, sFormName as string)
dim mArgs(1) as new com.sun.star.beans.PropertyValue
oDatabase = fnGetOpenDatabase(sdatabaseName)
oConnection = oDatabase.DataSource.getConnection("","")
mArgs(0).name = "OpenMode"
mArgs(0).value = "open" '"openDesign" ' '"openForMail"
mArgs(1).name = "ActiveConnection"
mArgs(1).value = oConnection
oForm = oDatabase.getFormDocuments.getByName(sFormName)
'oForm.visibilityChanged(true)
oDatabase.getFormDocuments.loadComponentFromURL(sFormName, "_blank", 0, mArgs())
end sub
function fnGetOpenDatabase(sDatabaseName as string)
oEnum = StarDesktop.getComponents.createEnumeration
while oEnum.hasMoreElements
oPosDB = oEnum.nextElement
if oPosDB.implementationName = "com.sun.star.comp.dba.ODatabaseDocument" then
msgbox oPosDB.DataSource.name
if right(oPosDB.DataSource.name, len(sDatabaseName)) = sDatabaseName then
fnGetOpenDatabase = oPosDB
exit function
end if
end if
wend
end function

il nome della maschera da aprire Q_autore e il nome del database nel quale è contenuta biblioteca.odb sono indicati sulla terza riga di comando

subDisplayForm("biblioteca.odb","Q_autore")

Analogamente si scrivono le altre due macro e si assegnano agli altri due pulsanti nell'evento  "durante l'esecuzione"

=-~°~-=

ESPORTAZIONE ED IMPORTAZIONE DELLE MACRO | back

Abbiamo detto che bisogna importare la libreria Standard1, contenete tutte le macro dell'archivio biblioteca, nel gruppo delle Macro personali. Il processo di importazione necessita di tre file, tutti in formato xml:

Come creare questi tre files? Per fortuna nella cartella C:\Programmi\OpenOffice.org 2\presets\basic c'è una cartella di nome Standard con i tre files pronti per essere adattati al proprio scopo.

Contenuto di script.xlb:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Standard" library:readonly="false" library:passwordprotected="false">
<library:element library:name="Module1"/>
</library:library>

Contenuto di dialog.xlb:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Standard" library:readonly="false" library:passwordprotected="false"/>

Contenuto di Module1.xba:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Module1" script:language="StarBasic">REM ***** BASIC *****
Sub Main
End Sub</script:module>

Si rinomina script.xlb in script1.xlb    Si rinomina dialog.xlb in dialog1.xlb    Con un editor ASCII si modifica la parola "standard" in "standard1" nei due file .xlb

Nel file module1.xba si sostituisce alla stringa "Sub Main End Sub" il codice basic delle macro. Dato che il modulo è unico il codice delle macro non deve ripetere le stesse routine né le stesse funzioni

Contenuto BASIC delle macro:

Dim oForm
sub Q_libri
subDisplayForm("biblioteca.odb","Q_libri")
end sub
sub subDisplayForm(sDatabaseName as string, sFormName as string)
dim mArgs(1) as new com.sun.star.beans.PropertyValue
oDatabase = fnGetOpenDatabase(sdatabaseName)
oConnection = oDatabase.DataSource.getConnection("","")
mArgs(0).name = "OpenMode"
mArgs(0).value = "open" '"openDesign" ' '"openForMail"
mArgs(1).name = "ActiveConnection"
mArgs(1).value = oConnection
oForm = oDatabase.getFormDocuments.getByName(sFormName)
'oForm.visibilityChanged(true)
oDatabase.getFormDocuments.loadComponentFromURL(sFormName, "_blank", 0, mArgs())
end sub
function fnGetOpenDatabase(sDatabaseName as string)
oEnum = StarDesktop.getComponents.createEnumeration
while oEnum.hasMoreElements
oPosDB = oEnum.nextElement
if oPosDB.implementationName = "com.sun.star.comp.dba.ODatabaseDocument" then
msgbox oPosDB.DataSource.name
if right(oPosDB.DataSource.name, len(sDatabaseName)) = sDatabaseName then
fnGetOpenDatabase = oPosDB
exit function
end if
end if
wend
end function
Dim oForm
sub Q_autore
subDisplayForm("biblioteca.odb","Q_autore")
end sub
Dim oForm
sub Q_genere
subDisplayForm("biblioteca.odb","Q_genere")
end sub
Dim oForm
sub Q_lingua
subDisplayForm("biblioteca.odb","Q_lingua")
end sub

=-~°~-=

ULTIMI RITOCCHI GRAFICI | back

Nella maschera principale è stato inserito un Titolo e delle note con l'editor proprio della maschera, poi sono stati aggiunti un paio di disegni passando per STRUMENTI e poi GALLERY. Le cornici sono state prese dal menu altri campi di controllo. Il risultato finale si pò vede cliccado quì.

=-~°~-=

COSTRUIAMO UN MENU | back

Avendo costruito le macro per aprire le diverse maschere, sembrerebbe logico e facile fare un'ulteriore macro per aprire la maschera principale (libri) e metterle tutte su una nuova maschera introduttiva che potrebbe essere chiamata MENU. Purtroppo c'è un problema. Dalla maschera MENU con tanti pulsanti, associati ognuno ad una macro, tanti quante sono le maschere da aprire va tutto bene ma se dalla maschera MENU si apre la maschera principale LIBRI e poi da questa si apre un'altra maschera per esempio LINGUA e poi si richiude quest'ultima NON si ritorna alla maschera LIBRI ma alla maschera MENU.

L'unica soluzione, al momento, che ho trovato è quella di allungare la maschera principale LIBRI su due schermi, mettere tutti i pulsanti del MENU sulla prima pagina (parte superiore).

 

ed il resto della maschera con tutti i campi e controlli sulla seconda parte dello schermo (parte inferiore)

Noterete che per richiamare schede secondarie e report ci sono dei pulsanti che richiamano le relative macro, mentre per passare alla seconda parte della scheda LIBRI non c'è un pulsante ma un collegamento particolare detto "riferimento incrociato".

Praticamente:

  1. ci si porta con il cursore nella posizione in basso (dove si vuole arrivare cliccando su un collegamento), si scrive una parola tipo "Sezione Scheda", si apre il menu INSERISCI, poi RIFERIMENTO INCROCIATO, poi IMPOSTA RIFERIMENTO, poi si seleziona "Sezione Scheda", poi INSERISCI e poi CHIUDI

  2. ci si porta con il cursore nella posizione in alto (dove si vuole il collegamento cliccabile), si apre il menu INSERISCI, poi RIFERIMENTO INCROCIATO, poi INSERISCI RIFERIMENTO, poi si seleziona "Sezione Scheda", delle 5 opzioni che appaiono a destra si setta a SI "testo di riferimento", poi INSERISCI e poi CHIUDI

Nota: i pulsanti nella parte superiore (MENU) possono essere copiati e incollati dalla parte inferiore (SCHEDA PRINCIPALE)

=-~°~-=

REPORT | back

Per i Rapporti o Report o Formulari esiste una procedura di creazione guidata ma ho trovato due inconvenienti, il primo è la scarsa personalizzazione e/o possibilità di modificare il report a posteriori, il secondo è la difficoltà (al momento) di linkare gli eventuali report sul MENU principale. In poche parole non ho trovato alcuna macro capace di aprire un report.

Per fortuna funziona ancora il vecchio metodo di linkare un foglio elettronico (facilmente formattabile) al database in maniera dinamica.

Praticamente, supponiamo di voler creare un report relativo alla query AUTORI. Dopo aver registrato il database (come spiegato nella premessa) si apre CALC, il programma per i fogli elettronici e si salva un file con il nome "report_autori". Premendo il tasto F4 si apre il pannello "Sorgente Dati" dove appariranno tutti i database registrati sul computer, aprendo poi il database interessato si vedranno due cartelline che una volta aperte mostreranno tutte le tabelle e tutte le ricerche (query).

A questo punto è sufficiente trascinare con il mouse la query Q_autori su una cella del foglio elettronico con questo risultato

 

   

Subito dopo dal menu Dati -> definisci area -> Extra si mette una spunta sulle quattro opzioni e poi si clicca OK. In questo modo abbiamo linkato dinamicamente il foglio elettronico con la query del database. Questo significa che aprendo il foglio elettronico dopo aver lavorato sul database tutte le eventuali modifiche saranno riportate sul foglio elettronico. Dato che l'aggiornamento riguarda solo i dati (praticamente il contenuto del foglio viene ricostruito ad ogni apertura)  e non la formattazione del foglio, ai fini del report si può formattare il foglio elettronico/report secondo i propri gusti e/o necessità. Si può ottenere qualcosa simile a ---->>

 

Ovviamente ad ogni apertura del foglio/report si dovrà rispondere si alla domanda "vuoi aggiornare?"

Con la stessa procedura si possono preparare tutti i report che si vogliono, compreso quello che comprende tutti i report (uno per tabella). Questo report omnicomprensivo può essere utile qualora si volesse stampare tutti i report in un colpo.

   

Ultimo particolare è il link al report che si deve predisporre sul menu.Questo non è un pulsante che richiama una macro per aprire il foglio elettronico, bensì un hyperlink (collegamento web). Ad eempio, una volta scritto sul menu "Report Autori", si seleziona quanto scritto si clicca sul pulsante hyperlink. Nel pannello, dopo aver selezionato documento a sinistra e aver scelto il foglio elettronico navigando sul disco tramite l'icona a forma di cartellina si seleziona "pulsante" nel menu a tendina "forma" si applica e si chiude. Segue immagine:

 


L'archivio biblioteca.odb zippato è scaricabile quì. La cartella zippata contenente i tre files pronti per l'importazione quì.

scarica la versione stampabile di questo documento

Alla prossima puntata!


back

Centro Servizi Informativi del Comune di Campagnano di Roma informatica@comunecampagnano.it

 Augusto Scatolini  copyleft novembre 2005 (tutti i rovesci sono riservati) webmaster@comunecampagnano.it