Queries |
2.36 Filtrare una query parametrica in base alla selezione multipla di una casella di riepilogo |
Roberto |
In una query la selezione su più valori normalmente si effettua usando nella WHERE l'operatore IN seguito dalla lista di valori in base ai quali si vuole effettuare il filtraggio dei dati visualizzati nella query. In Access non è però possibile che una query parametrica usi nella WHERE l'operatore IN, ovvero non è possibile passare ad una query parametrica una lista di valori sui quali effettuare una selezione. Per sopperire a questo limite una delle soluzioni più usate è quella di modificare da VBA il codice SQL della query di selezione tenendo conto della selezione multipla effettuata in una casella di riepilogo per la quale si è impostata a Semplice la proprietà Selezione multipla. Se la query si chiama Query1. Se la casella di riepilogo si chiama Elenco. Se i dati da selezionare sono contenuti in in una tabella chiamata Tabella1. Se il campo di Tabella1 su cui effettuare la selezione multipla si chiama Anno. A fronte dell'evento "Su clic" di un pulsante di comando contenuto nella stessa maschera che contiene la casella di riepilogo genera il seguente codice VBA: Private Sub Comando2_Click() Dim strLista As String Dim varItem As Variant 'Se non ci sono voci selezionate 'non ci sono attivitą da effettuare If Me!Elenco.ItemsSelected.Count = 0 Then Exit Sub 'Cicla nell'insieme delle voci selezionate For Each varItem In Me!Elenco.ItemsSelected 'Cattura l'anno selezionato strLista = strLista & _ Me!Elenco.Column(0, varItem) & "," Next varItem 'Elimina la virgola eccedente strLista = Left$(strLista, Len(strLista) - 1) 'Imposta codice SQL della query CurrentDb.QueryDefs("Query1").SQL = "SELECT * FROM Tabella1 " _ & "WHERE Anno IN (" & strLista & ") " _ & "ORDER BY IdCliente, Anno;" DoCmd.OpenQuery "Query1" 'Deseleziona tutte le righe della casella di riepilogo Dim Cont As Integer For Cont = 0 To Me!Elenco.ListCount - 1 Me!Elenco.Selected(Cont) = False Next Cont End SubIl codice VBA di cui sopra fa riferimento alla libreria Microsoft DAO quindi, se lo si usa con una versione di Access successiva ad Access 97, il database deve fare riderimento a Microsoft DAO 3.6 Object Library. Download: |