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