Visualizzare (Tutto) in una casella combinata in Access

Come creare una casella combinata in Microsoft Access è un argomento che ho trattato in diversi video sul mio canale di formazione di youtube. Abbiamo anche imparato a creare una casella combinata a cascata. Un altro video insegna come usare le query di unione. Ecco, sono proprio le query di unione che risolvono il problema di oggi.

Aggiungere tutto a una casella combinata

Come si vede, la casella combinata riepiloga le città, memorizzate in un tabella di lookup, ma presenta all’inizio l’opzione (Tutto).

Come si fa ad aggiungere l’opzione (Tutto)?

Vediamo che cosa abbiamo nel database:
1) tabella tblAnag con i campi IDAnag, NomeIndividuo, Citta. E’ l’origine record della maschera che si vede nell’immagine.
2) tabella lkpCitta con i campi IDCitta e NomeCitta. Contiene l’elenco delle città
3) una maschera che ha nell’intestazione di maschera una casella combinata chiamata cboElencoCitta.

Dobbiamo compiere due operazioni:
a) impostare l’origine riga della casella combinata
b) scrivere poche righe di istruzioni in VBA per attivare il filtro sui record in base alla scelta effettuata nella casella combinata.

a) Nella proprietà Origine riga scriviamo la seguente istruzione SQL (è una query di unione):

SELECT Nome Citta
FROM lkpCitta
UNION
SELECT '(Tutto)'
FROM lkpCitta

Il risultato di questa query sarà un elenco che avrà al primo posto (Tutto) e poi in ordine alfabetico le città. Nota che le città non vengono ripetute due volte, perché di default la query di unione elimina i valori duplicati. Infine, (Tutto) si trova all’inizio perché le ( in ordine alfabetico vengono prima delle lettere.

b) selezioniamo la casella combinata, poi nelle proprietà andiamo su Eventi, clicchiamo in Dopo Aggiornamento. Clic sui … e scegliamo Generatore di codice. Dovremmo vedere tutti questo:

Finestra VBA codice

Ora con un semplice test, verifichiamo che cosa ha scelto l’utente. se la scelta inizia con la parentesi, significa che non deve essere applicato alcun filtro, altrimenti il filtro sarà dato dal valore scelto nella casella combinata.

Private Sub cboElencoCitta_AfterUpdate()
 If Left(Me.cboElencoCitta, 1) = "(" Then
  Me.FilterOn = False
 Else
  Me.Filter = "Citta='" & Me.cboElencoCitta & "'"
  Me.FilterOn = True
 End If
End Sub

FilterOn è una proprietà della maschera che stabilisce se il filtro è attivo o meno.

Filter imposta il filtro. Attenzione che nel filtro dopo Citta= c’è un apostrofo e poi le doppie virgolette. Alla fine dell’istruzione dopo la & ci sono le doppie virgolette seguite dall’apostrofo seguite dalle doppie virgolette.