Condividi tramite

Caselle combinate a cascata

Anonimo
2017-01-02T13:39:27+00:00

Ciao a tutti,

sto cercando da qualche ora online una spiegazione chiara al mio quesito ma non trovo nulla che sia perfetto per il mio caso.

Problema piuttosto semplice.

Ho una tabella con un centinaio di campi e migliaia di record.

In una maschera, ho impostato una casella combinata (chiamiamola combo1) che mi elenchi i Campi contenuti nella tabella.

Ora a fianco vorrei metterci un'ulteriore casella combinata che mi mostri i Valori in base al Campo selezionato nella combo1.

Nelle varie soluzioni che ho trovato online ho recuperato un sacco di casi ma più "statici", come il classico caso Regione-Province-Comuni, mentre io qui prima avrei necessità di selezionare il Campo, e solo successivamente farmi elencare (per selezionare) tutti i Valori possibili che il Campo selezionato assume nella tabella.

Grazie!

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

6 risposte

Ordina per: Più utili
  1. Anonimo
    2017-01-02T15:36:58+00:00

    Ok,

    cambia la riga

    strSql = "select " & Me.cboFields & " from clienti"

    in

    strSql = "select [" & Me.cboFields & "] from clienti"

    aggiungendo le parentesi quadre.

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-01-02T15:30:48+00:00

    Grazie mille Sandro, ho adattato il tuo codice alle mie esigenze (nomi tabelle e ho aggiunto un GROUP BY) e funziona quasi perfettamente, alla selezione di un campo nella combo1, la combo2 mi elenca i valori assunti dal campo.

    Dico "quasi" perfettamente perchè  in alcuni casi, anzichè elencarmi i valori, mi compare una finestra pop-up che mi chiede di "Immettere valore parametro" per il campo selezionato.

    Noto che questo problema si presenta solo su quei campi che contengono, nel nome campo, un trattino "-".

    Ad esempio alcuni nomi campo della mia tabella si chiamano CODICE-1, C-NOME, E-DURATA...(non per mia scelta purtroppo), quindi mi viene da pensare che ci sia un problema nella generazione della stringa sql per via di questo trattino...può essere o sbaglio? Avete idea di come aggirare il problema?

    EDIT: a beneficio di futuri lettori, ho trovato come aggirare il problema appena descritto. Era effettivamente dato dai trattini nel  nome del campo, ho risolto aggiungendo delle parentesi nella generazione della stringa sql in modo tale che il nome campo selezionato nella combo1 fosse compreso fra due parentesi quadre, come di seguito

    strSql = "select [" & Me.cboFields & "] from tabellaXX GROUP BY [" & Me.cboFields & "]"

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-01-02T15:06:34+00:00

    ciao Alberto,

    dopo aggiornamento della combo che contiene i campi (cboFields)  invoca:

    Private Sub cboFields_AfterUpdate()

    Dim strSql As String

    strSql = "select " & Me.cboFields & " from clienti"

    With Me.cboValue

         .RowSource = strSql

         .Requery

         If .ListCount > 0 Then

            .Value = .ItemData(0)

            .SetFocus

            .Dropdown

        End If

    End With

    End Sub

    dopo aggiornamento se la combo box cboValue contiene righe le mostra, selezioni la prima e le mostri tutte con il metodo dropDown.

    Personalizza il nome della tabella clienti, usata da me per testare la correttezza del suggerimento.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-01-02T14:49:52+00:00

    Quello che dici è in parte vero, l'origine della tabella nasce da un enorme flusso csv spesso utilizzato in excel.

    Le dimensioni elevate però non ne consentono la fruibilità in consultazione, quindi importo il flusso in una tabella e utilizzo Access per interrogare tramite query queste grandi quantità di dati in "agilità".

    Oggi stavo cercando di ottimizzare ancor di più la creazione di query, e mi sono imbattuto in questo problema.

    Detto questo, sulla creazione della prima combo (con la lista campi) non ho alcun problema, già creata e funzionante.

    Ora però la seconda combo che ho creato è "vergine", vuota, e non capisco dove intervenire affinchè questa mi visualizzi la lista valori del campo selezionato nella combo1.

    Il codice requery che mi proponi tu dove dovrei utilizzarlo? In una routine evento della combo2?

    Grazie!

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-01-02T14:38:30+00:00

    Ciao Alberto,

    prima di tutto fammi dire che una tabella con un "centinaio di campi" mi fa pensare ad un tabellone tipo Excel piuttosto che a una tabella Access. Se vuoi affrontiamo l'argomento.

    Per caricare in una combo l'elenco dei campi (colonne) della tabella devi effettuare un caricamento manuale della combo (vedi TableDef).

    Per la seconda combo potresti, al variare della prima, reimpostare la 'Row source' e quindi effettuare la requery

    Me.Combo2.RowSource = "Select " & Me.combo1 & " From Tabella"

    Me.Combo2.Requery

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento