Duplicati Combobox

di il
11 risposte

Duplicati Combobox

Buonasera a tutti,
ho un problema col popolare una combobox: nel caricare i dati non voglio che vi siano duplicati
il codice è questo:
Public Function carica_combobox() 'CARICO LA LISTA CON GLI ID DEL DATABASE
If rs.RecordCount = 0 Then
schermata_volumi.cmb_cerca.Clear
errormsg = MsgBox("Nessun documento caricato", vbCritical, "Attenzione!")
Exit Function
End If
rs.MoveLast
rs.MoveFirst
max = rs.RecordCount
rs.MoveFirst
schermata_volumi.cmb_cerca.Clear
For I = 1 To max
schermata_volumi.cmb_cerca.AddItem rs("argomento")
rs.MoveNext
Next I
End Function

11 Risposte

  • Re: Duplicati Combobox

    Paolo87 ha scritto:


    Public Function carica_combobox() 'CARICO LA LISTA CON GLI ID DEL DATABASE
    If rs.RecordCount = 0 Then
    schermata_volumi.cmb_cerca.Clear
    errormsg = MsgBox("Nessun documento caricato", vbCritical, "Attenzione!")
    Exit Function
    End If
    rs.MoveLast
    rs.MoveFirst
    max = rs.RecordCount
    rs.MoveFirst
    schermata_volumi.cmb_cerca.Clear
    For I = 1 To max
    schermata_volumi.cmb_cerca.AddItem rs("argomento")
    rs.MoveNext
    Next I
    End Function
    Di primo acchito ti direi di :
    1) il recordset che leggi per popolare la combo ordinalo secondo la chiave che non vuoi essere duplicata
    2) non c'e' bisogno che leggi il primo record e l'ultimo per ricavare il numero dei records totali
    3) anzichè il ciclo for utilizza un while not eof
    poi fai :
    
    key = ""
    while not eof
            if key <> CampoChiaveRecordset
               inserisci nella combo
               key = CampoChiaveRecordset
            endif
            leggi record successivo
    wend
    
  • Re: Duplicati Combobox

    Aldilà di questo, il problema rimane.
  • Re: Duplicati Combobox

    Paolo87 ha scritto:


    Aldilà di questo, il problema rimane.
    Scusami ma non riesco a capire cosa intendi, quale problema rimane ?
  • Re: Duplicati Combobox

    Ciao, Doctorj,
    mi spiego meglio,
    ad es. nel campo "argomento" del mio db ho le seguenti parole:

    Aldo
    Alessandro
    Giovanni
    Aldo
    Piero
    Luca
    Piero
    Aldo
    ....

    nel popolare la combobox mi deve caricare solo:

    Aldo
    Alessandro
    Giovanni
    Piero
    Luca
  • Re: Duplicati Combobox

    Paolo87 ha scritto:


    Ciao, Doctorj,
    mi spiego meglio,
    ad es. nel campo "argomento" del mio db ho le seguenti parole:

    Aldo
    Alessandro
    Giovanni
    Aldo
    Piero
    Luca
    Piero
    Aldo
    ....

    nel popolare la combobox mi deve caricare solo:

    Aldo
    Alessandro
    Giovanni
    Piero
    Luca
    Già dal primo post avevo capito quello che volevi ottenere, infatti con la risposta che ti ho dato arrivavi alla soluzione del tuo problema.
    1) ordini il recordset sul campo "Argomento" vedi punto 1 del precedente post
    2) fai un ciclo while, vedi punto 3 del precedente post mettendo come CampoChiaveRecordset il tuo campo Argomento

    Altrimenti nella query di estrazione del recordset potresti fare :
    select distinct argomento from tabella
    con il risultato della suddetta query fai un while wend e carichi tutto nella combo
  • Re: Duplicati Combobox

    Ok adesso provo,
    grazie
  • Re: Duplicati Combobox

    Mi sa che sto facendo un po' di confusione!!!!
    Doctorj, non è che mi potresti dare una mano col codice...
  • Re: Duplicati Combobox

    Paolo87 ha scritto:


    Mi sa che sto facendo un po' di confusione!!!!
    Doctorj, non è che mi potresti dare una mano col codice...
    Il codice te l'ho già passato, devi solo adattarlo alla tua funzione carica_combobox, comunque, ricapitolando :

    SOLUZIONE 1
    1) ordina il recordset secondo il campo "Argomento"
    2)
    
    key = ""
    while not eof
            if key <> CampoChiaveRecordset
               inserisci nella combo
               key = CampoChiaveRecordset
            endif
            leggi record successivo
    wend
    
    SOLUZIONE 2
    1)
    
    SELECT DISTINCT Argomento FROM Tabella
    
    2)
    
    while not eof
            inserisci nella combo
            leggi record successivo
    wend
    
    Scegli tu quale soluzione adottare, e credimi, ti ho aiutato moltissimo.
  • Re: Duplicati Combobox

    Grazie
  • Re: Duplicati Combobox

    Ho provato così, ma niente...
    While Not EOF
          If Var_n <> schermata_volumi.cmb_cerca.List(I) Then
             schermata_volumi.cmb_cerca.AddItem rs("argomento")
             Var_n = schermata_volumi.cmb_cerca.List(I)
          End If
       Wend
  • Re: Duplicati Combobox

    CHIARAMENTE il codice passato da Doctorj è PSEUDO codice, dato che l'istruzione EOF non ha senso se non è riferita al recordset, quindi scrivere semplicemente
    While Not EOF
    è sbagliato. Dovrebbe essere
    While Not rs.Eof
    Quindi devi adeguare lo PSEUDO codice al tuo caso.

    Ma, a parte questo, non sarebbe stato più semplice aprire recordset già senza duplicati utilizzando DISTINCT?
    Ad esempio:
    SELECT DISTINCT campo FROM tabella
Devi accedere o registrarti per scrivere nel forum
11 risposte