Come creare un doppio o triplo dropdown

Anonimo
2019-08-25T16:51:36+00:00

Ciao a tutti,

sto provando a creare un doppio dropdown (del tipo macrocategoria e sottocategoria oppure del tipo nazioni, regioni e città), quindi ho creato due combobox, il primo collegato alla tabella con le opzioni principali (quindi per esempio le nazioni) e un secondo dropdown collegato a una query delle città in modo che per esempio selezionando la nazione Italia, il campo città mostri soltanto le città italiane. Purtroppo quando seleziono la nazione non appaiono solo le città italiane, ma per farle apparire devo cliccare il pulsante Aggiorna (quello nella barra degli strumenti). Dopo aver cliccato su questo pulsante appaiono solo le città italiane.

Devo precisare che la riga di codice per il Requery l'ho aggiunta nelle proprietà dei combobox all'interno della scheda Evento al rigo Dopo l'aggiornamento.

Vorrei che l'elenco delle città italiane si aggiornasse dopo aver selezionato la nazione Italia e non dopo aver cliccato sul pulsante Aggiorna. Come posso fare? Conoscete una guida (o un qualsiasi documento) che spiega passo passo tutti i punti da seguire nella creazione di un dropdown doppio o comunque multiplo?

Grazie in anticipo per il tempo che potrete dedicare.

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

Anonimo
2019-08-31T06:37:41+00:00

ciao Enzo,

prova a valurare una soluzione come quella che segue :

tutto insieme, citta, ragione, e provincia, una bella confusione di dati….ma, organizzati come segue nei due livelli, che potenzialmente possono diventare n livelli in questa configurazione, richiamando il concetto delle DiBa o BOM :

va da se che diventa semplice poi :

mostrare le provincie della rispettive regioni :

e le città della provnicia selezionata : 

essendo due tre combo a cascata, puoi richiamare una piccola sub per evitare di ripetere n volte lo stesso codice, immagina una serie più numeroso di combo collegate :

Option Compare Database

Option Explicit

Private Sub cboProvincia_AfterUpdate()

updateCbo cbo:=Me.cboCitta

End Sub

Private Sub cboRegione_AfterUpdate()

updateCbo cbo:=Me.cboProvincia

End Sub

Private Sub updateCbo(ByVal cbo As Access.ComboBox)

With cbo

    .Requery

     If .ListCount > 0 Then

        .Value = .ItemData(0)

        .SetFocus

        .Dropdown

    End If

End With

End Sub

vedi se questo ESEMPIO ti aiuta.

Ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2019-08-26T19:57:16+00:00

ciao Enzo,

[…]

grazie infinite per le istruzioni. Provo a descrivere la situazione e quello che ho fatto:

[…]

prego!

[…]

Ho una tabella studente che tra i vari campi che contiene ha anche due campi: nazione e citta.

[…]

sei certo che servano entrambe i campi, sia nazione che citta? se si perché? Se citta omonime appartengono a nazioni diverse non si potrebbe pensare ad una tabella di raccordo in cui assegni citta alla rispettiva nazione ( molti a molti ).

Domanda: nella tabella citta nazione è numerico e chiave esterna della tabella nazione ? non mi è chiaro, sarebbe stato più chiara nominarla id_nazione.

E' buona pratica nominare allo stesso modo le chiavi primarie ed esterne. Ovviamente…. non lo dice il dottore ;-) ma certamente è meglio a parer mio.

Credo il problema possa essere quello ed il parametro viene richiesto perché non individuato nella form.

Per farti capire bene come la cosa funziona, ti mostro una mini DEMO, scaricala e riproduci il tutto nel tuo scenario.

ciao e facci sapere.

Sandro.

 ps.

[…]

Grazie ancora. Buon onomastico!

[…]

