You are on page 1of 39

OpenOffice.

org 3 Base
Progetto Biblioteca REMIX OOo 3 Base v. 3.02 dicembre 2008
Augusto Scatolini webmaster @comunecampagnano.it

Un esempio completo con codice e macro per aprire e chiudere form, aprire report, immagini, autoexec, prestiti

Pag. 1 di 39
OpenOffice.org 3 Base
Progetto Biblioteca REMIX OOo 3 Base v. 3.02 dicembre 2008
Augusto Scatolini webmaster @comunecampagnano.it
Un esempio completo con codice e macro per aprire e chiudere form, aprire report, immagini, autoexec, prestiti

CHANGELOG

Versione attuale 3.02 (dicembre 2008)

Aggiornamenti dalla versione 3.1

In questa versione stato aggiunto il prestito bibliotecario, completo di archivio utenti e prestiti, prestiti conclusi e ancora da concluder, libri prestabili e non
prestabili perch il numero delle copie diventato pari a 1. E' stato completato il processo di importazione ed esportazione delle macro. Sono stati aggiunti dei
pulsanti al menu principale per accedere direttamente a delle maschere dove vengono mostrate e spiegate le relazioni tra le tabelle, la struttura del database, il
codice delle macro, la procedura per ripristinare il codice delle macro e le istruzioni per il prestito.

Aggiornamenti dalla versione 3.0

Nella versione 3.01 stato approfondito l'argomento delle macro, dei dialoghi, delle librerie e dei moduli. Particolare attenzione stata posta sul problema
dell'esportazione e successiva importazione delle macro. Per ogni evenienza, vengono presentati due modi alternativi (pi manuali) al metodo classico.

Aggiornamenti dalla versione 2.3

Nella attuale versione 3.0 ho affrontato il problema della costruzione del men principale, dell'inserimento di immagini nei record, della costruzione dei report,
delle varie macro per gestire maschere e report inclusa la macro equivalente ad Autoexec di MS Access e della macro per chiudere l'applicazione. Inoltre
spiegato come ripristinare il codice delle macro quando si trasferisce il database da un PC all'altro.

Aggiornamenti dalla versione 2.2

Pag. 2 di 39
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 3 ?

Pag. 3 di 39
01 Partiamo dall'obiettivo finale Premessa
02 Database
03 Tabelle
04 Relazioni
Questa guida non per chi inizia da zero ma non neanche esaustiva. E'
05 Dati basata su un esempio mediamente avanzato nel senso che viene affrontato il
06 Query problema delle tabelle con relazioni, delle sottomaschere collegate, dei campi
07 Forms di tipo combo, dei pulsanti, delle macro, del menu e dei report. Il minimo
08 Maschera libri indispensabile per poter parlare di DATABASE e per poter competere con il
09 1 problema rivale a codice chiuso e a pagamento MS ACCESS. Non ultimo viene
10 2 problema introdotta un minimo di grafica.
11 Ricerca
12 Pulsanti e Macro
* Avvertenza - per la piena funzionalit, intesa come disponibilit dei dati alle altre
13 Macro, Dialoghi, Librerie e Moduli applicazioni di Openoffice.org, di questo e di tutti i database necessario registrarli nel
14 Macro per aprire maschere proprio computer cliccando su Strumenti -> Opzioni -> OpenOffice.org Base ->
15 Macro per chiudere maschere Database -> Nuovo -> Sfoglia e poi indicare il database da registrare ed un eventuale
16 Macro per uscire da OOO nome per identificarlo.
17 Macro equivalente ad Autoexec
18 Macro per aprire report * Avvertenza - per poter utilizzare le macro si deve installare la libreria esterna allegata
19 Associazione pulsante macro al progetto, o usare un metodo alternativo, come spiegato in seguito
20 Esportazione ed importazione delle macro
esportazione/importazione manuale
Chi avesse difficolt a reperire una copia di Openoffice.org 3 pu riceverla
esportazione/importazione con formulario
esportazione/importazione automatica dal Centro Servizi Informativi del Comune di Campagnano di Roma in
21 Maschera Prestiti cambio di n. 2 CD ROM vuoti. mail: informatica@comunecampagnano.it
22 Istruzioni per il prestito
23 Ultimi ritocchi Visti i continui e ripetuti crash di Openoffice.org in fase di costruzione del
24 Costruire un menu database vi consiglio di salvare il lavoro ogni 60 secondi e di procurarvi
25 Report qualcosa per KILLARE l'applicazione come procexp per windows o xkill
26 Download
per GNU/linux.

=-~~-=

Pag. 4 di 39
Partiamo dall'obiettivo finale : Il menu dell'archivio biblioteca | back

Pag. 5 di 39
La maschera principale dell'archivio Biblioteca con 2 foto per ogni record

Pag. 6 di 39
L'anteprima di stampa del Report Biblioteca

Pag. 7 di 39
L'obiettivo finale di questo progetto (alla versione 3.02 ovvero realizzato con OOo 3 base, minor rilascio 02) quello di creare un MENU per gestire i vari oggetti
(maschere e report), una maschera per l'immissione e la ricerca di dati in un database RELAZIONALE ovvero un archivio con pi tabelle collegate tra loro. La
creazione di un REPORT tramite l'estensione SUN REPORT BUILDER, l'uso delle principali MACRO con relativo codice e PULSANTI inclusa la macro
equivalente a AUTOEXEC di MS ACCESS e la macro per chiudere l'applicazione. E' stata anche implementata la possibilit di registrare 2 immagini per ogni
record (la foto dell'autore e la foto della copertina del libro). L'archivio esemplificativo quello di una BIBLIOTECA, il motore del database quello proprio di
Openoffice.org base ovvero HSQL.

=-~~-=

DATABASE | back

Dopo aver scaricato ed installato la versione italiana di OpenOffice.org 3 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 3 base ovvero biblioteca.odb. Come accennato in premessa, l'opportunit di registrare il database
dipende dall'uso successivo che se ne vuole fare del database. Se il database, biblioteca.odb in questo caso, dovr essere utilizzato come fonte dati per altre
applicazioni di Openoffice.org, allora si deve registrare il database, altrimenti non necessario. Se al momento della creazione del database non si sicuri
sull'opportunit di registrarlo o meno, si pu sempre registrare il database in seguito passando per menu
strumenti --> opzioni --> <openoffice.org base --> database (Nel pannello che si apre si possono aggiungere o togliere database)

=-~~-=
Pag. 8 di 39
TABELLE | back

Le tabelle del database sono 6: una tabella principale LIBRI e tre secondarie collegate alla principale: AUTORE, GENERE e LINGUA. Inoltre c' una tabella
per registrare i PRESTITI dei libri e una per gli UTENTI di questa ipotetica biblioteca. La struttura, completa di chiave primaria e contatore dove necessario,
delle tabelle mostrata nella seguente figura.

Struttura della tabella


Struttura della tabella GENERE:
LINGUA:

Struttura della tabella


Struttura della tabella LIBRI:
AUTORE:

Struttura della tabella


Struttura della tabella UTENTI:
PRESTITI:

=-~~-=

Pag. 9 di 39
RELAZIONI | back

I campi correlati delle tabelle e le RELAZIONI tra la tabella


principale e le tre secondarie sono mostrati in figura

I tipi di relazioni sono tutte di tipo uno a molti sia verso la tabella
prestiti che verso la tabella libri

=-~~-=

DATI | back

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

Aprire la tabella lingua e immettere alcune lingue

Aprire la tabella genere e immettere alcuni generi

Aprire la tabella utenti e immettere alcuni utenti

NON inserire, per il momento, alcun dato nelle tabelle libri e prestiti

=-~~-=
Pag. 10 di 39
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

Pag. 11 di 39
autore Q_autore autore

libri Q_libri autore titolo

libri copie_da_1_a_1 autore titolo

libri copie_da_2_in_su autore titolo

Pag. 12 di 39
La penultima query filtrando il numero di copie = 1 serve ad indicare i libri che non sono prestabili

L'ultima query filtrando il numero di copie > 1 serve ad indicare il libri che sono prestabili

=-~~-=

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 Tabelle. Notare che
le forms - maschere- formulari sono nel formato
tabellare (aspetto simile ad una tabella)

L'inserimento del Titolo e dell'etichetta


abbastanza intuitivo.

Vedremo in seguito come creare il pulsante per


chiudere la maschera

Pag. 13 di 39
Pag. 14 di 39
=-~~-=

MASCHERA LIBRI | back

La maschera libri deve contenere i 5 campi genere, lingua, autore, titolo e n.copie ma in
effetti si dovr digitare solo il titolo e il numero delle copie (che dovr anche essere
aggiornato ogni volta che inizia o si conclude un prestito, in quanto le informazioni relative
agli altri 3 campi sono state gi registrate nelle relative tabelle. Quindi una volta digitato il
titolo e il numero delle copie sar sufficiente selezionare il valore da inserire da un apposito
campo a finestra chiamato combo per gli altri campi.

In questa versione ci sono due ulteriori campi di tipo immagine che vanno inseriti attivando
la barra "Altri campi" premendo sull'apposito pulsante della barra "Controlli per
formulario" che si attiva tramite il menu "Visualizza" --> "Barre degli Strumetni". Il
pulsante che si deve attivare da questa ultima barra "Campo di controllo immagine"

Dopo aver associato il controllo immagine al campo immagine della relativa tabella, per
memorizzare un'immagine in questo controllo sar sufficiente cliccarci sopra con il tasto
destro del mouse e scegliere l'immagine da registrare

=-~~-=

Pag. 15 di 39
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

3) clicco sul pulsante aggiungi un


1) nuovo record 2) apro il combo genere e non trovo il valore
genere

