Con un paio di righe di codice VBA è possibile implementare, in una maschera di Access, una funzionalità molto interessante: le caselle combinate a cascata. Ossia, un gruppo di due (o più) caselle combinate in cui i valori mostrati nella seconda (o delle successive) casella dipendono dalla selezione effettuata nella prima. Tutti noi abbiamo fatto qualche esperienza con questo tipo di caselle: magari nella prima si può scegliere una provincia, poi, nella seconda, viene caricato l’elenco dei comuni della provincia selezionata.
Per provare questa soluzione, ci occorre una la maschera con due caselle combinate (immaginiamo che si chiamino rispettivamente cboProvince e cboComuni). Occorre, poi, popolare queste due caselle rispettivamente con l’elenco delle province e con l’elenco dei comuni. Il sistema più veloce è creare una tabella con due campi: Comune e Provincia e popolare le caselle combinate estraendo i valori da questa tabella.
Potete tranquillamente usare la creazione guidata per popolare la casella combinata cboProvince, badando, comunque, che le province siano elencate una volta sola. Se preferite scrivere direttamente l’istruzione SQL che genera la tabella, l’istruzione da usare è
SELECT ComuniMolise.Provincia FROM ComuniMolise
GROUP BY ComuniMolise.Provincia ORDER BY ComuniMolise.Provincia;
Per quanto riguarda la casella combinata cboComuni, essa viene popolata dalla istruzione SQL
SELECT ComuniMolise.Comune
FROM ComuniMolise
WHERE (((ComuniMolise.Provincia)=[Forms]![ComuniMolise]![cboProvince]));
Nella figura che apre il post, si vede questa query nel generatore di query.
Infine, perché la seconda casella si aggiorni in base alla selezione nella prima, basta scrivere per l’evento AfterUpdate della casella cboProvincia il codice che segue
Private Sub cboProvince_AfterUpdate()
Me.cboComuni = "
Me.cboComuni.Requery
End Sub
Il metodo Requery forza la ri-esecuzione della query che genera la casella combinata cboComuni. In questo modo, il filtro applicato alla query che genera questa casella di testo, utilizzerà il valore attualmente selezionato nella casella cboProvincia.