Ricerche, formulari e report di Base

Questo tutorial mostra come impostare le ricerche, i formulari e i report di Base. Descrive inoltre la creazione di campi calcolati, gli operatori e i comandi di ricerca, le ricerche parametriche e il comando LIKE. Il tutorial è basato su OpenOffice.org, ma vale anche per LibreOffice. Verifica le versioni usate e la compatibilità

Vai alla prima parte del tutorial

Se archiviare i dati, costruendo tabelle e mettendole in relazione, è il primo passo per aver sempre a portata di mano le informazioni, poter estrarre dal database i dati che interessano è ovviamente lo scopo di tutta la fatica d’archiviazione.

Estrarre da un database tutte e le sole informazioni che rispondono a un determinato criterio di ricerca non è, in sincerità, una faccenda semplicissima, almeno finché non si prende la mano con il software di gestione di database che si usa: in questo caso, OpenOffice.org Base. Per stabilire una pietra di paragone, con un foglio elettronico è molto più facile ed immediato usare filtri o opzioni di ricerca per trovare i dati che rispondono a caratteristiche specifiche. Con un gestore di database ogni operazione di ricerca va pensata in anticipo e strutturata; oppure, va costruita un’apposita maschera (che OpenOffice.org Base chiama formulario) che permetta di condurre ricerche al volo.

Impostata la questione in questo modo, ci sarebbe da chiedersi perché mai una persona sana di mente dovrebbe usare un database per complicarsi la vita. Tuttavia si tratta di un investimento: occorre impiegare un po’ di tempo e un po’ di fatica nell’imparare a usare uno strumento più complesso per essere in grado di compiere operazioni che nessun foglio elettronico potrebbe svolgere. Almeno, non in modo semplice. In definitiva bisogna distinguere tra la difficoltà di imparare l’uso di uno strumento e la potenza che questo mette a disposizione, tenendo presente che qualunque strumento è di uso difficile solo fino a quando non si è imparato a padroneggiarlo: poi si viaggia in carrozza.

Le ricerche

Una delle cose che ai novelli utenti di Base appare strana è che le ricerche di dati siano veri e propri elementi del database, che vanno costruiti e registrati prima di poter essere usati per selezionare dal database solo i record conformi ai criteri di ricerca.

Per esempio, per estrarre da un ipotetico elenco telefonico i numeri degli abitanti di Milano che si chiamano Rossi occorre dapprima definire la ricerca; ciò significa indicare qual è la tabella (o le tabelle) su cui la ricerca deve essere condotta, quali sono i campi in cui si trovano i dati ricercati (nell’esempio, il campo Città e il campo Cognome) e i valori che i dati devono avere per soddisfare la ricerca (Milano e Rossi). Una volta memorizzata la ricerca, la si può avviare: Base restituirà l’elenco dei record che soddisfano i criteri di ricerca.

Memorizzata una ricerca, questa rimane a disposizione e può essere ripetuta ogni volta che è necessario, anche quando i dati delle tabelle sono stati modificati e ampliati; questo è uno dei vantaggi dell’uso di un gestore di database: le impostazioni di ricerca non devono essere ripetute ogni volta.

OpenOffice.org Base chiama ricerche ciò che Microsoft Access chiama query e che i puristi dei database preferiscono tradurre in italiano con interrogazioni, termine che in effetti viene talvolta usato in Base. I criteri di ricerca vengono spesso chiamati filtri, anche se qualcuno fa una sottile distinzione tra filtri e criteri di ricerca.

OpenOffice.org Base consente di costruire ricerche in tre modi: a mano mediante la vista Struttura, usando l’apposita procedura guidata e scrivendo manualmente le necessarie istruzioni SQL. Queste tre possibilità appaiono nel riquadro Attività di OpenOffice.org Base quando Ricerche è selezionato nel riquadro Database.

La possibilità di scrivere manualmente le istruzioni in SQL (Structured Query Language, un linguaggio di interrogazione dei database sviluppato originariamente da IBM) è la delizia degli utenti esperti, soprattutto degli amministratori di database abituati a gestire i dati mediante la riga di comando; per gli utenti normali imparare la sintassi dell’SQL è una fatica di cui si può fare a meno, anche se, va detto, un’infarinatura permette di intervenire per correggere alcune sbavature che le altre due procedure mostrano ogni tanto.