7) aggiorno la
maschera principale

4) si attiva la macro

5) si apre la maschera genere 6) aggiungo il valore mancante

=-~~-=

Pag. 16 di 39
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 ed eventuale data di
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.

=-~~-=

Pag. 17 di 39
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.

Pag. 18 di 39
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.

=-~~-=

Pag. 19 di 39
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 biblioteca passando per il menu Organizza
macro. Poi passando per Openoffice.org basic e gestisci e poi library
ed in seguito aggiungi. Questa libreria appena creata diventa interna e
personale, infatti far parte del gruppo delle "Macro personali". Le
macro che dovremo scrivere per aprire le maschere o per fare altre
operazioni contenute nel Module1 della libreria biblioteca.

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:

=-~~-=

Pag. 20 di 39
MACRO, DIALOGHI, LIBRERIE E MODULI | back

Nell'installazione di Openoffice.org 3 i contenitori delle librerie delle applicazioni per Basic e Dialoghi sono localizzati in posizioni precise:

per gli utenti Windows nella directory : C:\Documents and Settings\nomeutente\Dati Applicazioni\Openoffice.org\3\user\basic
per gli utenti GNU/Linux nella directory : /home/nomeutente/.openoffice.org3/user/basic

In questa directory ci sono due file; script.xlc e dialog.xlc (scritti in xml) dove le lettere lx delle estensioni stanno per Library Container, che contengono l'indice
del codice Basic degli script e l'indice delle librerie presenti nel sistema, rispettivamente

script.xlc

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE library:libraries PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "libraries.dtd">
<library:libraries xmlns:library="http://openoffice.org/2000/library" xmlns:xlink="http://www.w3.org/1999/xlink">
<library:library library:name="Standard" xlink:href="$(USER)/basic/Standard/script.xlb/" xlink:type="simple" library:link="false"/>
</library:libraries>

dialog.xlc

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE library:libraries PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "libraries.dtd">
<library:libraries xmlns:library="http://openoffice.org/2000/library" xmlns:xlink="http://www.w3.org/1999/xlink">
<library:library library:name="Standard" xlink:href="$(USER)/basic/Standard/dialog.xlb/" xlink:type="simple" library:link="false"/>
</library:libraries>

La stessa directory contiene le librerie create dall'utente. Inizialmente esiste solo un libreria chiamata Standard. Ne file system, una libreria rappresentata da una
directory. Il nome della directory uguale al nome della libreria. La directory contiene tutti i file necessari alla libreria. Nello specifico, la libreria Standard
(directory di nome Standard) contiene tre file: Module1.xba, script.xlb e dialog.xlb

Module1.xba (la parte di estensione ba sta per basic) con il seguente contenuto

<?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 *****
Pag. 21 di 39
Sub Main
End Sub
Sub Macro1
End Sub
</script:module>

script.xlb (la parte di estensione lb sta per library) con il seguente contenuto

<?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>

dialog.xlb (la parte di estensione lb sta per library) con il seguente contenuto

<?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"/>

Facciamo un p di chiarezza, dal menu strumenti si accede a macro. Da macro si accesso a 4 possibilit: registrare una macro, eseguire una macro,
organizzare le macro e organizzare le finestre di dialogo. Per creare, eseguire o organizzare delle macro, prima bisogna creare una libreria che
automaticamente creer il modulo Module1 che conterr il codice in Basic vero e proprio delle macro.

L'obiettivo, come mostrato in figura, quello di creare una nuova libreria chiamata biblioteca.

Per poter creare tale libreria si deve passare per il menu "organizza finestre di dialogo" ed in particolare per la scheda librerie e cliccare sul pulsante "nuovo", si
scrive come nome libreria "biblioteca" e poi si conferma con OK

Pag. 22 di 39
Per scrivere il codice in Basic nel Module1 della nuova libreria biblioteca si deve passare per
strumenti --> macro --> organizza macro --> openoffice.org Basic --> Macro personali --> biblioteca --> Module1 e poi cliccare su modifica

=-~~-=

Pag. 23 di 39
MACRO PER APRIRE LE MASCHERE | back

REM ***** BASIC ***** il codice mostrato a sinistra relativo alle macro per
REM ---------------------------------------------------------------------- aprire le seguenti maschere:
Dim oForm
sub subDisplayForm(sDatabaseName as string, sFormName as string) Q_libri,
dim mArgs(1) as new com.sun.star.beans.PropertyValue
oDatabase = fnGetOpenDatabase(sdatabaseName) Q_libri1 (con foro),
oConnection = oDatabase.DataSource.getConnection("","")
mArgs(0).name = "OpenMode" Q_autore,
mArgs(0).value = "open" '"openDesign" ' '"openForMail"
mArgs(1).name = "ActiveConnection" Q_genere,
mArgs(1).value = oConnection
oForm = oDatabase.getFormDocuments.getByName(sFormName) Q_lingua,
oDatabase.getFormDocuments.loadComponentFromURL(sFormName, "_blank", 0, mArgs())
end sub macro,
REM ----------------------------------------------------------------------
function fnGetOpenDatabase(sDatabaseName as string) struttura,
oEnum = StarDesktop.getComponents.createEnumeration
while oEnum.hasMoreElements ripristino,
oPosDB = oEnum.nextElement
if oPosDB.implementationName = "com.sun.star.comp.dba.ODatabaseDocument" then Q_libri1_prestabili,
msgbox oPosDB.DataSource.name
if right(oPosDB.DataSource.name, len(sDatabaseName)) = sDatabaseName then Q_libri1_non_prestabili,
fnGetOpenDatabase = oPosDB
exit function istruzioni,
end if
end if utenti e
wend
end function prestiti
REM ----------------------------------------------------------------------
Dim oForm
sub Q_libri
subDisplayForm("biblioteca.odb","Q_libri")
end sub
REM ----------------------------------------------------------------------
Pag. 24 di 39
Dim oForm
sub Q_libri1
subDisplayForm("biblioteca.odb","Q_libri1")
end sub
REM ----------------------------------------------------------------------
Dim oForm
sub Q_autore
subDisplayForm("biblioteca.odb","Q_autore")
end sub
REM ----------------------------------------------------------------------
Dim oForm
sub Q_genere
subDisplayForm("biblioteca.odb","Q_genere")
end sub
REM ----------------------------------------------------------------------
Dim oForm
sub Q_lingua
subDisplayForm("biblioteca.odb","Q_lingua")
end sub
REM ----------------------------------------------------------------------
Dim oForm
sub macro
subDisplayForm("biblioteca.odb","macro")
end sub
REM ----------------------------------------------------------------------
Dim oForm
sub struttura
subDisplayForm("biblioteca.odb","struttura")
end sub
REM ----------------------------------------------------------------------
Dim oForm
sub ripristino
subDisplayForm("biblioteca.odb","ripristino")
end sub
REM ----------------------------------------------------------------------
Dim oForm
sub Q_libri1_prestabili
Pag. 25 di 39
subDisplayForm("biblioteca.odb","Q_libri1_prestabili")
end sub
REM ----------------------------------------------------------------------
Dim oForm
sub Q_libri1_non_prestabili
subDisplayForm("biblioteca.odb","Q_libri1_non_prestabili")
end sub
REM ----------------------------------------------------------------------
Dim oForm
sub istruzioni
subDisplayForm("biblioteca.odb","istruzioni")
end sub
REM ----------------------------------------------------------------------
Dim oForm
sub utenti
subDisplayForm("biblioteca.odb","utenti")
end sub
REM ----------------------------------------------------------------------
Dim oForm
sub prestiti
subDisplayForm("biblioteca.odb","prestiti")
end sub
REM ----------------------------------------------------------------------