prego, ma io sono proprio Sandro, e non Alessandro quindi non è proprio un onomastico, ma hoi apprezzato il pensiero.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-08-29T19:29:07+00:00

    Ciao Sandro,

    grazie mille per il link. E' stato utilissimo. Ho risolto.

    sei certo che servano entrambe i campi, sia nazione che citta? se si perché? Se citta omonime appartengono a nazioni diverse non si potrebbe pensare ad una tabella di raccordo in cui assegni citta alla rispettiva nazione ( molti a molti ).

    Domanda: nella tabella citta nazione è numerico e chiave esterna della tabella nazione ? non mi è chiaro, sarebbe stato più chiara nominarla id_nazione.

    E' buona pratica nominare allo stesso modo le chiavi primarie ed esterne. Ovviamente…. non lo dice il dottore ;-) ma certamente è meglio a parer mio.

    Credo il problema possa essere quello ed il parametro viene richiesto perché non individuato nella form.

    Il campo nazione è numerico. Lo avevo chiamato soltanto "nazione" e non "ID_nazione" per evitare di rinominare l'etichetta del controllo.Grazie per il consiglio.

    Relativamente agli errori che commettevo erano diversi, tra i quali: il modo in cui nominavo i campi senza fare riferimento alla tabella di origine; il codice inserito nel tab Evento; il codice inserito come fonte della riga; la mancata abilitazione dei contenuti, per cui anche se avessi fatto tutto correttamente, il codice non sarebbe stato eseguito perchè Access lo bloccava.

    Sto cercando di applicare la demo ai dropdown multipli composti da 3 o 4 combo box, ma non sono riuscito ancora a farlo funzionare.

    Grazie ancora.

    Enzo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-08-26T19:23:08+00:00

    Ciao Sandro,

    grazie infinite per le istruzioni. Provo a descrivere la situazione e quello che ho fatto:

    1. Ho una tabella nazioni che ha due campi: ID_nazione e nazione
    2. Ho una tabella citta che ha tre campi: ID_citta, nazione e citta
    3. Ho una tabella studente che tra i vari campi che contiene ha anche due campi: nazione e citta.
    4. La form studente tra i vari controlli ha anche una combo il cui nome è cboNazione e un’altra combo il cui nome è cboCitta.
    5. La cboNazione ha come origine controllo: nazione; ha come origine riga: SELECT [nazioni].[ID_nazione], [nazioni].[nazione] FROM nazioni;
    6. La cboCitta ha come origine controllo: citta; ha come origine riga: SELECT citta, id_citta FROM citta WHERE id_nazione=forms!studente!cboNazione;
    7. La cboNazione ha il seguente codice applicato:

    Private Sub cboNazione_AfterUpdate()

    With Me

    If .cboCitta.ListCount > 0 Then

    .cboCitta = .cboCitta.ItemData(0)

    .cboCitta.SetFocus

    .cboCitta.Dropdown

    End If

    End With

    End Sub

    Attualmente nella form Studente dal dropdown nazione riesco a selezionare la nazione, ma dal dropdown citta appare come città il nome sempre della stessa città per qualsiasi nazione e al primo clic sul dropdown appare una finestra: Immettere valore parametro e poi sotto posso indicare id_nazione. Se clicco sul pulsante Annulla appare soltanto il nome di una sola città che è sempre la stessa per qualsiasi nazione selezionata.

    Grazie ancora. Buon onomastico!

    Enzo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-08-25T18:24:03+00:00

    ciao Gapper,

    devi fare in modo che il rowSource della comboBox città abbia una clausola where che faccia riferimento alla comboBox Nazioni, del tipo :

    select campo1, campo2, id_citta where id_nazione=forms!tuaForm!TuaComboNazioni ( ipotizzando che idNazioni sia numerico altrimenti ci vanno gli apici)

    dopo di che su evento dopo aggiornamento della comboNazioni invochi :

    With Me

        If .cboCitta.ListCount > 0 Then

            .cboCitta= .cboCitta.ItemData(0)

            .cboCitta.SetFocus

            .cboCitta.Dropdown

        End If

    End With

    in modo da forzare il dropDown e selezionare il primo valore, ovviamente potenzialmente rimuovibile come caratteristica.

    Il tutto si basa una una relazione uno a molti nelle tabella nazioni e citta.

    HTH.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento