ECDL 5-15.

Di Giuseppe Servidio.

Parte quinta, 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.
 
