4 messaggi dal 08 settembre 2007
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..
27 messaggi dal 27 maggio 2007
ciao helter

prova a cambiare la stringa in questo modo
SQLString = " Select * from books where title like '%'" & TITOLO & "'%'"

con like si usa % come carattere jolly e ci sono due apici in meno visto che e un testo.
la stringa in questo modo funzionare in caso fammi sapere
ciao e buon lavoro
4 messaggi dal 08 settembre 2007
ciao max, grazie x la risposta!

nel primo post ho dimenticato di dire che sto programmando in asp/JScript, è per quello che ho usato il + per inserire la stringa TITOLO in sSQLstring.

purtroppo non ho ancora risolto, usare il % è la prima cosa che avevo fatto anche perchè non conoscevo l'operatore like e cercando ho trovato la sintassi con il %, poi però provando su access non funzionava quindi ho cercato ancora e ho trovato queste info:

http://office.microsoft.com/it-it/access/HP010322531040.aspx

praticamente in access si usa * al posto del % e in effetti se eseguo la query direttamente su access funziona esattamente come vorrei.

non riesco davvero a spiegarmi perchè mi restituisca un recordset vuoto...
4 messaggi dal 08 settembre 2007
ho riprovato l'ennesima volta a mettere il % e finalmente ha funzionato

sSQLString = " Select * from books where title like '%"+TITOLO+"%';";

a quanto pare * si usa solo direttamente dall'interfaccia di access
3 messaggi dal 09 agosto 2009
Ciao,

Se non ricordo male dipende dal provider con OleDB devi usare %, mentre con ODBC va bene *.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.