=-~~-=

MACRO PER CHIUDERE LE MASCHERE | back


REM ----------------------------------------------------------------------
Fortunatamente per chiudere qualunque maschera
sub finestra_close( oEvent as object ) sufficiente una unica macro
ThisComponent.CurrentController.Frame.close(True)
end sub Si presuppone che sia presente il codice sopra
descritto
REM ----------------------------------------------------------------------
=-~~-=

Pag. 26 di 39
MACRO PER CHIUDERE LA MASCHERA MENU E USCIRE DA OOO | back

REM ----------------------------------------------------------------------

Sub escidaooo
Dim oForms as Object, oForm as Object
Dim oCtrl as Object
oForms = ThisComponent.DrawPage.Forms Questa macro differente dalle precedenti perch
oForm = oForms.GetByName("MainForm") oltre a chiudere la maschera MENU deve anche
'Xray oForm chiudere l'intera applicazione Openoffice.org Base
oForm.ActiveConnection.flush()
StarDesktop.terminate
End sub

REM ----------------------------------------------------------------------

=-~~-=

MACRO EQUIVALENTE AD AUTOEXEC DI MS ACCESS PER APRIRE AUTOMATICAMENTE LA MASCHERA MENU ALL'APERTURA
DELL'ARCHIVIO BIBLIOTECA.ODB | back

REM ---------------------------------------------------------------------- Non ci sono commenti


Sub AutoExec
On Error Goto HandleError
Dim LastFrame As Object
Dim NumFrames As Integer
Static FormDocs As Object
Dim DBDoc As Object
Dim ImpName As String
Dim DataSource As Object
Dim Conn As Object
Dim Args(1) As New com.sun.star.beans.PropertyValue
Dim FormName As String
Pag. 27 di 39
Dim FormDoc As Object

FormName="MENU" REM CHANGE TO YOUR FORM NAME

ImpName="com.sun.star.comp.dba.ODatabaseDocument"
NumFrames=StarDesktop.Frames.Count
LastFrame=StarDesktop.Frames.getByIndex(NumFrames-1)
If LastFrame.Frames.Count>1 Then
Exit Sub
End If
If Not (LastFrame.Controller.Model.ImplementationName=ImpName) Then
Exit Sub REM not a db doc
End If
DataSource=LastFrame.Controller.DataSource
DBDoc=DataSource.DatabaseDocument
FormDocs=DBDoc.FormDocuments
Conn=DataSource.getConnection("","") REM no user/password
Args(0).Name="ActiveConnection" : Args(0).Value=Conn
if FormDocs.hasByName(FormName) Then
FormDoc=FormDocs.loadComponentFromURL(FormName,"_self",2,Args() )
FormDoc.CurrentController.Frame.ContainerWindow.setFocus()
End If
HandleError:
If Err<>0 Then
Exit Sub
End If
End Sub

=-~~-=

MACRO PER APRIRE UN REPORT IN ANTEPRIMA DI STAMPA | back

REM ---------------------------------------------------------------------- Codice utilissimo, introvabile


sub stampa_libri( oEv as variant )
OpenReport( getReportsTC, getConnectionTC, "stampa_libri" )
Pag. 28 di 39
end sub
function getConnectionTC() as variant
getConnectionTC = thisComponent.Drawpage.Forms(0).ActiveConnection
end function
function OpenReport( reportContainer as variant, oConnection as variant, sReportName as string) as variant
Dim aProp(1) As New com.sun.star.beans.PropertyValue
aProp(0).Name = "ActiveConnection"
aProp(0).Value = oConnection
aProp(1).Name = "OpenMode"
aProp(1).Value = "open"
OpenReport=reportContainer.loadComponentFromURL(sReportName,"_blank",0,aProp())
end function
function getReportsTC() as variant
getReportsTC = thisComponent.Parent.getReportDocuments
end function
REM--------------------------------------------------------------------

=-~~-=

ASSOCIAZIONE PULSANTI-MACRO | back

