Introduzione a
MS Access
Paolo Manghi
(Draft)
Access
1
03/06/2017
Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo”
ISTI - National Research Council (CNR)
web http://www.isti.cnr.it/People/P.Manghi
Access
2
03/06/2017
Indice
1 Introduzione .......................................................................................................................... 4
2 Tabelle..................................................................................................................................... 5
2.1 Definizione delle tabelle.................................................................................................... 6
2.2 Relazioni tra tabelle: chiave esterna .................................................................................. 7
2.3 Inserimento dati in una tabella .......................................................................................... 8
3 Interrogazioni ......................................................................................................................... 9
3 Maschere .............................................................................................................................. 11
4 Rapporti................................................................................................................................. 11
Access
3
03/06/2017
1 Introduzione
Un database è un modello, una rappresentazione, di una certa realtà di interesse.
Tipicamente una realtà è caratterizzata da alcune classi di entità interessanti. Una classe
è un insieme mutabile nel tempo di entità caratterizzate dalle stesse proprietà.
Ad esempio, si consideri la realtà della sede centrale dell’FBI. Tra i vari archivi, qui si
troveranno quelli relativi alle schede informative dei dipartimenti e degli agenti FBI nel
mondo. Entrambi gli archivi servono alla gestione delle attività della sede: ad esempio per
reperire informazioni relative a un singolo agente o dipartimento, oppure, combinando le
schede, partendo dalla scheda di un agente, per risalire ad informazioni relative al
dipartimento per il quale lavora un particolare agente. Le classi di entità rilevanti di questa
realtà sono Agenti e Dipartimenti, le cui entità sono rispettivamente tutte le schede negli
archivi degli agenti e dei dipartimenti. Proprietà di queste classi sono ad esempio il nome
degli agenti, oppure la specializzazione dei dipartimenti.
Generalmente, in un database relazionale ogni classe è rappresentata da una tabella (o
relazione, da cui l’aggettivo “relazionale”), ogni proprietà di una classe è rappresentata da
un campo della tabella e ad ogni entità nella realtà corrisponde un record della tabella.
MS Access è un Sistema per la Gestione di Basi di Dati relazionale con interfaccia grafica.
Consente quindi la definizione delle tabelle di un database, delle associazioni tra di esse e
delle applicazioni per gli utenti, utili per accedere ai dati attraverso interfacce utente
funzionali.
Per creare un nuovo database Access, eseguire l’applicazione e dal menù file, selezionare
la voce Nuovo (New). Per iniziare, scegliere di creare un database vuoto, dargli un nome
(FBIDB) e crearlo. Apparirà la finestra del database:
Da questa finestra è possibile creare oggetti da inserire nel database. Fondamentali per lo
sviluppo di un’applicazione sono gli oggetti Tabelle (Tables), Interrogazioni (Queries),
Maschere (Forms) e Rapporti (Reports), che vedremo nel seguito. I restanti oggetti
riguardano lo sviluppo di applicazioni più complesse e non vengono discussi in questo
documento.
Dal punto di vista operativo l’insieme degli oggetti di un database Access (tabelle,
interrogazioni, maschere e report) equivale a un singolo File sul disco, con estensione
MDB.
Access
4
03/06/2017
2 Tabelle
Data una realtà, definire quali e quante tabelle sono necessarie per il database
corrispondente non è compito facile. Tipicamente, ad ogni collezione di entità corrisponde
una tabella, la quale contiene a sua volta un record per ogni entità. Se osserviamo la
tabella Access relativa agli Agenti, essa è suddivisa in righe e colonne.
Ogni riga rappresenta l'equivalente di una scheda dell'archivio degli agenti, quindi di una
specifica entità agente, e viene detta record. Ogni colonna della tabella è chiamata campo
ed è associata ad una proprietà della classe di entità agenti. Un database può quindi
essere formato da più tabelle correlate tra di loro (ad esempio Agenti e Dipartimenti).
Altro compito non semplice è identificare quali campi dobbiamo considerare per una certa
tabella, in altre parole stabilire quali proprietà di una classe di entità siano rilevanti per gli
scopi della nostra realtà. Ovviamente una proprietà è interessante solo se abbiamo la
necessità di operare su di essa. Nel caso della classe agenti, ad esempio, possiamo
assumere che le proprietà interessanti siano Nome, Codice e Data di assunzione.
D'altro canto, se si dovesse consultare questa tabella per individuare un agente e
mandargli una lettera, dovremmo avere anche l'indirizzo del dipartimento. La soluzione più
immediata sembrerebbe quella di aggiungere un campo IndirizzoDipartimento alla tabella
Agenti. Tuttavia, un’analisi più approfondita ci mostra l’inefficienza in termini si spazio e
tempo di questa scelta. Ad esempio, se 40 agenti afferiscono allo stesso dipartimento,
dovremmo inserire nel database 40 volte lo stesso dato dell'indirizzo del dipartimento.
Inoltre, se un dipartimento modificasse l’indirizzo, per coerenza dovremmo andare a
modificare il campo indirizzo di tutti e 40 gli agenti.
Ciò è dovuto al fatto che l'indirizzo presso cui lavora un agente è in realtà una proprietà
dei dipartimenti. La soluzione sta quindi nel creare una tabella relativa alla classe
Dipartimenti con proprietà Indirizzo e Specializzazione. In questo modo, l’indirizzo è
ripetuto una sola volta per ogni dipartimento. Rimane comunque irrisolto il problema di
risalire al dipartimento di un agente. Per questo è necessario un minimo di nozioni di
database relazionali, che vedremo nel seguito.
A questo punto, possiamo porci un altro tipo di problema. Visto che abbiamo intenzione di
cercare tra i dipartimenti in base al continente e/o allo stato in cui si trovano, allora è bene
riportare come proprietà della classe Continente, Stato e Indirizzo.
Access
5
03/06/2017
2.1 Definizione delle tabelle
Le tabelle sono definibili e manipolabili visualmente. Dalla finestra del database
selezionare Nuovo nel sottomenù Tabelle.
Di ogni campo della tabella, oltre al nome e al tipo (numerico, data, ora, valuta, valore
si/no, oggetto esterno), è possibile specificare la dimensione, il formato di visualizzazione
del valore, un breve commento, un eventuale valore predefinito, un vincolo d'integrità sui
valori del campo (limitare i valori che un campo può contenere: ad esempio
DataAssunzione potrebbe essere non superiore alla data odierna) e la creazione o meno
di un indice (struttura dati per l’accesso efficiente ai record).
Si crei la tabella Agenti come segue:
Una tabella deve avere una chiave primaria, cioè insieme di campi i cui valori distinguono i
record della: una tabella non può contenere due record che hanno gli stessi valori di
chiave primaria. Ad esempio, visto che il codice identifica univocamente un agente FBI,
sopra abbiamo definito il campo Codice chiave primaria di Agenti: selezionare il campo
Codice e premere il tasto destro del mouse, quindi scegliere l’opzione chiave primaria
(primary key). Notare che il codice è un campo numerico, che in ogni record è inserito
dall’utente unitamente al nome e alla data di assunzione. Access ritorna un errore per
ogni tentativo di inserire un record con gli stessi valori di chiave primaria di un altro.
Si crei la tabella Dipartimenti come segue:
Access
6
03/06/2017
In questa tabella la chiave primaria è codiceDipartimento. Tale valore non esiste nella
nostra realtà iniziale come proprietà della classe dipartimenti. Il campo è stato aggiunto nel
database per distinguere univocamente un dipartimento da tutti gli altri, in maniera più
diretta che confrontando gli indirizzi completi (Continente+Stato+Indirizzo). Si noti che il
tipo del campo è AutoNumber. I valori contenuti in campi di questo tipo sono generati
automaticamente dal sistema. L’utente, quando inserisce un record in Dipartimenti, si
limita ad inserire i valori dei rimanenti campi.
Una tabella può essere modificata anche dopo la creazione. Si possono cancellare od
aggiungere campi e cambiarne l'ordine (operazione che ha effetto sulla visualizzazione
della tabella, vedi Paragrafo 2.3). Per fare questo scegliere il bottone Struttura (Design)
quando è selezionato il sottomenù Tabelle ed è selezionata la relazione da modificare.
2.2 Relazioni tra tabelle: chiave esterna
Nei sistemi relazionali è possibile collegare i record di diverse tabelle definendo una
chiave esterna, cioè un campo (o più di uno) che contiene i valori di una chiave primaria di
un’altra tabella. Nell’esempio sopra non è stata definita nessuna chiave esterna. Questo
ha come conseguenza il fatto che, dato un agente, non è possibile in nessuna maniera
ricondursi al dipartimento ad esso associato e quindi, ad esempio, spedirgli una lettera.
Accediamo di nuovo alla tabella Agenti e modifichiamola come segue:
Access
7
03/06/2017
Ogni record in Agenti è ora sempre associato ad un dipartimento, in quanto abbiamo
forzato la presenza del valore per il campo Dipartimento ponendo la proprietà Required
(obbligatorio) a Yes. Ogni tentativo di inserire un record che non contiene un valore per
Dipartimento restituirà un errore. Si noti che il tipo del campo di chiave esterna è lo stesso
del campo di chiave primaria (Long Integer nell’esempio).
In ACCESS è necessario rendere esplicita la relazione tra chiave esterna e chiave
primaria. Premere l’icona
. Dopo avere aggiunto le tabelle Dipartimenti e Agenti da
mettere in relazione tramite l’apposita finestra, effettuare il collegamento tra i campi di
chiave esterna e chiave primaria: trascinare con il mouse il campo codiceDipartimento sul
campo Dipartimento e lasciare il bottone del mouse. Alla nuova finestra premere OK.
2.3 Inserimento dati in una tabella
Una tabella può essere visualizzata in forma tabellare (tabular), come un foglio elettronico,
selezionandola nella finestra del database e premendo il bottone Apri (Open). In questa
forma è possibile effettuare operazioni per inserire, modificare e cancellare i dati nello stile
di Office.
Quelle che seguono sono le due tabelle Agenti e Dipartimenti in forma tabellare
(worksheet) con un po’ di dati, provare ad inserirli:
Access
8
03/06/2017
Notare come per il campo di tipo AutoNumber il valore viene automaticamente generato
dal sistema.
3 Interrogazioni
Un'interrogazione (query) consente il recupero dei dati da una o più tabelle in base ad
alcune condizioni logiche e di visualizzazione. Una query ritorna come risultato una nuova
tabella. Nella sua forma più semplice, una query è composta da
1. una tabella da cui recuperare i dati;
2. alcuni criteri di ricerca dei dati: un insieme di condizioni che devono essere rispettate
dai campi dei record che si intendono recuperare;
3. struttura del risultato: insieme di campi dei record della tabella iniziale di cui si intende
ritornare il valore.
L’esecuzione della query consiste quindi nello scorrere i record della tabella, e nel
ritornare i campi interessanti di quei record i cui campi verificano le condizioni. Ad esempio
se un utente è interessato a recuperare il nome e il codice di tutti gli agenti assunti prima
del 1980, dovrà scrivere una query sulla tabella Agenti che ritorni i campi Nome e Codice
di quei record per cui vale DataAssunzione < 1980.
Una query può essere eseguita anche su due (o più) tabelle. In particolare, due tabelle in
relazione tra loro (vedi Agenti e Dipartimenti) sono considerate in condizione di giunzione.
È cioè implicito il fatto che l’esecuzione di una query consiste innanzitutto nell’ottenere una
sola nuova tabella i cui campi sono tutti quelli delle due tabelle in relazione. Tale tabella
conterrà quindi record ottenuti combinando i record delle due tabelle, in modo da ottenere
un record per ogni coppia di record nelle tabelle che hanno chiave primaria ed esterna
uguale. Nell’esempio, ogni record nella giunzione di Agenti e Dipartimenti conterrà i dati
relativi alle coppie agente-dipartimento in relazione tra loro. Quindi l’esecuzione prosegue
come sopra descritto, a partire dalla tabella risultante. Un esempio di interrogazione simile
Access
9
03/06/2017
è una query che seleziona il nome, la data di assunzione e la specializzazione del
dipartimento di tutti gli agenti che operano in dipartimenti in Asia. La query dovrà operare
sulle tabelle in relazione Agenti e Dipartimenti e richiedere la visualizzazione dei campi
Nome, DataAssunzione e Specializzazione per quei record per cui Continente=”Asia”.
Per creare una nuova interrogazione scegliere Nuovo quando è selezionato il sottomenù
Queries nella finestra del database, quindi visualizzazione struttura (Design View). La
finestra di composizione di un’interrogazione è divisa in due parti. In quella superiore sono
riportate le tabelle su cui viene fatta la ricerca. Per aggiungere e togliere le tabelle
utilizzare rispettivamente il bottone
e il tasto Delete della tastiera. Nella parte inferiore
vengono specificati quali campi devono apparire nel risultato (quelli con la checkbox
confermata) e le condizioni che devono valere sul risultato (Criteria). È possibile
specificare altre caratteristiche, come un eventuale ordinamento o funzioni di
aggregazione (somma, conteggio, media ecc.). Per aggiungere un campo fare doppio click
sul campo stesso nella tabella corrispondente, visualizzata nella parte superiore della
finestra della query.
Ad esempio, la query con giunzione esemplificata sopra appare come graficamente come
segue:
Provare a crearla. Per eseguirla premere il bottone
è:
Access
10
. Il risultato, sui dati riportati sopra,
03/06/2017
Un'interrogazione definita con questa interfaccia viene tradotta automaticamente dal
sistema in un'espressione SQL. Questa espressione può essere visualizzata e modificata
direttamente da un utente che conosca il linguaggio SQL. Per vedere la versione SQL
della query, aprire la query e scegliere la voce Visualizza SQL (SQL View) dal menù
Visualizza (View).
3 Maschere
Una maschera permette di visualizzare i dati di una tabella o query a cui è associata e di
operarvi per compiere inserzioni, modifiche, ricerche o cancellazioni.
La composizione di una maschera può avvenire manualmente utilizzando strumenti di
composizione grafica, oppure attraverso un meccanismo di generazione semi-automatica.
Una maschera può contenere parti immutabili (testi fissi od abbellimenti grafici), campi per
la visualizzazione o l'inserzione di dati nella tabella, oppure pulsanti di comando che
attivano operazioni definite dall'utente in maniera opportuna.
Per creare una maschera selezionare Maschere dalla finestra del database e premere
Nuovo. Scegliere la creazione guidata (Form Wizard): verrà chiesto su quale tabella
generare la maschera, quali campi della tabella devono essere visualizzati e quale stile
dovrà avere la maschera (presentazione dati e grafica). Ad esempio la maschera relativa
ad Agenti può essere della semplice forma: presentazione dati colonnare (columnar) e
stile standard.
4 Rapporti
Un rapporto è analogo ad una maschera ma è utilizzabile solo per la stampa. Nel rapporto
è possibile specificare aggregazioni sui dati con gli usuali operatori di somma, media ecc.
Anche i rapporti sono definiti visivamente utilizzando accorgimenti analoghi a quelli delle
maschere, con una maggiore cura su aspetti tipografici, quindi possono essere visualizzati
per controllo e infine stampati.
Un aspetto interessante è la possibilità di inserire in un rapporto o in una maschera grafici
generati automaticamente a partire da campi di una tabella. Il sistema propone un formato
standard che l'utente può modificare con uno strumento apposito (Microsoft Graph).
Come per le maschere, è possibile creare un rapporto con una creazione guidata; a partire
dalla finestra del database selezionare il sottomenù Rapporti e premere Nuovo.
Access
11
03/06/2017