ECDL 5-15.

Di Giuseppe Servidio

Modulo 5.

Lezione 15. - Le query di comando.

In questa lezione impareremo a generare ed utilizzare le query di comando.

In questa lezione impareremo una serie di query estremamente pericolose. Fino a questo momento abbiamo creato e usato query che si limitavano ad estrarre
dei dati dal nostro database e a mostrarceli. Qualunque tipo di estrazione non portava loro alcun danno, perché potevamo solo vederli. Questa lezione invece
ci permetterà di scrivere delle query che modificheranno i dati presenti nella tabella su cui agiranno. Le query di comando sono molteplici: iniziamo subito
a vederne qualcuna. La prima che impareremo è la query di creazione tabella.

Iniziamo aprendo il nostro database. Scegliamo di lavorare sulle query e accettiamo la scelta di creazione della query in visualizzazione struttura. Nella
finestra Mostra Tabelle, scegliamo la tabella Indirizzi e premiamo alt+a per aggiungi o scegliamo tramite TAB il pulsante Aggiungi e premiamo INVIO; poi,
scegliamo il pulsante Chiudi o usiamo la combinazione tasti per attivarlo.

Vediamo ora come possiamo agire in presenza della griglia di creazione della query. Inseriamo, con la solita tecnica, i campi Cognome, Nome, Data di nascita
e Sesso. Nella colonna del cognome, riga ordinamento, scegliamo crescente. Fin qui nulla di nuovo: questa è una query di selezione che estrae, ordinandola,
una parte della tabella e la visualizza, senza però modificarne il contenuto.

Ora vogliamo modificarla perché faccia qualcosa di più.

Finora abbiamo usato il menù Query solo per trovare la scelta Esegui. Cerchiamo adesso, tramite le frecce, la scelta Query di creazione tabella e premiamo INVIO.
Ci viene chiesto il nome della tabella; immettiamo "prova" e premiamo TAB. Ci troveremo di fronte a due scelte,. In questo momento è attiva "database corrente",
ma se usiamo freccia giù, potremo attivare "altro database". Questo significa che possiamo creare la nuova tabella sia nel database corrente, sia in un altro
database. Se scegliessimo la seconda possibilità, ci verrebbe chiesto il nome del database. Scegliamo invece "database Corrente", poi OK. Ci viene ripresentata
la griglia, così come noi l'avevamo impostata. Eseguiamo adesso la query. Il sistema ci indica il numero di record che verranno incollati nella nuova tabella
(8) e ci avverte che dopo aver scelto sì non potrà essere usato il comando Annulla. Alla domanda se vogliamo creare la nuova tabella, rispondiamo, ovviamente,
di sì. Naturalmente potevamo aggiungere delle condizioni alla nostra query. Ad esempio, mettere M oppure F nel campo Sesso. Questo avrebbe modificato il
numero di record della nuova tabella. Abbiamo ancora davanti la griglia con la nostra query. Possiamo chiuderla tramite il menù File e non salvarla. Se
andiamo ora nell'etichetta Tabelle, noteremo subito che la tabella Prova che avevamo chiesto di creare è stata aggiunta all'elenco. Apriamola in visualizzazione
foglio dati (basterà premere INVIO). Noteremo che per tutti i componenti della nostra tabella Indirizzi abbiamo riportato qui cognome, nome, data di nascita
e sesso.

Questo è il primo esempio di query di comando. Abbiamo modificato il nostro database, aggiungendo ad esso una nuova tabella che ha preso una selezione di
dati da una già esistente. Voglio ripetere che questo tipo di query è molto particolare, e voglio dare un consiglio che chiedo proprio di seguire.
Prima di eseguire una query di comando, fare in modo che essa sia una query di selezione; poi osservare i dati che vengono estratti, e solo quando si deciderà
che sono esatti, trasformiamola in query di comando; in questo caso di creazione tabella; ma la cosa vale per tutti i tipi! Se useremo questo modo di lavorare,
ci verranno evitate molte grane.

