MINI CORSO DI MICROSOFT ACCESS/OPEN BASE
parte 1°

INTRODUZIONE

In questo manuale verranno illustrati i due principali software desktop relativi alla gestione degli archivi (database): Access (2003, 2007, 2010 e 2013) e OpenOffice Base (OOBase 4.0).

Access si presenta con diversi pannelli. Nelle immagini sottostanti i pannelli disponibili a seconde delle versioni di Access con vicino l'icona dell'applicazione:

Access 97

Access 2000 Access XP Access 2003
ACCESS 2007

ACCESS 2010

ACCESS 2013

Open Base è anch'esso composto da diversi pannelli (visibili sul fianco sinistro della finestra iniziale): Tabelle, Ricerche, Formulari e Rapporti. Nella figura si noti l'indicazione relativa al motore db utilizzato: HSQL.

OPEN BASE

Analizziamo ora le principali funzioni di access. Nelle versioni di Access 97, Access 2000, Access XP e Access 2003 queste erano rappresentate da pannelli posizionati sulla parte sinistra della maschera di apertura. Nelle nuove versioni di Access (dal 2007 in poi) sono state trasferite all'interno del ribbon "Crea"

TABELLE: Viene utilizzato per la definizione degli archivi (modalità "struttura tabella") e per inserire i dati (modalità "visualizzazione foglio dati")

QUERY (in OOBase corrisponde a RICERCHE): viene utilizzato per fare le ricerche all'interno della base dati. Il linguaggio di interrogazione utilizzato è SQL. Solitamente il comando SQL non viene digitato direttamente ma "disegnato" mediante la maschera di progettazione.

I primi 2 pannelli rappresentano il livello utente dell’applicativo e consentono di popolare l'archivio (input) e di realizzare l’analisi dei dati (statistiche ed ordinamenti).

MASCHERE (in OOBase corrisponde a FORMULARI): In questo pannello definisco le videate (Form o Maschere) dove gli utenti possono inserire i dati in maniera controllata e semplificata.

REPORT  (in OOBase corrisponde a RAPPORTI): Qui vengono definite le reportistiche disponibili sui dati. I report sono molto usati nella rendicontazione e nella modulistica. Nei report non è possibile effettuare delle operazioni di input.

MACRO E MODULI (o CODICE) (in OOBase non esiste un pannello analogo ma è possibile ottenere la stessa funzionalità utilizzando la combinazione di tasti: ALT+F11): Questi pannelli sono relativi alla programmazione e consentono la costruzione di veri e propri applicativi.

Analizziamo ora le funzionalità presenti nel primo pannello

PANNELLO TABELLE / RIBBON CREA - GRUPPO TABELLE

Il file (Mdb per access 2003, Accdb per access successivi e Odb in OOBase) rappresenta il contenitore (archivio) delle informazioni che descrivono il fenomeno che intendiamo registrare. Il nostro archivio può essere composto da dati non omogenei (ad esempio Alunni, Professori, Voti, Assenze, ...). Ogni gruppo di dati omogenei viene registrato all'interno di uno stesso contenitore detto tabella. Quindi un file di Access/OOBase può contenere una o più tabelle. Le proprietà che caratterizzano ogni singolo elemento (record) della stessa tabella vengono definite campi. In una rappresentazione tabellare le righe rappresentano i record mentre le colonne i campi. L'insieme delle descrizione dei campi (nome, dimensione, tipo ...) prende il nome di struttura della tabella.

Un db composto da una sola tabella si dice monolitico. Per gestire un db monolitico possiamo utilizzare anche un foglio elettronico:

Un DB composto da diverse tabelle in relazione tra loro si dice Relazionale. Le relazioni tra le tabelle, permettono di manipolare i dati più facilmente e soprattutto evitano la ridondanza dei dati, ovvero la duplicazione delle informazioni che è inevitabile quando si opera con singole tabelle indipendenti. Un Diagramma Entità-Relazioni (ERD o Entity-Relationship Diagram) come quello sottostante evidenzia i collegamenti logici tra le tabelle del database.

Per creare una tabella dobbiamo procedere in questo modo:

>> ACCESS 2003: Richiamiamo il pannello Tabelle e poi clicchiamo sul bottone "Nuovo":

selezioniamo quindi la voce “Visualizzazione Struttura” presente nella finestra di dialogo

e confermiamo cliccando sul bottone "OK".

>> ACCESS 2007/2010/2013: Richiamiamo il pannello "Crea" sulla barra multifunzione e poi clicchiamo su "Struttura Tabella".

>> OOBase: Richiamiamo il pannello Tabelle e poi clicchiamo su "Crea tabella  in vista struttura..."

Nella griglia proposta dobbiamo definire la struttura della tabella ovvero l'elenco dei campi che descrivono i dati che vogliamo registrare. La descrizione dei campi comprende, oltre al nome, il tipo di dato, la dimensione e una serie di proprietà specifiche, legate alla tipologia selezionata.
Un esempio di struttura potrebbe essere la seguente (propone una ipotetica tabella "Studenti")

ACCESS 2003 ACCESS successivi Script SQL per generare la tabella
CREATE TABLE Studenti
(
   IdStudente COUNTER CONSTRAINT IdStudente PRIMARY KEY,
   Nominativo TEXT(60) CONSTRAINT Nominativo NOT NULL,
   NatoIl DATETIME,
   Ripetente BIT,
   Eta BYTE,
   AnnoDiIscrizione SMALLINT,
   RedditoInLire LONG,
   NoteSulloStudente LONGTEXT,
   Foto LONGBINARY,
   RedditoInEuro DOUBLE,
   MediaVoti SINGLE,
   ImportoTassePagato CURRENCY,
   CodiceFiscale TEXT(16) CONSTRAINT CodiceFiscale Unique
)
OOBase Script in HSQL (http://hsqldb.org/) per generare la tabella
CREATE TABLE Studenti
(
   IdStudente INTEGER GENERATED BY DEFAULT AS IDENTITY
              (START WITH 1, INCREMENT BY 1) PRIMARY KEY,
   Nominativo VARCHAR(60) NOT NULL,
   NatoIl DATE,
   Ripetente BOOLEAN,
   Eta TINYINT,
   AnnoDiIscrizione SMALLINT,
   RedditoInLire BIGINT,
   NoteSulloStudente LONGVARCHAR,
   Foto LONGVARBINARY,
   RedditoInEuro DOUBLE,
   MediaVoti FLOAT,
   ImportoTassePagato DECIMAL,
   CodiceFiscale CHAR(16),
   CONSTRAINT CodiceFiscale UNIQUE(CodiceFiscale)
)

Per eseguire il comando SQL di creazione della tabella in OOBase occorre seguire questi passaggi:

1) Richiamare lo strumento SQL 2) Incollare ed eseguire il comando SQL

La definizione della struttura di una tabella richiede la conoscenza dei tipi di dato disponibili. L'elenco delle tipologie disponibili è visibile, in corrispondenza della colonna "Tipo Dati" ("Tipo Campo" in OOBase), quando espando il combobox nella griglia di definizione dei campi.