Generalmente, qualsiasi macro (con il relativo codice) va assegnato all'evento "durante l'esecuzione" del rispettivo pulsante

L'unica eccezione la macro autoexec, la quale non pu essere associata ad un evento di un pulsante ma ad un evento del database

Strumenti --> Personalizza --> Eventi --> Apri Documento

Pag. 29 di 39
=-~~-=

Pag. 30 di 39
ESPORTAZIONE ED IMPORTAZIONE DELLE MACRO | back

Supponiamo di voler spostare il file bilbioteca.odb da un computer windows a un altro computer windows o da un computer windows a un computer Linux
o da una partizione windows a una partizione Linux dello stesso computer o viceversa o perfino di voler o dover reinstallare Openoffice.org

Semplicemente copiando il file biblioteca.odb non vengono trasferite (copiate) anche le macro personali che sono registrate nel modulo Module1 della libreria
biblioteca

Procedura di esportazione/importazione manuale

Sul computer di origine, si apre Strumenti --> macro --> organizza macro --> openoffice.org basic
si seleziona la libreria biblioteca e poi si preme il pulsante gestisci
si apre una nuova finestra con tre schede Moduli - Dialoghi - Librerie
si seleziona la libreria biblioteca della scheda librerie e si preme modifica

appare una nuova finestra con il codice di tutte le macro presenti nella libreria
si seleziona tutto il codice, si copia in memoria e si incolla su un file di testo esterno in ASCII chiamandolo biblioteca.txt

poi si copia il file ODB e il file biblioteca.txt sul secondo computer o seconda partizione

si apre il file biblioteca.odb sul secondo computer,


si apre Strumenti --> macro --> organizza macro --> openoffice.org basic
nelle macro personali si noter che non presente la libreria biblioteca
si selezionano le macro personali e si preme il pulsante gestisci
appare una nuova finestra con tre schede, si apre la scheda libreria e si preme il pulsante nuovo
si crea una nuova libreria di nome biblioteca
congiuntamente alla libreria biblioteca si crea anche il modulo module1
questo nuovo modulo vuoto, ed qui che andremo ad incollare il contenuto precedentemente copiato

si salva, dopo aver incollato il testo e si chiude


tutto
in questo modo si sono importate tutte le macro personali
queste funzioneranno tutte alla condizione che siano associate ad un evento,
di solito il rilascio di un pulsante o all'apertura del documento nel caso di autoexec

------------
Pag. 31 di 39
Procedura di esportazione/importazione con formulario

Un'altra soluzione, alternativa, utilizzata nel database in oggetto (biblioteca.odb) quella di copiare tutto il codice di tutte le macro e incollarlo in una
maschera del database stesso. In questo modo si evita di trasportare un secondo file (il file ASCII standard1.txt) e l'utente che ricever l'archivio (per e-
mail o altro mezzo) da autosufficiente. Infatti il codice delle macro non sar nell'archivio delle macro ma ne sar disponibile una copia dentro una
maschera (meglio ancora se visibile da menu tramite un un pulsante).

------------

Procedura di esportazione/importazione automatica

Sul computer di origine, si apre Strumenti --> macro --> organizza macro --> openoffice.org basic
si seleziona la libreria biblioteca e poi si preme il pulsante gestisci
si apre una nuova finestra con tre schede Moduli - Dialoghi - Librerie
si seleziona la libreria biblioteca della scheda librerie e si preme esporta

a questo punto si pu scegliere di esportare la libreria come estensione di Openoffice.org e verr cos creato il file biblioteca.oxt

oppure in formato libreria e verr cos' creata una cartella (directory) di nome biblioteca contenente i tre file dialog.xlb, Module1.xba e script.xlb

per l'importazione o si installa l'estensione biblioteca.oxt o si installa la libreria biblioteca con la procedura analoga ma inversa (importa invece che esporta)

=-~~-=

Pag. 32 di 39
MASCHERA PRESTITI | back

La maschera prestiti deve contenere i 4 campi data del


prestito, data della conclusione, utente e titolo ma in effetti si
dovr digitare solo la data del prestito quando si fa il prestito e
la data di conclusione quando si conclude, in quanto le
informazioni relative agli altri 2 campi sono state gi registrate
nelle relative tabelle. Quindi una volta digitato la prima sar
sufficiente selezionare il valore da inserire da un apposito
campo a finestra chiamato combo per gli altri 2 campi.

