OpenOffice.org 3 Base

Progetto Biblioteca REMIX OOo 3 Base v. 3.02 dicembre 2008

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

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 ?

 

 

 

 

 

 

 

 

 

01 Partiamo dall'obiettivo finale
02 Database

03 Tabelle

04 Relazioni

05 Dati

06 Query

07 Forms

08 Maschera libri

09 1° problema

10 2° problema

11 Ricerca

12 Pulsanti e Macro
13
Macro, Dialoghi, Librerie e Moduli
14 Macro per aprire maschere
15 Macro per chiudere maschere
16 Macro per uscire da  OOO
17 Macro equivalente ad Autoexec
18 Macro per aprire report
19 Associazione pulsante macro
20 Esportazione ed importazione delle macro

     esportazione/importazione manuale
     esportazione/importazione con formulario
     esportazione/importazione automatica
21 Maschera Prestiti
22 Istruzioni per il prestito
23 Ultimi ritocchi
24 Costruire un menu

25 Report

26 Download

Premessa

Questa guida 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 la piena funzionalità,  intesa come disponibilità dei dati alle altre applicazioni di Openoffice.org, 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, o usare un metodo alternativo, come spiegato in seguito

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

Visti i continui e ripetuti crash di Openoffice.org in fase di costruzione del database vi consiglio di salvare il lavoro ogni 60 secondi e di procurarvi qualcosa per KILLARE l'applicazione come procexp per windows o xkill per GNU/linux.

 

=-~°~-=

Partiamo dall'obiettivo finale : Il menu dell'archivio biblioteca | back

La maschera principale dell'archivio Biblioteca con 2 foto per ogni record

L'anteprima di stampa del Report Biblioteca

 

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)

=-~°~-=

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 LINGUA:

Struttura della tabella GENERE:  

   

     

Struttura della tabella AUTORE:

 

Struttura della tabella LIBRI:   

 

       
Struttura della tabella PRESTITI: Struttura della tabella UTENTI:
       

 =-~°~-=

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

 

=-~°~-=

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
 
libri copie_da_1_a_1 autore titolo
 
libri copie_da_2_in_su autore titolo
 

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

 

 =-~°~-=

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

 

=-~°~-=

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

 =-~°~-=

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

=-~°~-=

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




 

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

=-~°~-=

MACRO PER APRIRE LE MASCHERE | back

REM ***** BASIC *****
REM
----------------------------------------------------------------------
Dim oForm
   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)
      oDatabase.getFormDocuments.loadComponentFromURL
(sFormName, "_blank", 0, mArgs())
end sub
REM
----------------------------------------------------------------------
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
REM
----------------------------------------------------------------------
Dim oForm
sub
Q_libri
   subDisplayForm
("biblioteca.odb","Q_libri")
end sub
REM
----------------------------------------------------------------------
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
   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
----------------------------------------------------------------------

il codice mostrato  a sinistra è relativo alle macro per aprire le seguenti maschere:

Q_libri,

Q_libri1 (con foro),

Q_autore,

Q_genere,

Q_lingua, 

macro,

struttura,

ripristino,

Q_libri1_prestabili,

Q_libri1_non_prestabili,

istruzioni,

utenti e

prestiti

 

=-~°~-=

MACRO PER CHIUDERE LE MASCHERE | back

 

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

sub finestra_close( oEvent as object )
   ThisComponent.CurrentController.Frame.close(True)
end sub

REM ----------------------------------------------------------------------
Fortunatamente per chiudere qualunque maschera è sufficiente una unica macro

Si presuppone che sia presente il codice sopra descritto

 

=-~°~-=

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
   oForm = oForms.GetByName("MainForm")
   'Xray oForm
   oForm.ActiveConnection.flush()
   StarDesktop.terminate
End sub

REM ----------------------------------------------------------------------
Questa macro è differente dalle precedenti perchè oltre a chiudere la maschera MENU deve anche chiudere l'intera applicazione Openoffice.org Base

 

=-~°~-=

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

 

REM ----------------------------------------------------------------------
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
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
Non ci sono commenti

 

=-~°~-=

MACRO PER APRIRE UN REPORT IN ANTEPRIMA DI STAMPA | back

 

REM ----------------------------------------------------------------------
sub stampa_libri( oEv as variant )
   OpenReport( getReportsTC, getConnectionTC, "stampa_libri" )
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--------------------------------------------------------------------
Codice utilissimo, introvabile

=-~°~-=

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

=-~°~-=

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

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

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)

=-~°~-=

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.

 

 

=-~°~-=

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

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.

 

=-~°~-=

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.

 

 

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.

=-~°~-=

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:


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