Wildcard

lunedì 20 marzo 2006 - 11.15

Zenzot Profilo | Newbie

Salve,
non è ,molto che programmo, e dovrei risolvere questo problema.
Ho una query per un motore di ricerca interno al mio sito alla quale non riesco a far eseguire una ricerca anche parziale della parola immessa dall'utente, dove sbaglio?
Allego il codice:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim str_conn As String
str_conn = "PROVIDER=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db1.mdb")
Dim conn As OleDb.OleDbConnection
conn = New OleDb.OleDbConnection(str_conn)
Dim command As OleDb.OleDbDataAdapter

Dim str_sql As String

str_sql = "SELECT * FROM Modulistica WHERE Corpo LIKE '%" & TextBox1.Text & "%' "

Dim command2 As New OleDb.OleDbCommand("Select count(*) FROM Modulistica WHERE Corpo LIKE '" & TextBox1.Text & "'", conn)
Dim tot As String
If TextBox1.Text = "" Then
Label1.Text = "Inserisci un valore"
Exit Sub
End If

Try
conn.Open() ' apro la connessione
tot = command2.ExecuteScalar()

dg.Visible = True
If tot = 0 Then
dg.Visible = False
Label1.Text = "Nessun record trovato"
Else
command = New OleDb.OleDbDataAdapter(str_sql, conn)
Dim ds As DataSet
ds = New DataSet
command.Fill(ds, "Modulistica")
dg.DataSource = ds
dg.DataBind()

Label1.Text = "Record trovati: " & tot
End If

Catch ex As Exception
Label1.Text = "Si è verificato il seguente errore: " & ex.Message 'stampo eventuali errori
Finally

If Not conn Is Nothing Then
conn.Close() ' chiudo la connessione
End If

End Try
End Sub

Ciciu Profilo | Senior Member

Ciao.

>Dim command2 As New OleDb.OleDbCommand("Select count(*) FROM
>Modulistica WHERE Corpo LIKE '" & TextBox1.Text & "'", conn)

Magari è solo un errore di digitazione, ma in questo comando NON stai fornendo all'SQL i "%" tra cui racchiudere la porzione di stringa da cercare. In pratica gli stai dicendo :

Select count(*) FROM Modulistica WHERE Corpo LIKE 'PIPPO'

Mentre dovresTi dirgli :

Select count(*) FROM Modulistica WHERE Corpo LIKE '%PIPPO%'

A prima vista questo mi sembra l'errore...
In seconda battuta, non sono convintissimo che per Access la Wildcard "%" sia corretta. So per certo che è ok per Oracle, ma per Access, forse, è "*". Ti consiglio, però, di fare una prova....

Ciao - Fabio
Fabio G

Zenzot Profilo | Newbie

Il valore da correggere nel codice che ho postato in origine era corretto, probabilmente il forum lo ha formattato in quel modo.
Ho provato ad usare anche ("*") nella query, ma senza risultato, non so più cosa fare.
Grazie lo stesso ciao.

Ciciu Profilo | Senior Member

Ho fatto una piccola verifica, e mi sembra che il carattere da usare sia proprio "*".

Cmq, immagino che il risultato della Tua interrogazione sia "Nessun Record Trovato".

Prova ancora una cosa, ovvero a "trimmare" il valore del textbox.
Scusa l'ovvietà della cosa, ma ricorda anche che questo tipodi ricerca è case-sensitive...

Un'ultima cosa che puoi verificare, è quella di sostituire il count(*) con il count(<nomecampo>).

Ciao - Fabio
Fabio G

Zenzot Profilo | Newbie

Ho provato di nuovo, questa è la query:
str_sql = "SELECT * FROM Modulistica WHERE Corpo LIKE '*" & TextBox1.Text & "*' ",
ho inserito i caratteri che mi avevi indicato, ma niente da fare.

Ciciu Profilo | Senior Member

Dunque, la cosa è piuttosto curiosa....

Hai la possibilitàdi farTi restituire il valore della variabile che contiene il comando SQL ? Giusto per vedere cosa pensa di dover fare il runtime ?

Se fai la stessa select direttamente da Access, ottieni dei risultati ?

Ciao - Fabio
Fabio G

Zenzot Profilo | Newbie

Il nome della variabile SQL che ho già scritto sul primo post è str_sql, alla quale segue l'istruzione della SELECT.

Ciciu Profilo | Senior Member

>Il nome della variabile SQL che ho già scritto sul primo post
>è str_sql, alla quale segue l'istruzione della SELECT.
>

Ok, questo mi è chiaro. Ma cosa contiene dopo che l'hai valorizzata ? Non Ti fermare a ciò che pensi di metterci dentro : verifica COSA ci hai messo dentro !

Fabio G

Zenzot Profilo | Newbie

Dentro ci ho inserito i nomi di file di MSWord, che fisicamente risiedono in una cartella del mio sito; nel campo del Db che ho chiamato Corpo,i nomi dei vari File sono comprensivi della relativa estensione con cui vengono caricati, ad es. "MioFile.doc".
Spero di aver capito bene quallo che intendi...

Ciciu Profilo | Senior Member

>Dentro ci ho inserito i nomi di file di MSWord, che fisicamente
>risiedono in una cartella del mio sito; nel campo del Db che
>ho chiamato Corpo,i nomi dei vari File sono comprensivi della
>relativa estensione con cui vengono caricati, ad es. "MioFile.doc".
>Spero di aver capito bene quallo che intendi...

Temo di non essermi spiegato... Io vorrei sapere, e lo puoi verificare tramite debug, cosa contiene la variabile str_sql dopo che è stata assegnata...
Fabio G

Zenzot Profilo | Newbie

Guarda, probabilmente ti sei spiegato benissimo, c'è solo il fatto che non riesco a seguire in tutto l'argomento in quanto non sono molto pratico.
Non mi genera nessun errore all'avvio, e comunque ti allego un file di testo in cui ho copiato l'output che mi esegue quando avvio la pagina nel browser con visual studio.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5