Popolare combobox senza duplicati VB6

di il
11 risposte

Popolare combobox senza duplicati VB6

Buongiorno a tutti, sto sviluppando un programmino in vb6 e nel caricare i dati nella combobox mi mi legge tutti i dati presenti nel database senza tenere conto, giustamente, dei duplicati. Potete aiutarmi a risolvere il problema. Cioè, se nel database nel campo categoria ho dieci celle che contengono la parola Negozio la combobox mi carica 10 volte la parola negozio, anzicchè caricarla una sola volta.
Questo è il codice che ho utilizzato:

Public Function carica_immaginicombobox()
On Error Resume Next
If rs.RecordCount = 0 Then
frm_archivio.cmb_cercadati.Clear
Else
rs.MoveFirst
frm_archivio.cmb_cercadati.Clear
For I = 1 To max
If frm_archivio.txt_Cerca.Text = "Categoria" Then
frm_archivio.cmb_cercadati.AddItem rs("CATEGORIA")
End If
rs.MoveNext
Next I
End If
End Function

11 Risposte

  • Re: Popolare combobox senza duplicati VB6

    Devi eseguire una query SELECT con DISTINCT e leggere dal recordset ottenuto
  • Re: Popolare combobox senza duplicati VB6

    ...non so come impostare..., non è che potresti darmi una mano?
  • Re: Popolare combobox senza duplicati VB6

    Io uso questa strategia:

    Var_n è una variabile che può assumere qualsiasi valore a seconda del ciclo for/do loop, quindi il seguente for...next si trova all'interno del for/do loop della variabile:


    For L = 0 To Combo1.ListCount - 1
    If Combo1.List(L) = Var_n Then Exit For
    Next
    If L = Combo1.ListCount Then Combo1.AddItem Var_n
  • Re: Popolare combobox senza duplicati VB6

    Gianni24 ha scritto:


    ...non so come impostare..., non è che potresti darmi una mano?
    Mostra la query che usi per caricare i dati nel recordset.
  • Re: Popolare combobox senza duplicati VB6

    Gionatan ha scritto:


    Io uso questa strategia:

    Var_n è una variabile che può assumere qualsiasi valore a seconda del ciclo for/do loop, quindi il seguente for...next si trova all'interno del for/do loop della variabile:


    For L = 0 To Combo1.ListCount - 1
    If Combo1.List(L) = Var_n Then Exit For
    Next
    If L = Combo1.ListCount Then Combo1.AddItem Var_n
    Sicuro sicuro ?


    P.S. Ricordati di leggere il Regolamento: il codice deve essere inserito racchiuso tra gli appositi TAG.
  • Re: Popolare combobox senza duplicati VB6

    For L = 0 To Combo1.ListCount - 1
        If Combo1.List(L) = Var_n Then Exit For
    Next
    If L = Combo1.ListCount Then Combo1.AddItem Var_n
    Sicuro sicuro cosa vuoi dire? se funziona?
    io faccio sempre così.
    L'unico dubbio che ho, perchè l'ho scritto a mente, è che nell'ultimo if L sia = o > di listcount, ma questo basta provarlo nel listato col debug.
    Ma hai capito il concetto?
    il concetto è che se L < listcount significa che esiste già (doppione) nel combobox, se invece completa il ciclo for significa che non c'è e quindi va aggiunto.
  • Re: Popolare combobox senza duplicati VB6

    Gionatan ha scritto:


    io faccio sempre così.
    Questo non significa che sia una buona soluzione. Il modo corretto naturalmente è quello indicata da oregon.
  • Re: Popolare combobox senza duplicati VB6

    grumpy ha scritto:


    Gionatan ha scritto:


    io faccio sempre così.
    Questo non significa che sia una buona soluzione. Il modo corretto naturalmente è quello indicata da oregon.
    io ho dato una mia possibile soluzione che funziona in sole 4 righe di codice, e non è obbligato a usare questo.
    Poi ho provato che a QUERYare "grosse dimensioni" a volte c'è la clessidra che gira e a volte c'è "(non risponde)" di troppo.
  • Re: Popolare combobox senza duplicati VB6

    Gionatan ha scritto:


    For L = 0 To Combo1.ListCount - 1
        If Combo1.List(L) = Var_n Then Exit For
    Next
    If L = Combo1.ListCount Then Combo1.AddItem Var_n
    Sicuro sicuro cosa vuoi dire? se funziona?
    io faccio sempre così.
    Ti spiego quello che intendevo farti notare:
    la TUA soluzione può funzionare nel TUO caso, ma non risponde al caso richiesto da Gianni24.
    Ecco perché ti ho chiesto: sicuro sicuro?

    Gianni24 ha già un codice funzionante, solo che gli crea i doppioni e siccome lui sta prelevando i dati da una tabella di un database la soluzione ottimale è quella indicata da Oregon.
    Poi ovviamente uno fa come meglio crede.

    Gionatan ha scritto:


    Ma hai capito il concetto?
    il concetto è che se L < listcount significa che esiste già (doppione) nel combobox, se invece completa il ciclo for significa che non c'è e quindi va aggiunto.
    Tranquillo, i concetti li capiamo (Oregon in primis!).
    però ti consiglio di provare la parte del codice che hai postato.
  • Re: Popolare combobox senza duplicati VB6

    Ok grazie gibra la mia strategia funziona e nei miei programmini l'ho usata molte volte anche col db di access: basta mettere quel ciclo for all'interno del do loop db.eof e far procedere la lettura dei record col db.movenext
    ora non lo posso scrivere dettagliatamente col cell perché sono fuori ma quando torno a casa provo a scrivere il pezzetto di codice che intendo
  • Re: Popolare combobox senza duplicati VB6

    Anche se funziona, stai fornendo una soluzione estremamente inefficiente, che diventa inservibile all'aumentare del numero n di elementi. È proprio per evitare questo tipo di codici che esiste la DISTINCT nella SELECT e ti assicuro che il motore del DB e gli indici fanno il loro lavoro molto meglio di nxm cicli for ...

    Se questo può andare bene in un "programmino" non è così nei programmi professionali e se si vuole discutere seriamente di programmazione... è quello che gibra e altri ti vogliono far notare.
Devi accedere o registrarti per scrivere nel forum
11 risposte