Condividi tramite

Access combobox: leggere tutti i valori

Anonimo
2016-02-04T14:39:06+00:00

Ho il seguente problema:

Ho una Form (diciamo "Clienti") con una subForm collegata (diciamo "Prodotti Cliente") in cui indico i prodotti acquistati dal singolo cliente.

Questa subForm è costituita da una comboBox (a due colonne), in modo da poter inserire i prodotti (o cancellarli).

Vorrei recuperare dalla subForm l'elenco di tutti i prodotti del cliente, ma non riesco a capire come fare: l'istruzione "Me.comboParole.Column(1)"  mi restituisce ovviamente il prodotto corrente, ma vorrei recuperare l'elenco completo - ad esempio in fase di Load della maschera -, senza fare l'accesso al DB ma direttamente dalla combo della subForm.

Grazie in anticipo e buona giornata

Ivo

Microsoft 365 e Office | Accesso | 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

  1. Anonimo
    2016-02-06T08:17:45+00:00

    Ciao Ivo,

    la struttura che hai usato è comoda anche per inserire/modificare la lista dei prodotti di un cliente, in ogni caso puoi sempre inserire nell'origine record della sottomaschera la tabella ClientiProdotti  in left-join con la tabella Prodotti per avere anche la descrizione del prodotto a portata di mano.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2016-02-04T22:50:59+00:00

    Ciao Ivo,

    Con un semplice ciclo VBA puoi estrarre solo i valori memorizzati, quello che vedi a video non è quello che è memorizzato nel database ma è il risultato dell'incrocio di due tabelle ClientiProdotti  e Prodotti fatto tramite la combo.

    Infatti la tabella ClientiProdotti è composta dal suo Id poi dal campo Cliente che non è il nome del cliente ma è l' ID relativo della tabella Clienti poi dal campo Prodotto che non è la descrizione del prodotto ma l'ID relativo della tabella prodotti.

    Per far meno confusione potresti chiamare i campi della tabella ClientiProdotti così:

    Id

    Id_Cliente

    Id_Prodotto

    questi nomi dei campi mostrano la vera natura dei dati memorizzati.

    Ciao

    Giorgio

    La risposta è stata utile?

    0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-02-04T20:09:41+00:00

    Ciao Ivo,

    direi che Karl ha risposto correttamente in base all'oggetto della tua domanda "Access combobox: leggere tutti i valori"

    se vuoi solo i prodotti assegnati ad un cliente dovrai scorrere i record della tabella ClientiProdotti filtrata dal cliente desiderato.

    Qui un paio di metodi che lavorano nell'evento click di un pulsante posto nella maschera principale

    Il primo forse più complesso ma adatto a grossi volumi di dati

    Private Sub Comando1_Click()

        Dim StrSql As String

        Dim Rs As DAO.Recordset

        Dim StrProdotti As String

        StrSql = "SELECT Prodotti.Prodotto " & _

                 "FROM ClientiProdotti INNER JOIN Prodotti ON ClientiProdotti.Prodotto = Prodotti.ID " & _

                 "WHERE ClientiProdotti.Cliente = " & Me.ID

        Set Rs = CurrentDb.OpenRecordset(StrSql)

        If Rs.RecordCount <> 0 Then

           Rs.MoveFirst

           Do Until Rs.EOF

              StrProdotti = StrProdotti & ";" & Rs!Prodotto

              Rs.MoveNext

           Loop

        End If

        Rs.Close

        Set Rs = Nothing

        MsgBox Mid(StrProdotti, 2)

    End Sub

    Il secondo più semplice ma da utilizzare se il cliente ha pochi prodotti (10~20)

    rivate Sub Comando2_Click()

        Dim Rs As DAO.Recordset

        Dim StrProdotti As String

        Set Rs = Me.msk_ClientiProdotti.Form.RecordsetClone

        If Rs.RecordCount <> 0 Then

           Rs.MoveFirst

           Do Until Rs.EOF

              StrProdotti = StrProdotti & ";" & DLookup("Prodotto", "Prodotti", "Id = " & Rs!Prodotto)

              Rs.MoveNext

           Loop

        End If

        Set Rs = Nothing

        MsgBox Mid(StrProdotti, 2)

    End Sub

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-02-04T17:27:52+00:00

    Grazie, Karl, ma così facendo mi restituisce l'elenco completo e non solo quello del cliente su cui sono posizionato.

    Per maggior chiarezza, metto quiun esempio.

    Grazie e buona serata

    Ivo

    https://drive.google.com/file/d/0BwowIQGm0-NOVVRxVElwVzBUUE0/view?usp=sharing

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-02-04T16:02:37+00:00

    Salve,

    Dim i As Long

    For i = 0 To Me!comboParole.ListCount - 1

        Debug.Print Me!comboParole.Column(1, i)

    Next i

    La risposta è stata utile?

    0 commenti Nessun commento