Continuiamo la nostra analisi. Scegliamo nuovamente la linguetta Query, poi Nuovo e poi visualizzazione struttura. Nella finestra Mostra tabelle scegliamo questa
volta Prova (ricordarsi di chiudere la finestra dopo aver scelto il pulsante Aggiungi). Nella griglia scegliamo solo il campo Sesso. Poi, dal menù Query,
scegliamo query di aggiornamento. Noteremo che è stata aggiunta una riga prima dei criteri, la riga Aggiorna a, ed è proprio lì che siamo posizionati. Questo
ci consente di aggiornare il campo Sesso col valore che si vuole. Scriviamo F, poi eseguiamo la query. Anche in questo caso ci verrà indicato il numero di
record che saranno aggiornati e ci verrà ricordato che non si potrà usare il comando Annulla. Vogliamo aggiornare il campo Sesso, e quindi premiamo INVIO
per scegliere il pulsante Sì. Chiudiamo la query come abbiamo fatto prima, attraverso il pulsantemenù File, poi andiamo a controllare cosa è avvenuto nella tabella
Prova. Come potevamo aspettarci, tutti i record hanno F nel campo sesso!

Così abbiamo visto un secondo tipo di query di comando. Questa query consente di aggiornare o un solo campo in tutti i record di una tabella, oppure, utilizzando
dei criteri di selezione, aggiornare solo alcuni campi di alcuni record estratti. Facciamo una prova un po' piu' complessa. Creiamo una nuova query utilizzando
la tabella Prova. Non dirò più neanche queste operazioni, perché do per scontato che ormai le conosciamo bene. Se non le ricordiamo, non ci preoccupiamo;
facciamo riferimento alle lezioni precedenti.

Nella griglia, scegliamo cognome e sesso. Nella riga Criteri del cognome, scriviamo: G & "*". Ci ricordiamo? Significa tutti i cognomi che iniziano con G. Scegliamo
adesso, dal menù Query, query di aggiornamento. Nel campo Aggiorna a del campo Sesso scriviamo M. Questa query, quando la eseguiremo, aggiornerà con M
il campo Sesso di tutti i record il cui cognome inizia con G. Eseguiamola, allora! Il numero di record che verranno aggiornati è due. Evidentemente sono
solo due i record il cui cognome inizia con G. Premiamo INVIO per scegliere Sì, chiudiamo la query senza salvare, e controlliamo il risultato sulla tabella Prova.
Come ci potevamo aspettare, Giovannini e Governato hanno il campo sesso uguale ad M. Questa query di aggiornamento non ha modificato tutti i record della
tabella, ma solo quelli che soddisfacevano a certe condizioni da noi indicate.

Continuiamo l'esplorazione delle query di comando e andiamo a creare un'altra query, scegliendo sempre la tabella Prova. Collochiamo nella griglia i campi
Cognome, Nome, Data di nascita e Sesso. Dal menù Query, scegliamo Query di Eliminazione. Poi, nella riga Criteri del campo Sesso, scriviamo M. Il risultato che
ci aspettiamo è che i due record che avevamo appena aggiornati, quelli con Sesso = ad M, siano cancellati. Eseguiamo quindi la nostra query. Se andiamo
a controllare la tabella, dopo aver chiuso senza salvare la finestra della nostra query, noteremo che i due record con cognome Governato e Giovannini non
sono più visibili. Questo tipo di query è molto utile, ad esempio, per svuotare tabelle di lavoro. Se per effettuare la stampa di alcuni indirizzi, mettiamo
in una tabella di lavoro delle etichette appena create, questa tabella dovrà essere svuotata alla fine del lavoro; altrimenti, la prossima volta, i nuovi
indirizzi verranno aggiunti a quelli vecchi facendoci stampare indirizzi che non volevamo. Per fare una query di eliminazione che svuoti completamente una
tabella, basta mettere nella griglia della query solo un campo, senza alcun criterio, scegliere Query di eliminazione, ed eseguirla. La tabella verrà vuotata
di tutti i suoi record.

