Condividi tramite

Caselle combinate in cascata senza ordine di scelta

Anonimo
2020-11-15T10:19:34+00:00

Buongiorno a tutti,

tempo fa ho creato il mio primo database, ora però vorrei implementare un miglioramento:

In una maschera ho diversi controlli che costituiscono i criteri per un filtro, 7 di questi controlli sono caselle combinate, l'origine dati di queste caselle combinate sono delle tabelle collegate con relazioni uno a molti con la tabella che contiene i dati da filtrare; quello che vorrei fare ora è collegare in cascata queste 7 caselle combinate in modo che selezionando un valore in una, in tutte o solo in alcune di queste nelle altre in cui non ho ancora effettuato una scelta mi vengano mostrati solo i valori relativi alla scelta fatta precedentemente.

In poche parole vorrei implementare nella mia maschera un filtro simile a quello presente nelle varie colonne della visualizzazione "Foglio Dati" delle tabelle.

Mi scuso per la mia poca chiarezza, ma non sono esperto di VBA, SQL e database in generale.

Vi ringrazio in anticipo per il vostro aiuto.

Ciao,

Claudio

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

domenico laurenza 9,900 Punti di reputazione Moderatore volontario
2020-11-18T16:26:27+00:00

Ciao Claudio,

sostituisci il codice Sql della query di origine dati della combo cboComponent con la seguente:

SELECT Nz([Components].[ID_component],0) AS Espr2, IIf(IsNull([component]),"<N/A>",[component]) AS Espr1

FROM Report LEFT JOIN Components ON Report.ID_component = Components.ID_component

WHERE (((Nz([ID_platform],0))=IIf([forms].[Search Report].[cboPlatform] Is Null,Nz([ID_platform],0),[forms].[Search Report].[cboPlatform])) AND ((Nz([ID_discipline],0))=IIf([forms].[Search Report].[cboDiscipline] Is Null,Nz([ID_discipline],0),[forms].[Search Report].[cboDiscipline])) AND ((Nz([ID_work_task],0))=IIf([forms].[Search Report].[cboWorktask] Is Null,Nz([ID_work_task],0),[forms].[Search Report].[cboWorktask])) AND ((Nz([ID_Analyst],0))=IIf([forms].[Search Report].[cboAnalyst] Is Null,Nz([ID_Analyst],0),[forms].[Search Report].[cboAnalyst])) AND ((Nz([ID_division],0))=IIf([forms].[Search Report].[cbodivision] Is Null,Nz([ID_division],0),[forms].[Search Report].[cbodivision])))

GROUP BY Nz([Components].[ID_component],0), IIf(IsNull([component]),"<N/A>",[component])

ORDER BY IIf(IsNull([component]),"<N/A>",[component]);

Quindi nella routine Private Sub btn_Search_Click() sostituisci il codice relativo al Component con:

 If Len(.cboComponent & vbNullString) > 0 Then

    If .cboComponent = 0 Then

       strFilter = strFilter & " and ID_component Is Null"

    Else

       strFilter = strFilter & " and ID_component=" & .cboComponent & ""

    End If

 End If

Facci sapere

Ciao Mimmo

La risposta è stata utile?

3 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

20 risposte aggiuntive

Ordina per: Più utili
  1. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2020-11-17T13:24:16+00:00

    Ciao,

    scusa il ritardo ero fuori città.

    Al seguente link la soluzione (penso) ai campi Null.

    Vedrai che nelle query che sono origine dati delle combo utilizzo la funzione NZ per trasformare il valore dei campi Null a 0. Sia nel nome campo che nella condizione.

    Facci sapere

    Mimmo

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2020-11-15T13:08:54+00:00

    Ciao Claudio,

    prendiamo ad esempio due tabelle tblRegioni e tblProvince e le relative caselle combinate cboRegioni e cboProvince.

    Tu vuoi che selezionando una regione la cboProvince presenti le sole province di tale regione.

    Se per la cbpProvince utilizzi come origine dati una query basata sulla tabella tblProvince che abbia una condizione sulla regione rispetto alla combo cboRegioni della tua maschera del tipo Forms!tuaFormName!cboRegioni al variare della scelta in cboRegione avresti nella combo cboProvince la selezione desiderata.

    Quindi nell'evento dopo aggiornamento della cboRegioni ti basta effettuare una cboProvince.Requeryper applicare la condizione.

    Facci sapere

    Ciao Mimmo

    Ciao Mimmo,

    grazie per la tua risposta. Vorrei fare esattamente qualcosa del genere, ma vorrei anche poter scegliere un valore nella cboProvince (per continuare con il tuo esempio) e visualizzare l'unico (in questo caso) valore per cboRegioni, vorrei poter anche non selezionare niente in cboRegioni e poter visualizzare tutte le province nella cboProvince per poi selezionarne una e applicare il filtro.

    Magari questo pomeriggio provo a creare un esempio così con qualche immagine riesco a spiegarmi meglio, capisco che così è un pò difficile, ma il problema è che non ho padronanza della materia.

    Claudio

    La risposta è stata utile?

    0 commenti Nessun commento
  3. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2020-11-15T12:51:30+00:00

    Ciao Claudio,

    prendiamo ad esempio due tabelle tblRegioni e tblProvince e le relative caselle combinate cboRegioni e cboProvince.

    Tu vuoi che selezionando una regione la cboProvince presenti le sole province di tale regione.

    Se per la cbpProvince utilizzi come origine dati una query basata sulla tabella tblProvince che abbia una condizione sulla regione rispetto alla combo cboRegioni della tua maschera del tipo Forms!tuaFormName!cboRegioni al variare della scelta in cboRegione avresti nella combo cboProvince la selezione desiderata.

    Quindi nell'evento dopo aggiornamento della cboRegioni ti basta effettuare una cboProvince.Requeryper applicare la condizione.

    Facci sapere

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2020-11-15T11:27:55+00:00

    Ciao Claudio,

    riusciresti a fare un esempio più pratico? Anche solamente con due caselle combinate.

    Grazie,

    Gabriele.

    La risposta è stata utile?

    0 commenti Nessun commento