Problema con script search.asp Lukeonweb

TaniaPellizzari

Nuovo Utente
26 Lug 2007
4
0
0
Ciao Ho scaricato lo script per il motore di ricerca perchè è esattamente quello di cui avrei bisogno.
Putroppo lo script non funziona.
Continua a darmi un errore, questo:
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

/nuovosito/cerca.asp, line 39

La linea 39 è la seguente
Codice:
            var Mostra = Cn.Execute(sql);

Premetto che non ho modificato una virgola di codice, fatta eccezione per la path del database (che è giusta) e la tabella di ricerca (giusta pure quella) e i recordset di riferimento. Di seguito tutto il codice
Codice:
<%@LANGUAGE = JScript%>
<html>
    <head>
        <title>Cerca nel sito</title>
    </head>
<body>

<h3>Cerca nel sito</h3>

<form method="POST" action="cerca.asp?cerca=OK">
    <input type="text" name="stringa">
    <input type="submit" value="Cerca">
</form>

<%
    var cerca = new String(Request.QueryString("cerca"));
    var testo = new String(Request.Form("stringa"));
    var apice = testo.replace(/'/g,"''");
    var stringa = apice.split(" ");
    if (cerca == "OK")
    {
        if (testo == "" || testo == "undefined")
        {
            Response.Write("<p>Inserire almeno una parola per effettuare una rcerca</p>");
        }
        else
        {
            var Cn = new ActiveXObject("ADODB.Connection");
                Cn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("/mdb-database/database.mdb"));
            var sql = "SELECT * FROM Notizie WHERE";
            for (var i=0; i<stringa.length; i++)
            {
                if (i > 0)
                {
                    sql += " AND";
                }
                sql += " descrizione LIKE '%" + stringa[i] + "%'";
            }
            var Mostra = Cn.Execute(sql);
            if (Mostra.EOF)
            {
                Response.Write("<p>Nessun risultato</p>");
            }
            else
            {
                while (!Mostra.EOF)
                {
                    with (Response)
                    {
                        Write("<p>");
                        Write("<a href='" + Mostra("Titolo") + "'>" +Mostra("Titolo") + "</a><br>");
                        Write(Mostra("descrizione"));
                        Write("</p>");
                        Mostra.MoveNext();
                    }
                }
            }
            Cn.Close();
        }
    }
%>

</body>
</html>

Grazie per l'aiuto :moira:
 
Ciao :)

Fatti stampare a video la query, secondo me l'errore dipende dal fatto che almeno in un "stringa" nel WHERE vengono immagazzinati parametri NULL ;)

Codice:
descrizione LIKE '%" +[COLOR="Red"] stringa[i][/COLOR] + "%'
 
Cosi:

// var Mostra = Cn.Execute(sql);
Response.Write(sql);

Comunque:

1. lo script funziona perchè quando lo realizzai lo testai :)

2. verifica che non ci siano nomi dei campi differenti nello script da quelli che hai sul database.

Ciao!
 
Cosi:

// var Mostra = Cn.Execute(sql);
Response.Write(sql);

Comunque:

1. lo script funziona perchè quando lo realizzai lo testai :)

2. verifica che non ci siano nomi dei campi differenti nello script da quelli che hai sul database.

Ciao!

:D
che demente che sono...
hai ragione, richiamavo una colonna descrizione che non esiste.
:rolleyes:

Risolto
Thanks
 
e se volessi che questo motore cercasse in diverse tabelle dello stesso database?
esempio: la tabella novita, quella documenti, quella articoli, quella download ecc.???

e... altra cosa.
Visto che alcune tabelle hanno una struttura differente, posso inserire anzichè il nome del campo (es. titolo) un riferimento generale? es
Codice:
<%=rs(1)%>

se mi aiuti ti :elvis: una bella canzone :D
 
2 input da ricercare

Ciao,
vorrei aggiungere 2 parole separate da ricercare, esempio:

<form method="POST" action="cerca.asp?cerca=OK">
<input type="text" name="Cognome">
<input type="text" name="Nome">
<input type="submit" value="Cerca">
</form>

Per ricercare nella database ci sono 2 campi: una di "cognome" e una di "nome" e non so come si fa a mettere:

var Cn = new ActiveXObject("ADODB.Connection");
Cn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("/mdb-database/anagrafici.mdb"));
var sql = "SELECT * FROM Lista WHERE";
for (var i=0; i<stringa.length; i++)
{
if (i > 0)
{
sql += " AND";
}
sql += " cognome LIKE '%" + stringa + "%'";
sql += " nome LIKE '%" + stringa + "%'";


}

mi da errore:
Microsoft OLE DB Provider.......... Errore di sintassi (operatore mancante) nell'espressione della query 'cognome LIKE '%ROSSI%' nome LIKE '%ROSSI%".

Aiutatemi... ma sono molto complicato!!! Grazie
 
Ti sei dimenticato l'operatore AND. Prova a cambiare questa riga:
Codice:
sql += " cognome LIKE '%" + stringa[i] + "%'";
Così:
Codice:
sql += " cognome LIKE '%" + stringa[i] + "%' AND";

Adesso però mi sorge un dubbio. In questa maniera se in nome inserisco pinco e in cognome inserisco pallino, lui cercherà tutti i record che hanno il nome che contiene pinco e il cognome che contiene pallino.
Se invece vuoi fare in modo che anche solo una delle corrispondenze soddisfi i criteri di ricerca, basta cambiare AND con OR.
 
Grazie mille,ho saputo dopo di inviare questo post, tutto risolto ma purtroppo mi sono ancora complicato perchè quando inserisco cognome = "rossi" e nome = "paolo" e la ricerca viene visualizzata solo cognome e non c'è nome.

Ho trovato la soluzione e ho modificato alcune righe :

<%
var cerca = new String(Request.QueryString("cerca"));
var testo = new String(Request.Form("stringa"));
var testo2 = new String(Request.Form("stringa2"));
var apice = testo.replace(/'/g,"''");
var apice2 = testo2.replace(/'/g,"''");
var stringa = apice.split(" ");
var stringa2 = apice2.split(" ");
if (cerca == "OK")
{
if (testo == "" || testo == "undefined")
{
Response.Write("<p>Inserire almeno una parola per effettuare una ricerca</p>");
}
else
{
var Cn = new ActiveXObject("ADODB.Connection");
Cn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("/mdb-database/anagrafici.mdb"));
var sql = "SELECT * FROM Lista WHERE";

sql += " cognome '" + stringa + "'";
sql += " AND nome '" + stringa2 + "'";

}
var Mostra = Cn.Execute(sql);
if (Mostra.EOF)
{
Response.Write("<p>Nessun risultato</p>");
}
else
{
while (!Mostra.EOF)
{
with (Response)
{
Write("<p>");
Write("Mostra("cognome") + "</a><br>");
Write(Mostra("nome"));
Write("</p>");
Mostra.MoveNext();
}
}
}
Cn.Close();
}
}
%>


Sono riuscito e vai!!! :o)

Ciao
 

Discussioni simili