Ricerca conbobox

di il
3 risposte

Ricerca conbobox

Ciao a tutti,
ho un problema che non riesco a risolvere.
Ho un form con 2 combobox, 1 textbox e 1 listbox:
1) comb_autore
2) comb_documento
3) txt_cerca
4) lst_risultato

Vorrei che inserendo il testo da cercare nella text_cerca ed evidenziando nelle due combo il campo da cercare mi visualizzasse nella lst_risultato tutti i campi rispondenti di un database che ha come campi: Id, autore, documento.

Ad es.
1) comb_autore = Leopardi
2) comb_documento = poesie
3) txt_cerca = 1820
4) lst_risultato = tutti gli Id delle poesie di Leopardi fatte nel 1820


Sono riuscito a scriverlo solo per 1 solo combobox

Questo è il codice riferito alla ricerca di 1 solo combobox:
If schermata.cerca.Text = vbNullString Then
    Set rs = DB.OpenRecordset("SELECT * FROM Info ORDER BY id")
Else
If schermata. comb_autore.Text = "autore" Then
    Set rs = DB.OpenRecordset("SELECT * FROM Info WHERE autore LIKE '*" & Replace(schermata.txt_cerca.Text, "'", "''") & "*'" & "ORDER BY id")
End If
Scusate per il casino, buona serata.

3 Risposte

  • Re: Ricerca conbobox

    Non devi codificare un istruzione OpenRecordset per ogni combinazione possibile, ma una sola e poi applicare la condizioni (WHERE) se impostate.
    Ti consiglio di usare un funzione pubblica per raddoppiare gli apici inserendola in un modulo bas:
    
    Public Function Apici2(byval pStringa As String) As String
        If pStringa = vbNullString Then exit function
        
        ' Restituisce una stringa formattata con i doppi apici.
        ' Esempio: se il parametro di input è "Dall'Olio" restituisce: "'Dall''Olio'"
        Apici2 = "'" & Replace(pStringa, "'", "''") &  "'" 
    End Function
    
    Purtroppo non hai indicato i campi della tabella, quindi vado a caso:
    
    Dim sql As String
    
    sql = "SELECT * FROM Info WHERE 1=1" 
    If comb_autore.text > vbnullstring then
        sql = sql & " AND Autore = " & Apici2(comb_autore.text)
    End If
    If comb_Documento.text > vbnullstring then
        sql = sql & " AND Documento = " & Apici2(comb_Documento.text)
    End If
    If txt_Cerca.Text > vbnullstring then
        sql = sql & " AND campo = " & Apici2(txt_Cerca.Text)
    End If
    sql = sql & " ORDER BY ID "
    
    Set rs = DB.OpneRecordset(sql)
    
  • Re: Ricerca conbobox

    Ciao gibra,
    il codice l'ho provato e va bene ma però non fa la ricerca man mano che inserisci le lettere.
    Se non inserisci il nome completo non l'ho trova, invece dovrebbe trovare tutti i nomi che man mano si scrive.
    Se scrivi per es. Leo, deve poter trovare Leopardi, Leonardo etc. etc.
  • Re: Ricerca conbobox

    Allora usa il LIKE nei campi che devi gestire in quel modo.
Devi accedere o registrarti per scrivere nel forum
3 risposte