Ricerca in più campi

di il
25 risposte

Ricerca in più campi

Buongiorno a tutti,
ho un problema che non riesco a risolvere, vorrei fare la ricerca in un file mdb ma su 4 campi della stessa tabella contemporaneamente.
Praticamente inserisco la parola da cercare in una texbox e dovrei fare la ricerca nei 4 campi della tabella e visualizzarli in una listbox.
Per un solo campo, non ho problemi ma su più campi non sono come fare.
Ecco il codice:
Public Function cerca_parola()
Dim sql As String
If txt_cerca.Text = vbNullString Then
Set rs = DB.OpenRecordset("SELECT * FROM Programmi ORDER BY nomeprogramma")
Else
sql = "SELECT * FROM Programmi WHERE nomeprogramma LIKE '*" & Apici2(txt_cerca.Text)
sql = sql & " ORDER BY nomeprogramma "
Set rs = DB.OpenRecordset(sql)
End If
End Function
[/quote]

Grazie

25 Risposte

  • Re: Ricerca in più campi

    Non conosci gli operatori booleani? OR e AND?
    
    SELECT *
    FROM Tabella
    WHERE campo1 LIKE '*<qualcosa>*' OR
          campo2 LIKE '*<qualcosa>*' OR
          campo3 LIKE '*<qualcosa>*' OR
          ...
    ORDER BY ...
    
    O forse non ho capito io quel che vuoi fare....
  • Re: Ricerca in più campi

    Ho provato ma c'è qualche errore nel codice.
    I due campi nei quali cercare sono nomeprogramma e note:
    Public Function cerca_parola()
    Dim sql As String

    If txt_cerca.Text = vbNullString Then
    Set rs = DB.OpenRecordset("SELECT * FROM Programmi ORDER BY nomeprogramma")
    Else
    sql = "SELECT * FROM Programmi WHERE nomeprogramma LIKE '*' or note LIKE '*'" & Apici2(txt_cerca.Text)
    sql = sql & " ORDER BY nomeprogramma "
    Set rs = DB.OpenRecordset(sql)
    End If
    End Function
  • Re: Ricerca in più campi

    Il nome note è riservato. Includilo tra parentesi quadre

    [note]
  • Re: Ricerca in più campi

    Public Function cerca_parola()
    Dim sql As String

    If txt_cerca.Text = vbNullString Then
    Set rs = DB.OpenRecordset("SELECT * FROM Programmi ORDER BY nomeprogramma")
    Else
    sql = "SELECT * FROM Programmi WHERE nomeprogramma LIKE '*' or [note] LIKE '*'" & Apici2(txt_cerca.Text)
    sql = sql & " ORDER BY nomeprogramma "
    Set rs = DB.OpenRecordset(sql)
    End If
    End Function
    Mi da errore 3075 errore di sintassi (operarore mancante) nell'espressione della query....
  • Re: Ricerca in più campi

    Or [note] LIKE '" & Apici2(txt_cerca.Text) & "*'"
  • Re: Ricerca in più campi

    Anche così da lo stesso errore...
    Public Function cerca_parola()
    Dim sql As String

    If txt_cerca.Text = vbNullString Then
    Set rs = DB.OpenRecordset("SELECT * FROM Programmi ORDER BY nomeprogramma")
    Else
    sql = "SELECT * FROM Programmi WHERE nomeprogramma LIKE '*' Or [note] LIKE '" & Apici2(txt_cerca.Text) & "'"
    sql = sql & " ORDER BY nomeprogramma "
    Set rs = DB.OpenRecordset(sql)
    End If
    End Function
  • Re: Ricerca in più campi

    Qui manca un asterisco alla fine

    [note] LIKE '" & Apici2(txt_cerca.Text) & "*'"

    Controlla bene di avere scritto correttamente. Per controllo usa una

    MsgBox sql

    per visualizzare il contenuto di SQL e mostrala


    E comunque se usi

    nomeprogramma LIKE '*' OR ...

    vengono restituiti comunque tutti i record.
  • Re: Ricerca in più campi

    Anche così non va--- stesso errore... sto impazzendo....
    Public Function cerca_parola()
    Dim sql As String

    If txt_cerca.Text = vbNullString Then
    Set rs = DB.OpenRecordset("SELECT * FROM Programmi ORDER BY nomeprogramma")
    Else
    sql = "SELECT * FROM Programmi WHERE nomeprogramma LIKE '*' Or [note] LIKE '" & Apici2(txt_cerca.Text) & "*'"
    sql = sql & " ORDER BY nomeprogramma "
    Set rs = DB.OpenRecordset(sql)
    End If
    End Function
  • Re: Ricerca in più campi

    Non continuare ad inviare il codice in tutte le risposte e leggi quello che ti avevo scritto di fare nel post precedente

    Il problema può essere in quello che restituisce la funzione Apici2 e devi mostrarlo

    E dato che ci sei mostra anche la struttura della tabella con i nomi dei campi
  • Re: Ricerca in più campi

    La tabella ha come nome "Programmi" e contiene 3 capi: "nomeprogramma", "anno", "note".
    La funzione Apici2 ha il codice:
    Public Function Apici2(ByVal pStringa As String) As String
    If pStringa = vbNullString Then Exit Function
    Apici2 = Replace(pStringa, "'", "''") & "*'"
    End Function
  • Re: Ricerca in più campi

    E questo

    & "*'"

    che c'entra nella funzione??
  • Re: Ricerca in più campi

    Effettivamente togliendo & "*'" nella funzione Apici2 non mi da errore ma, come dicevi, tu non mi fa la ricerca della parola ma mi restituisce tutti i record del campo "nomeprogramma"
  • Re: Ricerca in più campi

    Intanto torniamo alla funzione Apici2. Questa dovrebbe solo raddoppiare gli apici e quindi si potrebbe chiamare Apici ed essere fatta solo dalla Replace visto che la prima linea non serve e l'asterisco aggiunto non ha senso. Quindi
    
    Public Function Apici(ByVal pStringa As String) As String
       Apici = Replace(pStringa, "'", "''") 
    End Function
    
    Per il resto è ovvio ... se cerchi con LIKE '*' ottieni tutto ... ancora non ho capito quale sia il criterio della ricerca che vuoi usare ma dovresti studiare qualcosa di teorico, un minimo, prima di scrivere codice o usare SQL.
  • Re: Ricerca in più campi

    Ho provato a modificare un po' il codice ma non riesco a risolvere il problema.
    Praticamente devo cercare la parola all'interno della textbox "txt_cerca" nei due campi "nomeprogramma" e "note" della tabella "Programmi".
    Non riesco a trovare l'errore
Devi accedere o registrarti per scrivere nel forum
25 risposte