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. Anonimo
    2020-11-21T17:49:17+00:00

    Ciao Claudio,

    se il problema è risolto segna la risposta risolutiva come risposta così facendo aiuti gli altri utenti nelle ricerche per problematiche simili.

    Ciao Mimmo

    Ciao Mimmo,

    volevo farlo l'altro giorno, non trovavo il modo per segnalare la risposta poi ho capito che dovevo fare un refresh della pagina.

    Grazie ancora

    Claudio

    La risposta è stata utile?

    0 commenti Nessun commento
  2. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2020-11-21T17:19:56+00:00

    Ciao Claudio,

    se il problema è risolto segna la risposta risolutiva come risposta così facendo aiuti gli altri utenti nelle ricerche per problematiche simili.

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2020-11-19T18:09:54+00:00

    Ciao,

    funziona tutto correttamente.

    Grazie di tutto

    Buona serata,

    Claudio

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2020-11-18T11:25:55+00:00

    Se a questo punto io volessi aggiungere alla casella combinata collegata al campo che presenta valori Null una voce per vedere solo i record relativi a questi valori cosa dovrei fare?

    Nella query della combobox ho aggiunto:

    UNION

    SELECT "<N/A>","<N/A>"

    FROM Components INNER JOIN Report ON (Components.ID_component = Report.ID_component) AND (Components.ID_component = Report.ID_component)

    ORDER BY Components.component;

    e mi permette di aggiungere la voce "<N/A>" al menù della casella, ora quello che vorrei è selezionarla e visualizzare tutti i record in cui quel campo è Null, come deve essere generata la stringa per la proprietà Filter della maschera? Io ho provato così:

        If cboComponent = "<N/A>" Then

            ID_component = Null

        Else

            ID_component = cboComponent

        End If

    ma a mi dice che non è possibile assegnare un valore.

    Se riuscissi a filtrare anche i campi non assegnati sarebbe perfetto.

    Grazie

    Claudio

    La risposta è stata utile?

    0 commenti Nessun commento