Vediamo ora un altro tipo di query di comando: la query di accodamento. Creiamo una nuova query in visualizzazione struttura, utilizzando la tabella Indirizzi.
Poniamo sulla griglia gli stessi campi che erano presenti nella tabella Prova: Cognome, Nome, Data di nascita, Sesso. Dal menù Query, scegliamo adesso
query di accodamento. Compare una finestra, intitolata "Accodamento", che ci chiede a quale tabella vogliamo accodare i dati. Immettiamo Prova. Questa
finestra è molto simile a quella della creazione tabella. Premiamo TAB; ci va bene la scelta Database corrente; premiamo ancora TAB per dare OK. Questa
query quindi accoderà alla tabella Prova i record della tabella Indirizzi. In particolare, come potremo notare dalla nuova griglia che si presenta e precisamente
dalla riga aggiunta "accoda a", accoderà il cognome di Indirizzi nel cognome di Prova e così via. Questo perché i nomi dei campi delle due tabelle sono
identici. Se, ad esempio, la data di nascita si fosse chiamata Data in una delle due tabelle, Access avrebbe lasciato in bianco questo campo, perché non
avrebbe saputo a quale accodarlo. Saremmo dunque stati noi a dirgli come effettuare l'accodamento. Vedremo più avanti come modificare questa riga, quando
necessario.

In questo caso Access accoderebbe tutti i record della tabella Indirizzi alla tabella Prova. Noi però possiamo inserire delle limitazioni; ad esempio, nella
riga Criteri del campo Sesso possiamo inserire la lettera M. Eseguiamo la query. Access ci avverte che i record che verranno accodati sono tre: evidentemente,
nella tabella Indirizzi ci sono solo tre record con sesso uguale ad M. Scegliamo il pulsante Sì, poi chiudiamo la query senza salvarla, e andiamo a controllare
le modifiche avvenute nella tabella Prova. Notiamo che, dopo i record con sesso uguale ad F, gli ultimi tre record hanno questo campo uguale ad M.

Abbiamo visto quindi anche l'ultimo tipo di query di comando: le query di accodamento. Esse consentono di accodare dei record ad una tabella, con qualsiasi
criterio di estrazione. La cosa da tener presente è solo il fatto che i campi delle due tabelle devono essere simili, nel senso che, anche se hanno nomi
diversi, devono avere caratteristiche simili; ad esempio, se il campo di partenza è testo deve essere tale anche il campo di arrivo. Proviamo infatti ad
accodare campi di tipo diversi per verificare subito cosa succede.

Creiamo una nuova query. Scegliamo come tabella di partenza Indirizzi. Nella griglia, mettiamo Cognome, Nome, Data di nascita e Sesso. Poi, scegliamo Query
di accodamento dal menù Query. Quando ci chiede il nome della tabella di arrivo, invece di scrivere Prova, possiamo, con ALT + freccia giù come ormai facciamo
sempre, aprire la casella elenco, e cercare, tramite le frecce, la tabella prova e poi premere INVIO. Ci viene presentata la griglia di accodamento, quella
che avevo detto avremmo imparato a modificare. Ora, nella riga "accoda a" del campo Data di nascita, scriviamo Sesso. Per farlo, apriamo la casella elenco
e cerchiamo sesso; poi, premiamo INVIO. Facciamo la stessa operazione nella riga "accoda a" del campo Sesso. Sempre aprendo la casella elenco, scegliamo questa
volta Data di nascita. Dopo aver fatto questa inversione di campi, eseguiamo la query. Ci verrà detto che saranno accodati otto record. Quando scegliamo
sì, però, comparirà un'altra finestra con queste frasi:

Impossibile accodare tutti i record nella query di accodamento. Numero di campi impostati a null per una conversione fra tipi 8; numero di record non aggiunti
alla tabella a causa di violazione di chiave 0;a causa di violazione di condivisione 0; a causa di variazione di violazioni della regola di convalida 0.
Il problema quindi è proprio la differenza nei due campi che abbiamo voluto invertire! In effetti però i record non verranno accodati. Leggiamo attentamente
questa finestra per ricordarla in caso di errore vero. Scegliamo il pulsante no: infatti ci viene chiesto se vogliamo eseguire la query comunque, ma noi
sapevamo già che non volevamo eseguirla. Abbiamo quindi sperimentato come sia indispensabile che sia rispettato il tipo di campo anche se non il nome.

Possiamo quindi considerare concluse le sperimentazioni sulle query di accodamento, e più in generale sulle query di comando. Chiudiamo quindi, come sempre,
il nostro database.


Giuseppe Servidio
Per tornare all'indice, premi alt piu' freccia sinistra.