La procedura guidata è il sistema più semplice per costruire una ricerca: poche domande in una procedura passo passo e il più è fatto. La procedura guidata permette di scegliere la tabella (o la ricerca, in modo che possa essere raffinata una ricerca più estesa) su cui condurre l’interrogazione, i campi da riportare nella ricerca, l’ordine con cui mostrare i dati e il criterio o i criteri di ricerca. Mediante la procedura guidata non è però possibile usare come criterio di ricerca un campo che non deve apparire nella ricerca stessa. Per esempio, non è possibile cercare tutti gli abbonati telefonici di Milano senza che il campo Città compaia nell’elenco risultante. In alcune situazioni, ciò è un limite, cui si può tuttavia porre rimedio facilmente rifinendo manualmente nella vista Struttura la ricerca costruita mediante la procedura guidata. Dovrebbe essere molto facile comprendere ogni passo della procedura guidata; comunque eventuali dubbi possono essere chiariti esaminando il modo di costruire una ricerca operando manualmente in vista Struttura: imparare a fare da sé è il modo migliore per poi usare gli strumenti (in questo caso, la procedura guidata) che permettono di operare più velocemente.

Per costruire una ricerca in vista Struttura bisogna selezionare Ricerche nel riquadro Database e poi fare clic su Crea ricerca in vista struttura, nel riquadro Attività. Viene aperta la finestra della vista Struttura per la costruzione delle ricerche e anche una finestra che permette di scegliere sia le tabelle sia le ricerche già registrate su cui condurre la nuova ricerca (Figura 1).

La vista Struttura

Figura 1. La vista Struttura delle ricerche all’inizio è ovviamente vuota. La ricerca può essere condotta su più tabelle o ricerche contemporaneamente, purché le tabelle siano in relazione.

Le tabelle o le ricerche su cui condurre la nuova ricerca vanno selezionate una alla volta nell’apposita finestra, quindi va fatto clic su Aggiungi; la tabella o la ricerca viene così inserita nella vista Struttura, insieme con tutti i suoi campi. Quando tutte le tabelle o le ricerche sono state scelte, la finestra Aggiungi tabella o ricerca può essere chiusa.

A questo punto occorre inserire nella struttura della ricerca i campi su cui condurre la ricerca o che devono comparire nella ricerca stessa. La struttura di ricerca è composta da diversi elementi, ognuno dei quali occupa una riga.

  • Campo è il nome del campo che si vuole inserire nella ricerca. Per inserire il nome del campo si può usare l’elenco automatico che compare non appena si fa clic nella casella oppure si può trascinare il campo desiderato dalla finestra della tabella alla colonna della struttura. Ma il metodo più rapido è fare doppio clic sul nome del campo nella tabella.
  • Alias è un nome alternativo da assegnare al campo. Nei risultati della ricerca apparirà l’alias. Questa funzione è utile per quei campi che hanno un nome funzionale ma non elegante, come Cod_Collana: nella ricerca è meglio che compaia Codice_collana o semplicemente Collana.
  • Tabella è il nome della tabella o della ricerca cui appartiene il campo da inserire nella ricerca.
  • Ordine specifica l’ordinamento del risultato. In pratica, l’elenco di dati prodotto dalla ricerca viene ordinato secondo il campo per il quale viene specificato l’ordinamento, che può essere crescente o decrescente. L’ordinamento può essere specificato anche per più campi, in modo da indicare con precisione l’ordine se due o più campi hanno lo stesso valore.
  • Funzione consente di indicare una funzione con cui eseguire la ricerca. Per esempio, si possono cercare tutti gli ordini ricevuti nel 2009 e, mediante la funzione Somma stabilirne il totale. Le funzioni che possono essere usate direttamente in Base sono riportate nell’elenco che appare quando si fa clic sulla casella. Si possono poi definire manualmente campi calcolati, come spiegato nel box “Campi calcolati”.
  • Visibile indica se il campo deve essere visibile nel risultato della ricerca oppure no. Se il campo è utilizzato solo quale criterio di ricerca ma non deve esserne visibile il valore, la casella corrispondente può essere deselezionata.
  • Criteri indica il criterio di ricerca usato per estrarre i dati. Più criteri inseriti nella stessa riga in campi diversi devono essere verificati tutti perché la ricerca produca risultato. Se più criteri sono inseriti in righe diverse (i successivi al primo occupano le righe o), è sufficiente che uno solo sia verificato perché la ricerca produca risultato. In altre parole, la sistemazione dei criteri di ricerca sulla stessa riga o su righe diverse equivale all’uso degli operatori logici e ed o.
  • o consente l’immissione di un criterio di ricerca alternativo. L’immissione sapienti di criteri sulla stessa riga o su righe diverse consente la realizzazione di ricerche altamente complesse.