Per quanto riguarda le istruzioni per selezionare un libro


prestabile (con numero di copie > 1) e come modificare il
numero di copie (-1 al prestito e +1 alla conclusione) si
predisposto un pulsante che apre un'apposita finestra della quale
se ne riporta il contenuto.

=-~~-=

Pag. 33 di 39
ISTRUZIONI X PRESTITO | back

CONSULTAZIONE

La consultazione dei prestiti pu avvenire in due modalit: sfogliando la finestra (con una registrazione per pagina) con il selettore dei record, oppure
direttamente nella tabella presente nella maschera-formulario. I dati riportati nei campi con sfondo grigio chiaro in realt non sono registrati nella tabella
PRESTITI ma sono agganciati dinamicamente dalle relative tabelle UTENTI e LIBRI

INIZIO PRESTITO

Per fare un prestito si deve registrare la data di inizio e scegliere dal menu a tendina dei due controlli COMBO sia l'utente che vuole il prestito che il
titolo del libro da prestare. Entrambi i campi sono chiavi primarie, quindi informazioni univoche, quindi non ci possono essere due utenti con lo stesso
nome e cognome o due libri con lo stesso titolo. Per verificare l'elenco completo con tutte le informazioni degli utenti si pu premere il tasto F4, poi
tabelle e poi UTENTI. Per i libri stato posto il vincolo per il quale non si possono prestare libri unici (con numero di copie = 1). Pertanto la scelta sar
basata sulla query copie_da_2_in_su. Per verificare l'elenco completo con tutte le informazioni dei libri prestabili si pu premere il tasto F4, poi ricerche
e poi copie_da_2_in_su. Appena registrato l'inizio del prestito si deve modificare il numero delle copie nella query aperta con il tasto F4 diminuendone
il numero di 1

CONCLUSIONE PRESTITO

La conclusione del prestito avviene semplicemente registrando la data di conclusione del prestito. Appena concluso il prestito si deve modificare il
numero delle copie nella query aperta con il tasto F4 aumentandone il numero di 1

Pag. 34 di 39
FILTRARE I PRESTITI CONCLUSI

Una volta aperta la maschera dei prestiti appariranno tutti i prestiti, sia quelli conclusi che quelli da concludere, per filtrare i prestiti conclusi (quelli con
la data di conclusione presente) sufficiente posizionarsi su un campo data conclusione presente e applicare il filtro in base alla sezione.

FILTRARE I PRESTITI NON CONCLUSI

Analogamente, per filtrare i prestiti ancora aperti (non conclusi) (quelli con la data di conclusione vuota) sufficiente posizionarsi su un campo data
conclusione vuoto e applicare il filtro in base alla selezione.

=-~~-=

Pag. 35 di 39
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 e chiudere le
diverse maschere, 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.

Pag. 36 di 39
da questo menu cliccando sul pulsante Biblioteca senza con foto si pu aprire (on top) la maschera dei libri, che pu essere chiusa con un altro pulsante
appositamente predisposto. Oppure, da questa ultima si
pu aprire ed operare sulle altre maschere che si apriranno sempre "in top"

In questo menu, in particolare ed a scopo didattico, ci sono anche dei pulsanti che aprono delle maschere contenti "il codice macro", "la Struttura del database"
e le istruzioni per "ripristinare le macro"

Praticamente l'archivio biblioteca.odb oltre ad essere un esempio allo stesso tempo un tutorial quasi completo.

=-~~-=

Pag. 37 di 39
REPORT | back

Per i Rapporti o Report o Formulari esiste una procedura di creazione guidata abbastanza scarna, per fortuna si pu utilizzare Report Builder di SUN che si pu
scaricare gratuitamente come una estensione otx (sun-report-buider.oxt) da questo indirizzo http://extensions.services.openoffice.org/download/809 Per installarlo
o si apre direttamente con Openoffice.org oppure tramite Openoffice.org si installa attraverso la gestione delle estensioni La procedura per creare e/o modificare
un report abbastanza banale ed intuitiva. Con pochi click si pu ottenere un sobrio report come quello che segue:

Pag. 38 di 39
L'archivio biblioteca.odb zippato scaricabile 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 dicembre 2008 (tutti i rovesci sono riservati) webmaster@comunecampagnano.it

Pag. 39 di 39

You might also like