ACCESS 2003 ACCESS successivi OpenBase

I tipi disponibili sono:

CONTATORE:

I campi di questo tipo vengono automaticamente inizializzati con valori unici (ogni record della stessa tabella assume in questo campo un valore diverso). In Access 2007/2010/2013 questo campo si chiama "Numerazione automatica".

Questo tipo di dato è caratterizzato dalle seguenti proprietà aggiuntive:

ACCESS 2003 ACCESS successivi

Le proprietà aggiuntive più importanti per il tipo contatore sono:

Dimensione Campo (Access): I possibili valori sono:
- Intero lungo: I valori generati sono degli interi a 32 bit.
- ID replica: I valori generati sono dei GUID (Globally Unique Identifier). Si tratta di valori a 128 bit (16 byte) che vengono rappresentati utilizzando 32 simboli esadecimali (esempio {12CE7B48-B3FA-4109-B561-FDAAB1C19049}). Gli ID replica sono progettati per identificare in modo univoco i vari oggetti (tabelle, record, etc) contenuti nei database assegnati ad un particolare set di repliche. Un set di repliche è un insieme di elementi appartenenti ad un gruppo di archivi (posizionati anche in zone remote tra loro) che devono essere mantenuti allineati tra loro mediante un'operazione di sincronizzazione. Questo tipologia di contatore risulta necessaria, nei processi di allineamento tra db appartenenti allo stesso set di repliche, per evitare che durante la sincronizzazione a record differenti venga assegnata la stessa chiave primaria.

La sincronizzazione è quindi un processo di aggiornamento, tra due o più archivi che si attua applicando le modifiche apportate a ciascun db a tutti gli altri membri appartenenti al medesimo set di repliche. Nelle figure sottostanti vengono mostrati i menu di access 2003 e 2007/2010/2013 che consentono di attivare questa funzionalità.

Quando si sviluppa un'applicazione multiutente è preferibile avere un unico DB centrale. L'archivio viene alimentato da diversi client che possono risiedere nella stessa LAN oppure essere connessi remotamente tramite internet. I client remoti solitamente sono dei browser che comunicano con una WebApp installata sul server centrale oppure sono delle applicazioni sviluppate secondo la logica Client/Server (parte del software è sul client [interfaccia] e parte sul server [gestione dati]. Il modulo software client e quello server comunicano tra loro mediante uno scambio di comandi testuali).
Non sempre però questa architettura è applicabile. Si pensi a situazioni dove mancano linee stabili oppure quando sono molto lente. La soluzione per questi casi è quella di creare diversi DB, simili nella struttura ma tra loro indipendenti, che ad intervalli prestabiliti si allineano mediante meccanismi di sincronizzazione. Ogni DB (presso la sede centrale e presso le sedi periferiche) lavora separatamente rispetto agli altri. Questi archivi "indipendenti" vengono assegnati allo stesso set di repliche. Ad intervalli di tempo stabiliti le modifiche locali apportate a ciascun membro vengono applicate anche a tutti gli altri mediante un'operazione di sincronizzazione. Al termine della sincronizzazione i contenuti dei membri dello stesso set di repliche saranno uguali. Se vengono modificati i dati di uno stesso record, presente in due DB diversi dello stesso set di repliche, è possibile che si verifichino conflitti per cui è necessario definire delle regole gerarchiche tra i membri stessi.

Nuovi Valori (Access): I possibili valori sono:
- Incremento: I valori di questo campo verranno incrementati partendo dal valore iniziale 1. Ad ogni nuova scheda verrà assegnato il numero successivo.
- Casuale: I valori vengono sparati a casaccio chiaramente senza duplicati.

Indicizzato (Access): Può assumere come valori: ”NO”, “SI (Duplicati ammessi)”, “SI (Duplicati non ammessi).

L’indicizzazione è una delle funzionalità più importanti dei database ed infatti non è presente in programmi come EXCEL che vengono usati erroneamente per gestire archivi.

Un campo indicizzato è un campo al quale viene affiancata una struttura dati che permette di velocizzare le ricerche e gli ordinamenti.

Se leggo l'archivio DATI seguendo le posizioni indicate dall'indice relativo all' "Età" ottengo un elenco ordinato rispetto a quel campo:

Se invece leggo l'archivio DATI seguendo le posizioni indicate dall'indice relativo al "Nome" ottengo un elenco ordinato alfabeticamente:

Il prezzo dell'indicizzazione è rappresentato da una minor velocità nelle operazioni di aggiornamento dell'archivio (aggiunta/modifica) poiché, oltre alle modifiche sui dati, occorre aggiornare tutti gli indici associati. Nella successiva figura viene mostrato come l'aggiunta di un nuovo record (posto in fondo all'elenco dei dati) determini una serie di operazioni aggiuntive sull'indice (A, B, C, ... , M) che hanno lo scopo di mantenerlo aggiornato.

Negli elenchi ordinati è possibile applicare una serie di algoritmi che abbattono i tempi di risposta nelle ricerche. In un elenco non ordinato l'unica ricerca possibile è quella sequenziale o casuale.

Esempio pratico: Consideriamo un elenco telefonico. L'indice applicato è sul nominativo (se considero solo una singola località!) per cui la localizzazione di un numero di telefono in base al cognome risulta immediata. Immaginiamo ora di ricercare il nominativo della persona che risponde ad un determinato numero di telefono. In questo caso l'indice non ci supporta per cui siamo costretti a scorrere l'elenco, partendo dall'inizio, un numero dopo l'altro fino a che non si arriva a quello richiesto (ricerca sequenziale). I tempi di risposta in questo caso potrebbero essere anche molto lunghi.  

Vediamo in dettaglio i due principali metodi (algoritmi) di ricerca:

Ricerca Sequenziale: Vediamo come calcolare il numero medio di letture necessarie per trovare un nominativo, utilizzando una ricerca sequenziale, in un elenco non ordinato di N schede (record).

Risposta: quando consulto un archivio quello che maggiormente influisce sulla velocità di ricerca è il numero di letture (confronti). Il numero medio di letture quindi è un valido parametro per misurare la bontà del metodo utilizzato nella ricerca. La ricerca sequenziale consiste nello scorrere un archivio partendo dal primo record e procedendo in avanti, una scheda dopo l'altra. Con N schede la casistica delle letture necessarie per trovare un nominativo è: 

1 lettura (se lo trovo al primo colpo), 2 letture (se lo trovo al secondo colpo), ... ,N letture (se il nominativo cercato è in fondo all'archivio)

Tutte queste situazioni sono equiprobabili  e pertanto la loro media rappresenta la soluzione al nostro problema

 1+2+3+ .... N
 N

per induzione possiamo dimostrare che

1+2+3+...N=N*(N+1)/2

da cui segue che il numero medio di letture è (N+1)/2. La formula ottenuta evidenzia come la media dei confronti (letture) aumenti linearmente al crescere dell'archivio rendendo la ricerca sequenziale improponibile in archivi di medie dimensioni. Ad esempio in un archivio di un 1.000.000 di record sono necessari, in media, circa 500.000 confronti prima di estrarre il valore cercato.

Ricerca con indice: In un archivio indicizzato il numero massimo di letture scende a logm N. La base m del logaritmo dipende dall'algoritmo di ricerca utilizzato. Nel caso della ricerca dicotomica m vale 2. Con un 1.000.000 di record, nella ricerca dicotomica, il numero massimo di confronti diventa log2 (1.000.000)=ln(1.000.000)/ln(2)=19,93 confronti. Una cifra irrisoria rispetto ai 500.000 confronti medi della ricerca lineare o sequenziale!

L'algoritmo dicotomico è simile al metodo usato per trovare una parola in un dizionario. Sapendo che il vocabolario è ordinato alfabeticamente non inizio dal primo elemento ma da quello centrale, cioè a metà del dizionario. Si confronta questo elemento con quello cercato e ...
- se corrisponde, la ricerca termina indicando che l'elemento è stato trovato;
- se è inferiore, la tecnica di ricerca procede sugli elementi precedenti (ovvero sulla prima metà del dizionario), ignorando la seconda metà.
- se invece è superiore, la ricerca procede sugli elementi successivi (ovvero sulla seconda metà del dizionario), scartando la prima metà.
La ricerca continua partendo dal centro della metà presa in considerazione e si ripete il metodo finché non trovo l'elemento cercato oppure quando tutti gli elementi sono stati scartati. In questo caso la ricerca finisce indicando che il valore non è stato trovato.

Scarica il file di excel che contiene l'animazione della ricerca dicotomica

“NO”: Il campo non viene indicizzato e pertanto le ricerche saranno lente (sequenziali). Selezioniamo questa proprietà per i campi per i quali non prevedo ricerche od ordinamenti.

“SI (Duplicati ammessi)”: Si tratta di campi soggetti a ricerca che all'interno della tabella accettano valori ripetuti. Si pensi ad esempio al campo Cognome di una ipotetica tabella Alunni: è probabile che vengano effettuate delle ricerche e che ci siano casi di omonimia.

“SI (Duplicati non ammessi): E’ l’indicizzazione usata per i campi chiave (valori unici all'interno della stessa tabella) e per quelli che non devono presentare duplicati. Con questa proprietà "settata" non sarà possibile creare 2 schede, nella stessa tabella, che presentano valori uguali in quel campo. Se questo avviene verrà mostarta questa segnalazione di errore.

 

Il campo significativo è il campo utilizzato dall'utente umano per identificare un record all'interno di una tabella (ad esempio il campo Nominativo nella tabella ALUNNI). Il campo significativo è soggetto a ricerche e solitamente presenta casi di omonimia (ad esempio studenti con lo stesso nominativo!) per cui viene indicizzato con duplicati.

Il campo chiave (primaria) è utilizzato (solitamente dalle procedure eseguite sul computer) per individuare in modo univoco ogni singolo record all'interno di una tabella, aggirando le difficoltà di identificazione derivanti dai casi di omonimia che possiamo avere nel campo significativo. Il campo chiave è soggetto a ricerche ed essendo univoco va indicizzato senza duplicati. Per motivi di performance nelle query è preferibile (ma non obbligatorio!) utilizzare come campi chiave quelli di tipo numerico.

Il campo chiave e il campo significativo sono i campi fondamentali di una tabella e devono essere sempre presenti (talvolta possono coincidere!). Quando progetto una tabella devo identificare immediatamente quali sono le proprietà della realtà che sto modellando che possono assumere il ruolo di campi fondamentali. Se non identifico alcun campo chiave posso creare un campo fittizio ID di tipo contatore che risulta perciò univoco altrimenti utilizzo quello suggerito dalla realtà (ad esempio la Targa per la tabella AUTO). Se il campo significativo non presenta casi di omonimia lo posso utilizzare come campo chiave. Non si tratta però di una scelta valida per 2 motivi:
- se il campo significativo è testuale le performance nelle query, come campo chiave, sono inferiori rispetto a quelli di tipo numerico;
- il campo significativo, anche se univoco, può presentare valori che non risultano immutabili nel tempo. Ad esempio la tabella SCUOLEBRESCIANE contiene nomi di istituti scolastici univoci che però possono variare nel tempo (basti pensare a: Liceo Scientifico Sperimentale Leonardo => Liceo Scientifico Leonardo)

Un campo si dice chiave eleggibile se non presenta mai duplicati. Il campo chiave è scelto tra l'insieme dei campi "chiave eleggibili". Ad esempio, in un'ipotetica tabella STUDENTI, la Matricola e il Codice Fiscale sono i campi chiave eleggibili. Tra i campi chiave eleggibili il campo chiave viene scelto perché più adeguato agli scopi che ci prefiggiamo. Ad esempio la Matricola risulta più adatta nella tabella STUDENTI di un registro elettronico di un singolo docente poiché risulta più corta (e quindi più "gestibile"!) rispetto al Codice Fiscale che richiede la scrittura di 16 caratteri e la raccolta di informazioni personali come la data e il luogo di nascita. Se invece si considera la tabella di tutti gli STUDENTI italiani il Codice Fiscale risulta preferibile poiché immediatamente ci suggerisce alcune informazioni relative allo studente (data di nascita, luogo di nascita, etc) senza che sia necessario leggere ulteriori campi nel record.

Una chiave multipla è un gruppo di campi che identifica in modo univoco un record all'interno della stessa tabella. Ad esempio i campi Nominativo+Telefono nella tabella AMICI rappresentano una chiave multipla. Le chiavi multiple non vengono utilizzate come chiave nei record poiché aumentano la complessità delle query a più tabelle (argomento del secondo modulo). Vengono invece utilizzate per evitare inserimenti multipli dello stesso dato. Si pensi alla tabella STUDENTI di una scuola: il campo Nominativo potrà presentare dei duplicati (dovuti all'omonimia!) ma la terna Nominativo+Classe+DataDiNascita no!

Se si verificasse la rarissima casistica di 2 distinti studenti con lo stesso nominativo, nati lo stesso giorno ed inseriti nella stessa classe sarà necessario ampliare la chiave multipla aggiungendo un ulteriore campo (ad esempio l'indirizzo della loro abitazione).

La soluzione ideale rimane la creazione di un opportuno campo chiave: ad esempio Matricola.



Un campo si definisce "codice parlante" quando, analizzando il suo valore, possiamo dedurre una serie di informazioni relative al record. Ad esempio il Codice Fiscale poiché da questo possiamo stabilire: la data di nascita, la zona di nascita e il sesso. Anche il numero di telefono fisso è parlante: i primi numeri identificano il distretto telefonico di appartenenza.

Formato (Access - OOBase): Questa proprietà è simile al "Formato Celle" di EXCEL.

Consente di visualizzare un dato in modo differente rispetto al suo valore reale, registrato in archivio. Ad esempio, utilizzando il formato potremo visualizzare il numero 12340 come "Lit. 12.340".
Per quanto riguarda il tipo contatore una maschera di formato utile
è la seguente:

Maschera Valore Risultato:
000000 123 000123

In OOBase il tipo contatore viene creato selezionando il tipo di dato BIGINT o INTEGER ed impostando la proprietà "Valore automatico" a SI

La proprietà aggiuntiva "Esempio di formato" per il contatore corrisponde alla proprietà "Formato" di Access.

TIPO TESTO:  

Questo tipo di dato viene utilizzato quando il contenuto del campo è una sequenza di caratteri alfanumerici (stringa) priva di significati temporali o numerici (es. Ragione sociale, nominativo, indirizzo, ...).
Un campo contenente solo caratteri numerici e sul quale non effettuo calcoli
(esempio il CAP e il telefono), deve essere dichiarato come testuale! Infatti se si imposta il tipo numerico al posto di quello testuale le seguenti stringhe (digitate ad esempio da tastiera) verranno convertite in questo modo:

- Il CAP "00200" verrà registrato come numero 200.

- Il TELEFONO 030/2972626 verrà salvato come numero 30 diviso 29726266.

In OOBase questo tipo di dato viene creato selezionando il tipo CHAR o VARCHAR. La differenza tra CHAR e VARCHAR è che CHAR occupa realmente le dimensioni dichiarate poiché la parte inutilizzata viene riempita con spazi. CHAR va utilizzato solo quando sono sicuro che i caratteri dichiarati vengano tutti utilizzati (si pensi ad esempio al codice fiscale che è sempre lungo 16 caratteri).   In OOBase il confronto sui contenuti testuali è case sensitive. Esiste perciò una particolare variante: VARCHAR_IGNORECASE che ignora le differenze tra maiuscolo e minuscolo.

Il tipo testuale è caratterizzato dalle seguenti proprietà aggiuntive:

ACCESS 2003 ACCESS successivi OPEN OFFICE BASE

Le proprietà aggiuntive più importanti sono:

Dimensione campo (Access - OOBase): Indica il numero di caratteri disponibili. Varia da 1 a 255 (28)

In OOBase la dimensione viene specificata nella proprietà "Lunghezza". Contrariamente ad Access la lunghezza non ha un valore massimo ma è limitata solo dalla memoria disponibile. Il tipo CHAR senza dimensioni viene interpretato come un campo composto da un solo carattere. Se in VARCHAR non specifico la lunghezza lo spazio massimo assegnato è di 16Mb. Nel VARCHAR, anche se definisco una dimensione elevata, lo spazio disco occupato sarà comunque limitato a quello realmente utilizzato.

Indicizzato (Access): già visto (vedi contatore)

Richiesto (Access - OOBase): i valori possibili sono “SI” o “NO”. Questa proprietà impedisce il salvataggio del record quando il campo non risulta compilato. Esempio: evito di salvare una scheda STUDENTE se ho dimenticato di digitare il nominativo.

In OOBase questa obbligatorietà è indicata dalla proprietà "Digitazione necessaria". I valori possibili sono "Si" e "No".

Valore predefinito (Access - OOBase): è il valore che viene proposto al momento della creazione della scheda. In OOBase la proprietà ha lo stesso nome. Questa proprietà è utile quando quasi tutti i record di una tabella presentano per quel campo lo stesso valore.
Esempio: Se la mia azienda opera prevalentemente in ambito comunale nel
campo PROVINCIA della tabella MIEI_CLIENTI posso impostare come valore predefinito la stringa "Brescia". Durante l'inserimento di un nuovo record cambierò il valore predefinito solo a quei pochi clienti che non risiedono nella mia provincia. 

ATTENZIONE! Se tutti i record (presenti e futuri) di una tabella risultano possedere sempre lo stesso valore per un campo allora questo va rimosso dalla tabella poiché inutile. Esempio: In una scuola maschile non ha senso definire il campo "sesso" per la tabella "Alunni".

Formato (Access - OOBase): Come nel caso del tipo contatore questa proprietà consente di visualizzare un dato in modo differente da come è stato realmente registrato. Vediamo alcuni esempi di maschere di formato utili per i campi testuali (vanno provate!). In OOBase non esistono particolari formati per il testo

Maschera Valore Risultato: Supportato da:
> "ciAO" "CIAO" Access
< "ciAO" "ciao" Access
@@@@@@@ "ciAO" "ciAO  " Access
!@@@@@@@ "ciAO" "  ciAO" Access

Maschera di input (Access): Obbliga l'utente a seguire delle regole ben precise nell'inserimento dei dati. In questo modo, anche se il db è utilizzato da più persone (multiutente), i dati risulteranno scritti in modo omogeneo (e quindi potranno essere ricercati più facilmente).

Simbolo Valori ammessi vincoli
0 cifra 0 a 9 obbligatoria
9 cifra 0 a 9 o spazio facoltativa
# cifra 0 a 9 o spazio, più e meno facoltativa
L Lettera da A a Z obbligatoria
? Lettera da A a Z facoltativa
A Lettera da A a Z o cifra 0 a 9 obbligatoria
a Lettera da A a Z o cifra 0 a 9 facoltativa
& Qualsiasi carattere + lo spazio obbligatoria
C Qualsiasi carattere + lo spazio facoltativa

vediamo alcuni esempi utilizzabili in campi di tipo testo:

Simbolo Risultato
>L<?????

primo carattere alfabetico obbligatorio reso maiuscolo con > - I restanti al massimo 5 caratteri resi minuscoli con <

"ISBN "00\-0000\-000\-0

Codice ISBN10 presente sul retro dei libri

>LLL\ LLL\ 00L00\ L000L Codice fiscale in maiuscolo

TIPO NUMERICO:

Questo tipo è utilizzato per informazioni di tipo numerico. Come tutti gli altri tipi dispone di una serie di proprietà che ne modificano le caratteristiche (visibili in basso):

ACCESS 2003 ACCESS successivi OPEN OFFICE BASE

Le proprietà principali per il tipo numerico sono:

Dimensione campo (Access)

·      Byte: usato per campi il cui valore varia da 0 a 255 (per i voti può andare bene!). I valori ammessi sono interi positivi (i numeri con decimali sono esclusi)

·      Intero: utile nel caso i valori ammessi siano interi da –32.768 a 32.767 (+/- 215). Usa 2 byte di memoria.

·      Intero lungo: per interi da –2.147.483.648 a 2.147.483.647 (+/- 231) . Usa 4 byte di memoria.

·      Precisione singola (o single): questo tipo consente, al contrario dei precedenti, l’uso della virgola (numeri con decimali). Usa 4 byte e la sua precisione è al massimo di 7 cifre decimali. Accetta numeri il cui modulo è compreso tra 1,401298E–45 (x10-45) e 3,402823E38 (x1038). La rappresentazione binaria utilizzata è detta virgola mobile o floating-point.

·      Precisione doppia: è adatta al calcolo scientifico per la sua estrema precisione. Usa 8 byte. Memorizza numeri compresi tra [–1,79769313486231E308 (x10308), –4,94065645841247E–324 (x10-324)] e [4,94065645841247E–324 (x10-324) e 1,79769313486231E308 (x10308)]. La rappresentazione binaria utilizzata è quella in virgola mobile o floating-point.

·    ID replica: Risulta necessaria nei meccanismi di  replica (sincronizzazione). Usa 16 byte.

·      Decimale: Nei file ADP (Un file ADP è un file di Access che contiene maschere, report, macro, moduli VBA e una stringa di connessione. Tutte le tabelle e le query sono memorizzate nel DB server: SQL Server. L'architettura ADP è stata progettata per creare applicazioni client-server utilizzando la stessa modalità adoperata nello sviluppo di applicazione file-server) questo tipo di dato consente la memorizzazione di valori compresi tra –1038–1 e 1038–1.
Nei normali file di access (Mdb e Accdb) memorizza numeri compresi tra –1028–1 e 1028–1. Usa 2 byte. La proprietà "Precisione" indica il numero numero massimo di cifre accettate prendendo in considerazione sia quelle a sinistra che a destra della virgola decimale. L'attributo "Scala" indica il numero massimo di cifre riservate alla parte decimale (a destra della virgola). Questo tipo utilizza la rappresentazione in virgola fissa o fixed-point..

Mentre in Access abbiamo un generico tipo "Numerico" al quale, sfruttando la proprietà "Dimensioni Campo", abbiniamo una particolare tipologia, in OOBase esistono tipi numerici specifici ed esattamente:

·      TINYINT: Occupa un byte. Adatto a contenere valori interi con range [-128, 127].

·      SMALLINT: Occupa 2 byte. Adatto a contenere valori interi con range [-215, 215-1]=[-32.768 , 32.767].

·      INTEGER: Occupa 4 byte. Adatto a contenere valori interi con range [-231, 231-1].

·      BIGINT: Occupa 8 byte. Adatto a contenere valori interi con range [-263, 263-1].

·      REAL, DOUBLE: Sono tipi equivalenti. Occupano 8 byte. Vengono usati per contenere valori con la virgola in doppia precisione.

·      FLOAT: Equivale al single di Access. E' simile a REAL e DOUBLE ma ha una minore precisione (circa 7 cifre tra parte decimale ed intera). Richiede 4 byte. Vediamo alcuni esempi che mostrano i limiti di precisione per questo tipo di dato. Immaginiamo di digitare in un campo FLOAT i seguenti valori numerici ed analizziamo il valore registrato nel file:

Cosa digito Cosa viene registrato
123456789 registra un valore errato: 123456792
1234567,1 registra un valore errato: 1234567,125
0,12345678 registra un valore errato: 0,1234568
0,1234567 nessun problema
7654321 nessun problema

    Gli errori sono dovuti alla particolare rappresentazione binaria utilizzata (si tratta della notazione "Floating Point " a 32 bit nota anche con la sigla IEEE754). FLOAT è usato per contenere valori per i quali non è richiesta un'accurata precisione.

·      NUMERIC, DECIMAL: In HSQL (motore db utilizzato da OOBase) i tipi sono equivalenti. La loro precisione è specificata indicando esattamente il numero massimo di cifre presenti nel numero (comprese quelle relative alla parte decimale) e nella parte decimale.
Esempi di dichiarazione:
- DECIMAL (2, 1) : definisce un campo che accetta numeri la cui parte intera e decimale possono contenere al massimo una sola cifra. Valori come
9,9 1,0 sono accettati mentre vengono scartati i numeri 10,1 o 1,01.
- DECIMAL(2) : accetta numeri interi da -99 a 99. Nel conteggio delle cifre è escluso il segno e la virgola. Questo tipo è equivalente al "Decimale" di Access

Formato  (Access - OOBase): Consente la visualizzazione dei numeri con il simbolo di valuta e con i punti di separazione delle migliaia. Vediamo alcune maschere di formato adatte ai campi numerici (vanno provate!):

Maschera Valore Risultato: Supportato da:
0,00 0,679 0,68 Access - OOBase
0,631 0,63
0,555 0,56
#,000 [Blu];-#,000 [Rosso] 0,67 ,670 Access
1220,67 1220,670
-12,3 -12,300
[BLUE] #,000;[RED] -#,000 0,67 ,670 OOBase
1220,67 1220,670
-12,3 -12,300
#.##0,00 1220,67 1.220,67 Access - OOBase
220,6 220,60
#.###,00 0,67 ,67
#. 10000 10
0,00% 0,512 51,20%
0,00E+00 0,0123456 1,23E-02
123456 1,23E+05
1,23456 1,23E+00
0,00E+000 123456 1,23E+005
# ?/? 11,33 11 1/3 OOBase
11,75 11 3/4
# ?/?? 11,33 11 32/97
11,025 11 1/40
11,0025 11
# ?/??? 11,33 11 33/100
11,0025 11 1/400

La sintassi relativa ai formati numerici consente la definizione di 4 sezioni separate dal punto e virgola. La prima sezione rappresenta il formato per i positivi, la seconda quello per i negativi;la terza quella applicata allo zero e la quarta per il valore nullo.
Ad esempio la seguente maschera di formato:

"caldo "#,00 [Rosso];"sotto zero "#,00 [Blu];"Zero";"non pervenuta"

produce questo risultato:

Anche in OOBase esiste una maschera di formato analoga suddivisa in tre parti (non viene gestito il NULL!). La maschera di formato sottostante

[RED] "caldo" #,00;[BLUE] "sotto zero" #,00;"Zero"

produce questo output:

In OOBase è possibile creare dei formati personalizzati basati su condizioni. Le condizioni devono essere racchiuse tra parentesi quadre [ ]. Nella costruzione delle condizioni è possibile utilizzare qualsiasi combinazione di numeri ed operatori di relazione (<, <=, >, >=, = e <>). Le condizioni ammesse sono al massimo tre.
Esempio:
per applicare differenti
colori a seconda della temperatura possiamo impostare la seguente maschera di formato:

[<=4][GREEN]"(<4) "#.##0,00;[>=10][RED]"(>=10) "#.##0,00;[BLUE]"([<10,>=4) "#.##0,00

che produce questo risultato:

Access e OOBase posseggono delle maschere di formato predefinite

ACCESS OPEN OFFICE BASE

Posizione decimali (Access):  indica il numero di cifre decimali da visualizzare nelle maschere di formato predefinite (numero generico, fisso, etc). In OOBase non esiste una proprietà analoga. Quando si utilizzano i tipi DECIMAL e NUMERIC la definizione del numero di cifre riservate alla parte decimale riguarda la dimensione del campo e non l'aspetto visivo del dato stesso.

Valore predefinito (Access - OOBase): già visto

Valido se (Access): Permette la definizione dei vincoli di validità sui valori digitati. Ad esempio per impedire inserimenti assurdi nel campo "VOTO" della tabella "VERIFICHE" posso impostare questa proprietà a: “>0 AND <11”.

Messaggio di errore (Access): In questa proprietà si mette la frase mostrata nell'avviso che compare quando la proprietà "Valido se" non viene rispettata. Non è necessario delimitare la frase con i doppi apici ".

TIPO DATA/ORA:

Questo tipo va utilizzato quando l’ordinamento cronologico risulta importante. Per questo tipo di campo non è prevista una dimensione (occupa 8 byte).  Come in Excel, le date sono dei numeri dove la parte intera rappresenta il numero di giorni trascorsi a partire dal 30/12/1899 fino al giorno rappresentato nel campo.

In Access il riferimento al 30/12/1899 si può verificare utilizzando le seguenti istruzioni VBA:
-   
Format(#12/30/1899 00.00.00#,"0.00") oppure
-
  Format(Cdate(0),"dd/mm/yyyy hh.mm.ss")
che visualizzano rispettivamente
0,00 e 30/12/1899 00.00.00.

Le date precedenti il 30/12/1899 vengono registrate come numeri negativi. Il 29/12/1899 viene registrato come -1.
La parte decimale (è interpretata sempre come valore positivo!) invece indica la frazione di giorno trascorsa. Ad esempio:

>> 0,5 corrisponde alle ore 12:00 (se considero il numero come una data completa allora al 30/12/1899 alle ore 12.00).
>>
-0,5 è trattato come un numero positivo per cui è equivalente a 0,5.
>> 1,75 corrisponde al 31/12/1899 alle ore 18.00
>> -1,25 corrisponde al 29/12/1899 alle ore 06.00

In OOBase la gestione dei tipi data/ora è leggermente diversa. I tipi supportati sono:

·      DATE: Questo tipo è utilizzato per registrare una data senza l'orario.

·      TIME: Questo tipo è utilizzato per registrare un orario privo di data. L'orario va registrato nella forma 15.18.32. In fondo all'orario è possibile accodare una parte decimale di due cifre che corrisponde ai centesimi di secondo: 15.18.32,25

·      TIMESTAMP: E' una combinazione del tipo DATE/TIME. Un esempio di valore accettabile è 30/12/2011 18.00.00 .

Anche in OOBase le date sono registrate come numeri razionali dove la parte decimale rappresenta la frazione di giorno. La data di riferimento corrispondente a zero è 30/12/1899 (al null invece corrisponde 01/01/1900).

Come per i tipi precedenti esistono delle proprietà aggiuntive:

Formato: Simile a quello visto per i numeri ma adattato alle specifiche esigenze di un campo data/ora. Anche in questo caso esistono dei formati predefiniti

E’ tramite il meccanismo della maschera di formato che mostro la data 22/09/2002 come "domenica, 22 settembre 2002".

La sintassi per definire la maschera di formato è praticamente identica a quella di Excel.  

Vediamo in dettaglio alcuni esempi (attenzione i comportamenti delle maschere di formato in OOBase potrebbero cambiare a secondo della versione e della localizzazione).

Maschera (ACCESS) Maschera (OOBase) Valore Risultato (ACCESS): Risultato: (OOBase) Osservazioni
g G In ACCESS:
#02/28/2009 08.00.00#

In OOBase
28/02/2009 08.00.00
28 28 giorno del mese con 0 iniziale se il giorno ha una sola cifra
gg GG 28 28  
ggg NN - GGG sab sab  
gggg NNN - GGGG sabato sabato  
m M 2 2  
mm MM 02 02 numero del mese con 0 iniziale se il mese ha una sola cifra
mmm MMM feb feb  
mmmm MMMM febbraio febbraio  
  MMMMM   f prima lettera del mese
a   59   giorno dell'anno
aa AA 09 09  
aaaa AAAA 2009 2009  
  X   dC specifica se prima o dopo Cristo
  RR   dC2009 specifica se prima o dopo Cristo seguito dall'anno
i   6   numero giorno della settimana (1 corrisponde a lunedì)
ii WW 9 9 numero della settimana
q Q 1 T1 trimestre
  QQ   1o trimestre
h H 8 8  
hh HH 08 08 ora con uno 0 iniziale se l'ora ha una sola cifra
n M 0 0  
nn MM 00 00 minuti con uno 0 iniziale se i minuti hanno una sola cifra
  [MM]   480 Minuti trascorsi dall'inizio della giornata
s S 0 0  
ss SS 00 00 secondi con uno 0 iniziale se i secondi hanno una sola cifra
  [SS]   28800 Secondi trascorsi dall'inizio della giornata
  AM/PM   m. OOBASE: visualizza p. per pomeriggio - m. per mattina
0,00 0,00 39.872,33 39.872,33 nr di giorni dalla data di riferimento + 1/3 di giorno

Formati data e ora applicati in modo erroneo a tipi numerici:
gg/mm/aaaa hh.nn.ss 0 "30/12/1899 00.00.00" Access
0,5 "30/12/1899 12.00.00"
gg/mm/aaaa -21 "09/12/1899"
GG/MM/AAAA HH.MM.SS 0 "01/01/1900 00.00.00" OOBase
0,5 "01/01/1900 12.00.00"
GG/MM/AAAA -21 "11/12/1899"

Le sigle indicate nella precedente tabella possono essere combinate tra loro. Ad esempio con le seguenti maschere di formato, applicate alla data 6/2/2002 18.10.59, otteniamo:

gg/mm/aaaa è 06/02/2002
gg/mm/aaaa hh.nn.ss è 06/02/2002   18.10.59
g/mmm/aa è 6/feb/02
gggg è mercoledì
gggg, g mmmm aaaa è mercoledì, 6 febbraio 2002 

Il primo esempio corrisponde (in access) al formato predefinito “Data in cifre (viene identificato anche con la maschera di formato: "ggggg").
Il secondo esempio corrisponde (in access) al formato predefinito “Data generica (viene identificato anche con la maschera di formato: "c").
L’ultimo esempio corrisponde (in access) al formato predefinito “Data estesa (viene identificato anche con la maschera di formato: "gggggg").

Maschera di Input (Access): impone dei vincoli sull’immissione dei dati. Le regole imposte da questa proprietà garantiscono omogeneità nella digitazione dei dati ovvero impediscono scritture differenti per indicare la stessa data (ad esempio il "2 gennaio 2002" potrebbe essere scritto: 02/01/02, 02-01-02, 2 gennaio 2002, 2.1.2002, ...). Le diverse modalità di scrittura accettate per rappresentare lo stesso valore determinano maggior difficoltà nell'individuazione dell'informazione e portano ad uno scadimento delle prestazioni durante le fasi di ricerca. I simboli utilizzati nelle maschere di input sono gli stessi presentati con il tipo "Testo".
Vediamo alcuni esempi di maschere di input applicabili alle date:

Simbolo Risultato
00/00/0000

devo digitare tutti i caratteri che compongono una data completando eventualmente il giorno ed il mese con uno 0 iniziale qualora fosse necessario

##/##/####

posso anche non compilare la data ed inserire degli spazi al posto degli 0 iniziali

Valore predefinito (Access - OOBase): ha lo stesso significato visto per i campi di tipo numerico.
Se imposto questa proprietà a  “=now()” il campo associato, quando aggiungo un nuovo record,  verrà impostato con l'orario corrispondente all'istante di creazione della scheda stessa. Altro valore possibile è "=date()" che imposta come valore predefinito la data di oggi.

Ecco un esempio di inizializzazione per quanto riguarda OOBase:

In OOBase non è possibile inizializzare la proprietà "Valore predefinito" con funzioni come avviene in ACCESS. Per far si che un campo venga alimentato automaticamente con la data e l'orario attuale occorre ricorrere ai  comandi SQL:

ALTER TABLE "NomeTabella" ALTER COLUMN "NomeCampoTimeStamp" SET DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE "NomeTabella" ALTER COLUMN "NomeCampoTimeStamp" SET DEFAULT NOW;
ALTER TABLE "NomeTabella" ALTER COLUMN "NomeCampoTime" SET DEFAULT CURRENT_TIME;
ALTER TABLE "NomeTabella" ALTER COLUMN "NomeCampoTime" SET DEFAULT NOW;
ALTER TABLE "NomeTabella" ALTER COLUMN "NomeCampoDate" SET DEFAULT CURRENT_DATE;
ALTER TABLE "NomeTabella" ALTER COLUMN "NomeCampoDate" SET DEFAULT TODAY;

TIPO MEMO:

Solitamente questo tipo è utilizzato per le note. Può contenere fino a 64 mila caratteri (216) (anche in Access 2007/2010/2013!). Questo campo, nella vecchia versione di Access 97, non poteva essere indicizzato e pertanto le ricerche al suo interno risultavano lente (sequenziali).

Le proprietà di questo tipo di campo sono simile a quelle viste per il tipo testo.

In OOBase il tipo equivalente al memo è LONGVARCHAR che è un sinonimo di VARCHAR senza dimensioni. Il numero massimo di caratteri accettati è 2.147.483.647 (231 byte - 2Gbyte).

TIPO Si/No (booleano):

Viene utilizzato quando si vuole memorizzare un'informazione che accetta al massimo due valori. Ad esempio: 1,0 - Si,No - Vero,Falso - Bianco,Nero - Maschio,Femmina.

Esempio 1: per distinguere nella tabella CLIENTI quelli esteri da quelli nazionali  posso creare un campo booleano  "ITALIANO" che avrà il valore "No" (falso) per i clienti stranieri, "Si" (vero) per quelli italiani.

Esempio 2: per registrare il sesso nella tabella PAZIENTI posso costruire un campo booleano "MASCHIO" che valorizzo a False se si tratta di una "femmina", a True altrimenti.

In molti casi il tipo booleano viene sostituito con un tipo numerico intero dove al falso (false) faccio corrispondere lo 0 e al vero (true) qualsiasi valore diverso da zero.

In OOBase il tipo equivalente è BOOLEAN che assume i valori "<senza>", "Si" e "No".

Formati applicati in modo erroneo a tipi numerici:
Vero/Falso 0 Falso Access
-21 Vero
BOOLEAN 0 FALSO OOBase
-1 VERO
0,5 VERO

TIPO VALUTA:

E’ un tipo numerico che utilizza le impostazione di valuta del sistema operativo ospitante (con Access corrisponde a quello definito nel pannello di controllo di WINDOWS).

Cambiando le impostazioni di sistema cambia il modo con cui vengono visualizzati i valori registrati in questo tipo di dato. Se non si devono costruire applicazioni a diffusione internazionale è un tipo del tutto inutile.

In OOBase non esiste un tipo equivalente.

TIPO OLE:

Questa tipologia di campo consente l'inserimento, all''interno del file di Access, di documenti prodotti con altre applicazioni (ad esempio un foglio di calcolo di Microsoft Excel, un documento di Microsoft Word, suoni o altri dati binari). Vediamo ora un esempio pratico.

Ecco una struttura tabella contenente due campi di tipo OLE (Foto e ProspettoVoti)

La maschera (in "modalità struttura") utilizzata per alimentare questa tabella potrebbe apparire in questo modo

che in modalità "visualizzazione maschera" diventa:

ATTENZIONE! - I campi OLE sono visibili sulla maschera solo se sul PC risultano installate le applicazioni utilizzate nella creazione dei documenti incorporati (nell'esempio Paint [foto] ed Excel [Prospetto voti]).

I campi OLE non sono direttamente visibili in modalità "Foglio Dati" ma occorre fare un doppio click sul campo che ci interessa consultare.

OLE (Object Linking and Embedding = collegamento ed incorporazione di oggetti) è una tecnologia per la creazione di documenti compositi sviluppata da Microsoft. La prima versione di OLE (rilasciata nel 1991) permetteva di integrare un documento creato con un'applicazione (detta server OLE) all'interno di un'altra applicazione (detta client OLE). Per superare i limiti della prima versione, nel 1993 fu rilasciato OLE 2, la cui principale caratteristica era la possibilità di modificare i documenti incorporati direttamente nell'applicazione ospitante. Durante la modifica dell'oggetto OLE il programma ospitante  acquisisce la stessa interfaccia utente (menu, barre degli strumenti ecc.) dell'applicazione che è stata utilizzata per creare l'oggetto incorporato.

Esempio: se faccio doppio click sulla foto mi accorgo che i menu di Access acquisiscono l'aspetto tipico di microsoft paint (applicazione con cui ho creato l'immagine).

mentre se faccio doppio click sul prospetto dei voti noterò i menu tipici di Excel

Quando non sto modificando un campo OLE i menu tornano ad essere quelli predefiniti di ACCESS.

Un'altra caratteristica di OLE 2 è la possibilità di spostare oggetti tra applicazioni diverse con il drag & drop.

OLE 2 è implementato con il protocollo COM. COM è una tecnologia che permette di creare componenti software riutilizzabili. In un certo senso COM permette di fare a livello di programmazione ciò che OLE permette di fare a livello di documento. A livello software il confine tra OLE e COM è quindi molto sfumato, ed infatti il nome OLE è spesso usato per identificare tecnologie basate su COM che con lo scopo di OLE (i documenti compositi) non hanno nulla a che fare.
COM è una tecnologia complessa e per i computer del 1993 era decisamente pesante. Per questo i primi software che utilizzavano OLE 2 (Word 6 e Excel 5) avevano delle prestazioni non proprio eclatanti. Con l'aumento della potenza di calcolo COM e OLE sono diventate tecnologie molto diffuse nei sistemi Windows a 32 bit (ad esempio, Internet Explorer è un oggetto COM, ed è grazie ad OLE che nella finestra del browser è possibile visualizzare e modificare un documento di Word).
Sebbene COM abbia subito nel tempo una notevole evoluzione, OLE 2 è rimasto fondamentalmente invariato, anche perché svolge al meglio il compito di creare documenti compositi. Il futuro di COM è incerto, perché con l'introduzione della piattaforma .NET Microsoft ha relegato questa tecnologia ad un ruolo di secondo piano.

Un campo OLE può arrivare ad una dimensione di 1 GigaByte (purché vi sia spazio disco disponibile!). In Access l'uso di OLE come tipo di campo presenta due inconvenienti principali:

- Il contenuto non è leggibile se non ho installato il software che ha generato il documento incorporato
- Il documento incorporato è salvato all'interno della tabella di access per cui le dimensioni del file mdb/accdb possono crescere molto velocemente.

Esistono delle alternative al campo OLE:

·    Collegamento Ipertestuale: Si tratta di un campo testuale che può contenere fino a 2048 caratteri. Il contenuto viene utilizzato come un indirizzo di collegamento ipertestuale. Un indirizzo di collegamento ipertestuale può essere :
>> un URL relativo ad un sito Internet o Intranet. (URL è l'acronimo di Uniform Resource Locator ovvero una sequenza che specifica:
- il protocollo da utilizzare [ad esempio HTTP o FTP]
- il percorso per raggiungere la risorsa (un documento, una pagina Web, ...) in  Internet o Intranet.
Ad esempio http://www.brescianet.com/appunti/db/corso.htm.)

>> un percorso di rete UNC. (UNC è l'acronimo di Universal Naming Convention ovvero una  convenzione di denominazione (regola di naming) che consente l'individuazione di un file all'interno di una rete locale. [LAN]
Un esempio di UNC è \\MioPC\Documenti\Pioppo.txt.)


Un indirizzo di collegamento ipertestuale è composto al massimo da tre parti:
>> Testo da visualizzare: è il testo che viene visualizzato in un campo o controllo.
>> Indirizzo: è il percorso della risorsa collegata (ad esempio una pagina Web o un file). E' scritto secondo la convenzione UNC  oppure come URL. In questo caso può contenere un sottoindirizzo (segnalibro) che identifica una posizione ben precisa all'interno della pagina oppure dei parametri.
>> Descrizione: è il testo che viene visualizzato come suggerimento in un tooltip.

·      Allegato (è disponibile solo se il file di Access è stato salvato in formato 2007/2010/2013): Utilizzando questa tipologia è possibile allegare ai singoli record di una tabella immagini, fogli di calcolo, documenti, grafici e altri tipi di file supportati in una modalità simile a quella utilizzata per i messaggi di posta elettronica. È inoltre possibile visualizzare e modificare i file allegati, sulla base delle impostazioni definite per questo tipo di campo durante la progettazione del db. I campi Allegato offrono una maggiore flessibilità rispetto ai campi OLE ed utilizzano lo spazio di memorizzazione con maggiore efficienza poiché non incorporano l'allegato all'interno del campo.

    Quando sono in modalità "Foglio dati" con un doppio click sul campo "allegato" richiamo una finestra di dialogo che consente la definizione dei documenti da allegare

In modalità "Visualizza Maschera" i campi allegati appaiono con l'icona associata al documento allegato che in quel momento risulta attivo. Opportuni bottoni semitrasparenti permettono di scorrere i documenti allegati.

In OOBase i tipi di dato equivalenti sono:

·      BINARY: In generale questo tipo contiene una sequenza fissa di byte. La parte non utilizzata viene riempita con 0. In OOBase l'interfaccia grafica di definizione dei campi non fa alcuna differenza rispetto agli altri tipi binary. Infatti se utilizzo questo tipo la proprietà "lunghezza" rimane bloccata ed impostata a 2 Gbyte.

·      VARBINARY: Questo tipo contiene una sequenza di byte a lunghezza variabile. In OOBase l'interfaccia grafica di definizione dei campi non fa alcuna differenza rispetto al LONG VARBINARY. Infatti anche in questo caso la proprietà "lunghezza" risulta bloccata a 2.147.483.647 (2Gb) e non è accessibile.

·      LONG VARBINARY: Contiene una sequenza di byte variabile fino a 2 Gbyte. Utilizzato per contenere documenti binari tra cui immagini.

·      OTHER: Contiene una sequenza di byte variabile fino a 2 Gbyte.

TIPO CAMPO RICERCA (Access):

Questa tipologia non è un vero e proprio tipo ma attiva un meccanismo di autocomposizione che consente l'uso di un combobox/listbox come meccanismo di input.

Selezionando questa tipologia si attiva la seguente maschera di autocomposizione:

In realtà il meccanismo del "campo ricerca" può essere implementato per qualsiasi tipo di campo ad esclusione di quelli automatici  (contatore) e binari (OLE, Allegato ad esempio).

Vediamo come procedere:

1) Partendo dalla struttura della tabella clicchiamo sul campo per il quale si vuole creare l'elenco a discesa.

2) Nella parte bassa della maschera clicchiamo sul pannello "Ricerca"

3)  Compiliamo la prima proprietà presente nel pannello "Ricerca" in questo modo

- Visualizza controllo: selezioniamo il tipo di controllo: "Casella di riepilogo"

oppure "Casella combinata". Verranno mostrate le proprietà abbinate al controllo selezionato (i pallini verdi evidenziano quelle aggiuntive visualizzate quando seleziono "Casella combinata")

Se impostiamo "Visualizza controllo" a "Casella di testo" l'elenco a discesa non verrà visualizzato e il campo potrà essere compilato (in modalità "Foglio dati") semplicemente digitando il valore nella cella abbinata.
- Tipo origine riga: impostiamolo su "Elenco valori" (ignoriamo quindi le altre due possibilità: "Tabella/query" ed "Elenco campi").
- Origine riga: elenchiamo i valori da visualizzare separandoli con un punto e virgola. Ad esempio:
1;Storia;2;Geografia;3;Informatica. Se "Tipo origine riga" è impostato su "Tabella/query" in questa proprietà viene inserito un comando SQL di selezione (ad esempio: SELECT Matricola, Nominativo FROM Studenti).
- Colonna associata: indica la colonna del combobox da cui viene estratto il valore da registrare nel campo.
-
Numero colonne: indica il numero di colonne presenti nel combobox. L'elenco di valori in "origine riga" verrà suddiviso in gruppi di "Numero Colonne" elementi. Ogni gruppo verrà inserito su ciascuna riga del combobox.

Origine riga:"1;Storia;2;Geografia;3;Informatica"

Numero colonne = 1 Numero colonne = 2 Numero colonne = 3

- Larghezza elenco: indica la larghezza in cm. dell'elenco quando viene aperto
Larghezza elenco=
5,079 cm
Larghezza elenco=
2,801 cm

- Larghezza colonne: indica la larghezza di ciascuna colonna espressa in cm. Ponendo una larghezza a 0cm nascondo la colonna associata (utile per occultare gli id e mostrare solo il campo significativo). Ecco alcuni esempi:

Larghezza colonne=
2,54 cm;2,54 cm
Larghezza colonne=
0 cm;2,54 cm
Larghezza colonne=
0,701cm;2,547cm

- Intestazione colonne: Se la imposto a "Si" il primo gruppo di "Origine riga" (composto da "Numero colonne" elementi) verrà usato per intitolare le colonne.

Origine valori= 1;Storia;2;Geografia;3;Informatica Origine valori= Id.;Materia;1;Storia;2;Geografia;3;Informatica

- Consenti più valori (solo Access 2007/2010/2013): Se lo imposto a "Si" potrò selezionare più righe. In questo caso il campo verrà trasformato in campo testuale. Attenzione: una volta impostata questa proprietà a "Si" non è possibile ritornare sul "No".