Se la ricerca viene effettuata su più tabelle o ricerche, per prima cosa bisogna selezionare la tabella o la ricerca dall’elenco della casella Tabella, quindi selezionare il campo dall’elenco della casella Campo; questa procedura è tuttavia inutile se si fa doppio clic sul nome del campo nella tabella per inserirlo nella struttura di ricerca: Base stesso inserisce il nome della tabella da cui è tratto. Definito il campo, possono essere impostati tutti gli altri parametri. Le righe Funzione, Tabella e Alias possono anche essere escluse dalle righe della struttura: per farlo (e per farle riapparire) basta fare clic sui corrispondenti pulsanti che si trovano nella barra degli strumenti Struttura. In essa trovano anche posto il pulsante Aggiungi tabella o ricerca (che richiama la finestra per aggiungere tabelle o ricerche) e il pulsante Valori distinti: dopo aver visualizzato il risultato della ricerca, il pulsante Valori distinti permette di visualizzare una volta sola i record che hanno valori identici.

Nella Figura 2 è riportato un esempio di una semplice ricerca, basata su un database domestico di film.

Un esempio di ricerca con tre tabelle in relazione

Figura 2. Un esempio di semplice ricerca su tre tabelle in relazione tra loro.

Si può notare che la ricerca è condotta su tre tabelle, ovviamente in relazione tra loro. L’unico criterio di ricerca è posto nel campo Titolo originale, che però non sarà visibile nel risultato della ricerca. Il risultato sarà ordinato in senso crescente secondo il campo Titolo.

Qual è il senso di questa ricerca? Trovare nel database tutti i film italiani. In mancanza di un campo “Nazionalità”, questo risultato viene ottenuto cercando tutti i record il cui campo Titolo originale è vuoto, come indicato dal criterio IS EMPTY. Viene dato per scontato che per tutti i film stranieri sia stato indicato nel database il titolo originale, anche quando è lo stesso con il quale è stato distribuito in Italia.

Nel database d’esempio, per trovare tutti i film stranieri sarebbe bastato inserire IS NOT EMPTY come criterio nel campo Titolo originale. In effetti, l’abbiamo fatto: il risultato è riportato nella Figura 3.

Il risultato di una ricerca

Figura 3. Il risultato di una ricerca. I pulsanti della barra degli strumenti consentono di effettuare ulteriori operazioni di ordinamento e di filtro.

Gli operatori e i comandi che possono essere usati come criteri di ricerca sono riportati nel box “Operatori e comandi di ricerca”.

Mediante Base si possono effettuare anche ricerche parametriche, cioè ricerche che richiedono l’immissione di un parametro specifico ogni volta che vengono avviate. Restando nell’esempio del database dei film, si potrebbero voler cercare i titoli posseduti solo in DVD, o solo quelli in VHS, o solo quelli in Blu-Ray e così via. Una strada potrebbe essere la costruzione di una ricerca per ogni tipo di supporto, per scegliere quindi di volta in volta la ricerca appropriata. È però possibile con una ricerca parametrica registrare una ricerca unica, che abbia come criterio nel campo Cod_Formato non un valore fisso ma il nome di un parametro. All’avvio della ricerca, Base chiede all’utente il valore da associare al parametro per la ricerca in corso (Figura 4) e mostra poi il risultato. In questo modo è possibile usare la stessa ricerca, ogni volta immettendo il parametro desiderato e tenendo buono il resto della ricerca.

La finestra Specifica parametro, per l'avvio di una ricerca parametrica

Figura 4. All’avvio di una ricerca parametrica, Base chiede di specificare il parametro con cui condurre la ricerca, che va inserito nella casella Valore.

Per far sì che una ricerca sia parametrica, bisogna inserire nella casella Criterio il nome del parametro da specificare preceduto dal segno di due punti. Nell’esempio della Figura 4, la ricerca è stata strutturata in modo che nella casella Criterio vi fosse :Codice_del_formato; in questo caso il parametro è costituito da un numero (il codice del formato, appunto) ed occorre ricordarsi la corrispondenza tra numero e tipo di formato.

