logo MC2 E-Learning S.a r.l.
Logo Einstein grigio sfumato
e = m x c al quadrato





Query per maschere con Access

Breve tutorial di MC2 E-Learning sulla costruzione di query per maschere di Access. Impariamo come costruire delle query di selezione o raggruppamento per fare da base alle nostre maschere, oppure a basare la nostra maschera sui campi di pių tabelle media







Il risultato di una query di selezione — chiamato recordset — contiene tutte le informazioni necessarie, ma si presenta nel formato visualizzazione Foglio dati, che è un po’ spoglio.

Le maschere offrono la possibilità di presentare questi dati in una visualizzazione più attraente e più significativa.

E così come è possibile aggiornare i dati in una query, è anche possibile aggiornarli utilizzando una maschera basata su una query.

Una maschera molti-a-uno

Come si è visto è semplice progettare una maschera che consente di visualizzare e aggiornare i dati provenienti da una singola tabella.

Si è anche visto come fare per includere campi selezionati singolarmente da tabelle correlate, sfruttando una casella di riepilogo o una casella combinata.

Tuttavia, il metodo migliore per ottenere più informazioni da tabelle correlate è quello di progettare una query basata sulle due (o più) tabelle correlate e utilizzare quella query come base per la maschera.

In genere, quando si crea una query con due o più tabelle, si opera con relazioni di tipo uno-a-molti tra le tabelle. Come si è visto, Access consente di aggiornare qualunque dato nella tabella che si trova sul lato “molti” della relazione e qualunque campo che non formi la chiave nel lato “uno” della relazione.

Questo vuol dire che, quando si basa una maschera su una query,è possibile aggiornare tutti i campi della maschera che derivanodalla tabella “molti” e gran parte di quelli che vengono dalla tabella “uno”.

Poiché lo scopo primario della maschera è la ricerca e l’aggiornamento di record nel lato “molti” della relazione mentre si esaminano le informazioni sul lato “uno”, questa viene chiamata maschera molti-a-uno.

L’attività fondamentale nel database Gestione Clubs consiste nella creazione di contratti che definiscono quali gruppi hanno concordato di suonare in quali club in certe date e a determinate tariffe. È chiaro che a questo scopo serve una maschera nella quale modificare latabella Contratti.

La tabella Contratti gestisce effettivamente alcuniparticolari sui gruppi (come per esempio i nomi dei membri attuali dei gruppi), ma è solo con il campoClubID che si ricollega alle informazioni relative ai club.

Quando in una maschera si esaminano i dati dei contratti, probabilmente si desidera vedere qualcosa di più del semplice codice identificativo del club.

Nella maschera dei contratti si potrebbe ricorrere a una casella combinata per visualizzare il nome di un club invece di un numero.

Ma se, quando si seleziona un nuovo club, si desiderasse vederne l’indirizzo e il nome o il numero di telefono del direttore?

E come si fa a rendere i dati correnti della tabella Gruppi disponibili per procedure che si potrebbero creare con la maschera per copiarli automaticamente in un nuovo contratto?

A questi compiti si provvedebasando la maschera dei contratti su unaquery che unisca più tabelle.

Progettare una query molti-a-uno

Aprire il database Gestione Clubs e quindi aprire una finestra Nuova query in visualizzazione Struttura e aggiungere gli elenchi dei campi Clubs, Contratti e Gruppi utilizzando la finestra di dialogo Mostra tabella.

Dovrebbe apparire una linea di relazione tra ClubID dell’elenco dei campi della tabella Clubs e ClubID dell’elenco dei campi della tabella Contratti.

Analogamente, si dovrebbe vedere unalinea di relazione che collega il campo GrouplD dell’elenco dei campi della tabella Gruppi con il campo GrouplD dell’elenco dei campi della tabella Contratti.

Se le linee non si vedono, chiudere la finestra Query e ritornare nella finestra Database, scegliere il comando Relazioni dal menu Strumenti e aggiungere larelazione di uno-a-molti tra le tabelle Clubs e Contratti e le tabelle tblGroups e tblContracts, quindi aprire una nuova finestra Query e aggiungere i tre elenchi dei campi.

Per aggiornare tutti i campi contenuti nella tabella Contratti, trascinare l’indicatore speciale di “tutti i campi” (*) dall’elenco dei campi della tabella Contratti alla griglia di struttura.

Dalla tabella Gruppi, è necessario prendere la maggior parte dei campi dei dettagli, quali il nome del capo gruppo (campi nome e cognome), l’indirizzo, i numeri di telefono e la dimensione del gruppo.

Non includere il campo GrouplD della tabella Gruppi: il campo GrouplD deve essere aggiornato soltanto nella tabella Contratti.

Se si include il campo GrouplD della tabella Gruppi, si rischierà di fare confusione in un secondo tempo, quando si progetta la maschera.

Dalla tabella Clubs servono campi come ilnome del direttore, l’indirizzo, i numeri di telefono, i giorni e gli orari di apertura del club, e così via.

Nel database Gestione Clubs si trova una query, Contratti Query, già predisposta a questo scopo, come si vede nella figura 1.

Se si esamina il database e si cerca l’origine della riga relativa alla maschera frmContratti, si scopre che utilizza la query Contratti Query

In questa query, a molti campi provenienti dalla tabella Gruppi sono stati assegnati degli alias per renderli facilmente distinguibili dai campi che hanno lo stesso nome nella tabella Contratti.

Inoltre, sia il nome del capogruppo sia il nome del direttore del club sono un solo campo nella tabella Contratti, mentre nelle tabelle originali nomi e cognomi sono separati.

La query utilizza espressioni per concatenare questi nomi in un unico campo. Infine, la query elimina tutti i contratti che presentano uncodice di eliminazione (“D”, per deleted). Non ha senso modificare o ingombrare la visualizzazione con contratti che sono stati annullati.

Per questo esempio, la query più semplice, Contratti Query, con i soli nomi e indirizzi delle due tabelle relative ai contratti, funzionerà benissimo.

Progettare una maschera molti-a-uno

Avuta la query che serve, bisogna trovarne la definizione nella finestra Database e aprire una nuova maschera sulla base di tale query Volendo, si può ricorrere all’Autocomposizione maschera.

Dalla tabella Contratti, includere i campi ContractNo, ContractDate, GrouplD, ClubID, ContractPrice, ContractTerms, BeginningDate, EndingDate e NumberOfWeeks.

Dalla tabella Clubs, includere i campi Street.Address, City, State, ZipCode, MgsLastName, MgrFirstName e DaysTimes.

Dalla tabella Gruppi, selezionare i campi Size, LeaderFirstName, LeaderLastName, StreetAddress, City, State e ZipCode.

Se si usa l’Autocomposizione maschera, la selezione dei campi dovrebbe essere quella riprodotta nella figura 2.

Con unclic su Avanti, passare alla seconda finestra dell’autocomposizione.

Quando si inizia con unaquery contenente più tabelle o se si selezionano campi di più tabelle nella prima finestra dell’Autocomposizione maschera, questa mette a disposizione alcune scelte interessanti, se è in grado di stabilirequali tabelle appartengono al lato “uno” e quali al lato “molti”.

Come si vede nella figura, l’autocomposizione presuppone che si vogliano vedere insieme tutti i campi del lato “molti” (Contratti) di questarelazione (figura 3).

Se dall’elenco posto a sinistra si seleziona “in base a Clubs” o “in base a Gruppi”, l’autocomposizione cambia ciò che si vede a destra, in modo da offrire la scelta fra una maschera principale con sottomaschera o maschere collegate.

Se si seleziona Maschere collegate, l’autocomposizione crea due maschere. La prima visualizza solamente i dati del lato “uno” (o Gruppi o Clubs). Un pulsante di comando della prima maschera apre la seconda, che visualizza i dati relativi al lato “molti” (tabella Contratti).

Per il momento, selezionare “in base a Contratti” per vedere tutti i campi su un’unica maschera. Selezionare nella finestra successiva la disposizione a colonne e selezionare lo stile che si desidera per la finestra che segue. All’ultimo passaggio attribuire alla maschera il titolo Contracts. Quando l’autocomposizione ha finito, si dovrebbe vedere una maschera simile a quella riprodotta nella figura 4.

Questa maschera potrebbe essere ripulita parecchio, ma l’autocomposizione ha comunque piazzato tutto quello che avevamo chiesto. Si notino le caselle combinate per GrouplD e CIubID.

L’autocomposizione le ha messe sulla maschera, perché nella tabella Contratti la proprietà Ricerca è impostata per entrambi questi campi, in modo da visualizzare un nome di gruppo o di club più significativo.

Si comincerà forse a rendersi conto di quanto è importante prestare attenzione a questo genere di particolari quando si progettano le tabelle.

In tal modo si risparmierà un bel po’ di tempo durante la costruzione dell’applicazione.

Si provi a sostituire con qualcos’altro l’identificativo del club sui primo contratto e si osservi che cosa accade. Si dovrebbero vedere apparire il nome del manager e l’indirizzo del club corrispondenti

Dato che non è stato fatto niente per impostare laproprietà Bloccato per alcun campo, si possono anche aggiornare le informazioni relative all’indirizzo e allacittà del club visualizzato. In questo caso, i nuovi dati del club appariranno per tutti i contratti creati per quel club.
Nella maschera effettiva frmContratti, la query richiama automaticamente i relativi dati del lato “uno”, se si cambia la chiave esterna del lato “molti”.

Nella maschera effettivafrmContratti dell’applicazione Gestione Clubs, unaroutine Visual Basic for Applications (VBA) viene eseguita ogni volta che si modifica o l’identificativo del club o quello del gruppo.

Questo codice copia i nuovi dati sui campi appropriati della tabella dei contratti. Dato che la maschera di esempio non è ancora preparata a questo, non è il caso di cambiare l’identificativo del club o del gruppo in troppi contratti usando questa maschera.



Esempi di Maschere con Microsoft Access

Tutorials su Microsoft Access




Dr.Maurizio Cucchiara
autore del corso:
"Corso Base di Microsoft Access"
disponibile on line su questo sito
MC2 E-Learning S.a r.l.
Formazione per il Web
http://www.mc2.it/html/access.html


Cerca sul web con Google:


Ricerca personalizzata