ciao a tutti,
ho un problema che mi sta facendo impazzire,
si tratta di fare una semplice ricerca su un campo testuale, estrarre da una tabella books in un db access i libri il cui titolo contiene il testo specificato in un form.
Non ho particolari esigenze di "efficienza" della ricerca, mi basterebbe riuscire a far funzionare questa query:
Select * from books where title like '*prova*';
ci ho provato con questo codice:
var con;
var sConString;
con = Server.CreateObject("ADODB.Connection");
sConString = "Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source=" +Server.MapPath("./bookstore.mdb ");
con.Open(sConString);
var rst;
var sSQLString;
rst = Server.CreateObject("ADODB.Recordset");
sSQLString = " Select * from books where title like '*"+TITOLO+"*';";
rst = con.Execute(sSQLString);
dove TITOLO è una variabile in cui memorizzo la stringa passata tramite il form.
sembrerebbe una cosa banale, il problema è che se cerco di stampare il risultato della query mi viene restituito quest'errore:
ADODB.Field (0x80020009)
Il record corrente corrisponde all'inizio o alla fine del file oppure è stato eliminato. Per eseguire l'operazione richiesta è necessario disporre di un record corrente.
praticamente la query da come risposta un recordset vuoto!!
Non so più cosa pensare, probabilmente è un problema legato all'operatore like o agli apici che però sono necessari perchè senza la query non gira nemmeno su access.
La cosa strana è che se faccio stampare la stringa sSQLString
<%Response.Write(sSQLString);%>
ed eseguo la query risultante direttamente su access funziona correttamente restituendo una tabella con diverse righe.
qualcuno sa aiutarmi??
Ho pensato che posso sempre estrarre tutti i campi titolo e confrontarli utilizzando un espressione regolare per poi recuperare gli id ed effettuare una nuova query ma mi sembra un lavoro inutile se c'è un operatore che lo fa già...
P.S. le istruzioni di connessione al db sembrerebbero giuste perchè ho provato con una query con condizione cost<=maxCost e funziona tutto regolarmente..