Le ricerche parametrica possono essere condotte anche mediante più di un parametro. In questo caso, nella finestra Specifica parametro vengono elencati tutti i parametri di cui bisogna inserire i valori. Non è invece possibile usare i caratteri jolly (l’asterisco e il punto di domanda secondo la sintassi di OpenOffice.org, il percento e la sottolineatura secondo la sintassi SQL) in una ricerca parametrica. Come descritto nel box “Ricerche parametriche e comando LIKE”, è tuttavia possibile usare i segnaposto in combinazione con il comando LIKE per trovare tutti i record il cui valore inizia o finisce con il parametro indicato.

Purtroppo è facile inserire istruzioni che non hanno significato o che ottengono risultati diversi da quelli previsti. In questi casi è utile usare la vista SQL per esaminare l’istruzione di ricerca e tentare di capire come modificarla: si può infatti usare la vista SQL sia per costruire una ricerca da zero sia per modificare una ricerca già realizzata. Per esempio, la ricerca mostrata nella Figura 2 viene tradotta in SQL come SELECT "Film"."Titolo", "Collane"."Collana", "Formati"."Formato", "Film"."Note" FROM "Film" AS "Film", "Collane" AS "Collane", "Formati" AS "Formati" WHERE "Film"."Cod_Collana" = "Collane"."Cod_Collana" AND "Film"."Cod_Formato" = "Formati"."Cod_Formato" AND "Film"."Titolo originale" IS NULL ORDER BY "Film"."Titolo" ASC.

Si noti che il traduttore di Base ha automaticamente modificato IS EMPTY in IS NULL. Il primo è il comando usato da OpenOffice.org, il secondo è l’equivalente SQL. Per modificare in vista SQL una ricerca registrata, basta fare clic destro su di essa e impartire il comando Modifica in vista SQL.

È superfluo dire che occorre conoscere almeno i comandi basilari SQL per essere in grado di operare in vista SQL, ma anche se non si è esperti si può venire a capo delle magagne più evidenti che però in vista Struttura rimangono nascoste.

I formulari

Le tabelle spesso non sono lo strumento migliore per introdurre i dati, soprattutto se chi li introduce non è colui che ha progettato il database.

Per esempio, è di solito inutile mantenere visibili campi che vengono compilati automaticamente da Base con un numero progressivo, mentre è spesso comodo raggruppare campi omogenei (in modo che visivamente si trovino vicini) o dotare alcuni campi di testi esplicativi o avvertenze. Inoltre, studiare un’interfaccia che graficamente aiuti l’utente a raccapezzarsi nel database, grazie all’uso sapiente dei font e dei colori, può evitare errori e confusione.

I formulari (chiamati maschere da Microsoft Access) sono proprio questo: interfacce grafiche che si frappongono tra una tabella (o una ricerca) e l’utente. Se si costruisce un formulario a partire da una tabella, il formulario può servire anche per introdurre nuovi dati o modificare i dati già inseriti; se il formulario viene invece costruito a partire da una ricerca, può solo visualizzare i dati ed eventualmente filtrarli ed ordinarli, ma non modificarli né aggiungerne.

Per creare i formulari si può scegliere se operare da soli in vista Struttura o se farsi aiutare da una procedura guidata apposita. Nel caso dei formulari non abbiamo dubbi nel consigliare la procedura guidata, che fa davvero risparmiare un mucchio di tempo e che è sufficientemente flessibile da assecondare sia i gusti dell’utente sia le diverse necessità che possono sorgere secondo il tipo di database. In ogni caso, è sempre possibile (e talvolta fortemente consigliabile) modificare in vista Struttura un formulario creato mediante la procedura guidata.

I passi della procedura guidata sono di facile comprensione e non richiedono perciò una spiegazione particolare, a parte probabilmente quello relativo all’inserimento di un formulario secondario. Quest’ultimo è un formulario che può essere inserito all’interno del formulario in costruzione e che di solito serve a visualizzare (generalmente in forma tabellare) una serie di dati tra cui scegliere quello da inserire nel formulario principale o a mostrare il dettaglio di un dato che nel formulario principale appare in forma aggregata; un esempio di formulario secondario è riportato nella Figura 5.

Un formulario con un formulario secondario

Figura 5. Un formulario con un formulario secondario, per il piano di un’opera d’informatica. Ogni numero ha 28 pagine (il formulario in alto assicura che è così), mentre il formulario in basso elenca gli articoli contenuti nel numero selezionato e specifica il numero di pagine di ogni articolo.

In vista Struttura, il formulario appare appoggiato su una griglia, per consentire l’allineamento preciso dei campi. Ogni campo dati è corredato da un’etichetta, che di solito viene usata per riportare il nome del campo dati. Il campo dati e l’etichetta sono, per impostazione predefinita, raggruppati; facendo clic o sull’uno o sull’altro viene perciò selezionato l’intero oggetto raggruppato. Per selezionare solo il campo dati o solo l’etichetta bisogna fare clic tenendo premuto il tasto Mela (Ctrl in Windows e Linux); le maniglie che appaiono quando si seleziona un elemento aiutano a comprendere quale elemento è in effetti selezionato.

OpenOffice.org Base offre ampie possibilità di manipolazione degli elementi presenti nel formulario, grazie alla finestra delle proprietà. Per visualizzarla, basta fare clic sul pulsante Controllo (gli elementi di un formulario sono genericamente chiamati controlli), posto nella barra degli strumenti Controlli per formulario. Nella Figura 6 è possibile osservare un formulario in vista Struttura con la finestra delle proprietà dei controlli.

La finestra con le proprietà dei controlli

Figura 6. La finestra delle proprietà riporta le caratteristiche dell’elemento selezionato. È possibile modificare a piacimento queste proprietà.

Grazie ai formulari è per esempio possibile scegliere un determinato valore da una casella di riepilogo anziché dover digitare il valore, riducendo così la possibilità di errori. Per esempio, nel database dei film il codice del formato e il codice della collana vengono scelti da un elenco che riporta le descrizioni per esteso, anche se poi nella tabella viene inserito il numero corrispondente. Per far ciò è necessario che le tabelle siano in relazione e che il valore che si vuole venga visualizzato nel formulario sia il primo; se non lo è, è sufficiente creare una ricerca che lo ponga come prima colonna e ponga il codice numerico nella seconda. A questo punto si istruisce il formulario (mediante la scheda Dati della finestra delle proprietà) a prelevare l’elenco dei dati dalla ricerca e a usare però il valore della colonna 1 (che è la seconda, visto che la numerazione parte da 0).

Nella Figura 7 è usato il database dei film d’esempio per mostrare come sia più semplice usare una casella di riepilogo con la descrizione della collana piuttosto che inserire a mano il codice numerico.

Indroduzione dei dati mediante un clic dall'elenco del formulario

Figura 7. Il formulario può davvero facilitare l’introduzione dei dati.

La barra degli strumenti che si trova alla base del formulario consente di scorrere i dati, di aggiungerne di nuovi, di ordinarli e di filtrarli.

I report

Quasi sempre, i dati devono essere presentati a qualcun altro. Le ricerche vanno benissimo per estrarre i dati, ma sono molto scomode da diffondere.

Per diffondere i dati si usano i rapporti, che permettono di riorganizzare tabelle e ricerche in forma editorialmente più presentabile.

Anche in questo caso è meglio usare la procedura guidata per creare la base del rapporto, rifinendolo poi in vista Struttura.

Un rapporto di Base è in realtà un documento in formato Writer, che può essere salvato come documento a sé (al di fuori del database) con estensione .odt. I passi della creazione guidata di un formulario sono assai semplici. L’unico punto cui prestare particolare attenzione è l’ultimo: la registrazione del rapporto può essere di tipo statico o dinamico. Nel primo caso, i dati del rapporto non vengono modificati se i dati delle tabelle cambiano; nel secondo caso, la modifica dei dati nelle tabelle si rispecchia nei cambiamenti del rapporto. In genere si usano i rapporti dinamici, anche perché è davvero semplice salvare una determinata versione del rapporto come file di Writer al di fuori del database.

La Figura 8 mostra l’elenco dei film registrati nel database d’esempio, elaborato mediante un semplice report.

Un report generato da Base

Figura 8. Un semplice report, in cui i film sono ordinati alfabeticamente.

La dimensione dei font, la larghezza delle colonne e tanti altri elementi (come il codice di campo per l’inserimento automatico della data) possono essere modificati a mano in vista Struttura.

Gli strumenti a disposizione dei report di OpenOffice.org Base non sono molto potenti, soprattutto perché non consentono l’elaborazione dei dati, neanche per funzioni molto semplici. Per esempio, non è possibile inserire totali e subtotali, che sono solo due delle funzioni più utilizzate con i report.

A queste mancanze rimedia Sun Report Builder, un’estensione per OpenOffice.org Base che può essere scaricata gratuitamente dal repository delle estensioni, mediante il comando Strumenti > Gestione estensioni > Ulteriori estensioni in linea.