Newsgroup: it.comp.lang.visual-basic
Titolo: ComboBox

Ho una Combo tipo dropdown che è collegata ad un campo di una tabella
(TabellaA). Gli elementi della List devono invece essere presi da un'altra
tabella (TabellaB). Naturalmente vi è una relazione uno a molti tra il
campo della tabellaA ed il campo della TabellaB.
Io avrei fatto così:
1)ho collegato la Combo alla TabellaA così l'avanzamento nel database mi
aggiorna la text della Combo.
2) quando carico la Form su cui è visualizzata la Combo con un ciclo
AddItem ed il recordset query sulla TabellaB riempio la List della Combo.
La cosa però non funziona. Quando apro la Form mi viene visualizzato un
errore in cui si dice che la Text della Combo non è compresa nella List.
Credo che il problema sorga in quanto VB6 prima cerca di impostare la Text
della Combo (con List ancora vuota e pertanto mi segnala errore) e poi
riempie la List. Ho cercato di impostare la proprietà List in fase di
progettazione ma non ci sono riuscito: qualsiasi cosa scriva viene
interpretata come stringa (avrei voluto inserire uan query od un
recordset).
Chi mi da una mano ? Grazie. Francesco
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto

non sono sicuro di aver capito.
la tabella b la carichi una volta per tutte al form load, no ?
a vb non dovrebbe fregargliene niente se il testo e' un elemento della
lista o no.
qui nel form load tutti i campi sono collegati a una tabella (tua A)
via dc. parecchi sono gestiti via combo, di solito con un ciclo, o
secchi:
    cboSesso.AddItem "M"
    cboSesso.AddItem "F"
    cboSesso.AddItem "ENTE"
    Dim rs As Recordset
    Set rs = MainDB.OpenRecordset("stati") 'tua tabella B
    With rs
        .Index = "stato"
        While Not rs.EOF
            If LCase(!rinvio) = "v" Then
                cboStato.AddItem !stato & " [Rinvio]"
            Else
                cboStato.AddItem !stato
            End If
            .MoveNext
        Wend
        .Close
    End With
funziona in tutti e due i modi, a prescindere dal metodo.
era questo ?
seno', puoi postare il codice p.f. ?

 seno', puoi postare il codice p.f. ?
Grazie per la risposta, cerco di spiegarmi meglio.
La form ha una combo (cboFunzione) di tipo dropdown Combo.
In fase di progettazione imposto:
DataSource=Revisori
DataMemeber=TabellaRevisori
DataField=Funzione
Se eseguo il programma tutto bene: trovo nella Text della Combo il valore
del campo Funzione della Tabella (la mia TabellaA). La finestra a discesa
della Combo non contiene ancora alcuna scelta. Ho anche verificato la
ListIndex ed è -1.
Se poi provo a riempire la finestra a discesa con i record della TabellaB:
  DataEnv.TabellaFunzione
  Do Until DataEnv.rsTabellaFunzione.EOF
    Me.cboFunzione.AddItem DataEnv.rsTabellaFunzione.Fields(1)
    DataEnv.rsTabellaFunzione.MoveNext
  Loop
ed eseguo il programma ottengo il seguente errore:
"Unable to bindto field or DataMember: 'Funzione'
proseguendo comunque trovo la Text della Combo vuota e la finestra a
discesa con tutti gli elementi della tabellaB.
Credo che VB ad ogni ciclo AddItem verifichi che la Text sia compatibile
con la List (la mia Combo è dropdown Combo e quindi la proprtietà Text è
di sola lettura) e fatto il primo ciclo e verificato che la Text non è
compresa tra le scelte della Combo la cancella e mi segnala l'errore.
Sai darmi una soluzione ? Grazie.


   Loop
il dataenv e' un controllo ado ?
se si', prova a sganciare il ciclo da qualunque controllo.
carica il combo via codice.
se usi ado, prova a adattare il codice del mio post.
almeno come prova.

 se si', prova a sganciare il ciclo da qualunque controllo.
Sono riuscito a fare il tutto; ho levato il collegamento (così il Combo
viene caricato nella Form con List vuota), poi ho la mia solita routine:
 
  Do Until DataEnv.rsTabellaFunzione.EOF
    Me.cboFunzione.AddItem DataEnv.rsTabellaFunzione.Fields(1)
    DataEnv.rsTabellaFunzione.MoveNext
  Loop
che aggiunge elementi alla List, e quindi faccio il collegamento del
controllo Ado alla tabella
  Me.cboFunzione.DataMember = "TabellaRevisori"
  Me.cboFunzione.DataField = "Funzione"
Grazie dell'aiuto. Ciao. Francesco
