Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    493

    motorino di ricerca con LIKE

    Ciao a tutti!

    avrei da chiedervi un'aiutino...

    ho creato per la prima volta un motore di ricerca che inizialmente sembrava funzionare, poi si è rivelato una mezza ciofeca

    io credo che sia un problema di sintassi di questa riga di codice

    codice:
    Recordset1_cmd.CommandText = "SELECT * FROM santi WHERE isanti LIKE '% " & nome & "%' "
    (dove nome è il valore preso dal form di ricerca)

    in pratica se io ricerco un nome ad esempio Carlo (da ricercare in un db access) mi ricerca tutti i campi che hanno il nome Carlo come parola distinta e non iniziale
    se io cerco carlo e nel db ho un campo con scritto carlo rossi non trova nulla
    se invece il campo contiene rossi carlo e io ricerco ancora carlo mi trova il campo.
    inoltre se ho un campo con scritto giancarlo non lo trova perche cerca parole complete ma i campi che iniziano con crlo non escono fuori.
    spero di essere stato comprensibile ed attendo un vostro aiuto!
    grazie mille

  2. #2
    Il trucco sta nell'aggiungere alla query tanti blocchi campo LIKE '%" & parola & "%' per quante sono le parole scritte nel campo di ricerca.
    codice:
    testo = trim(request.form("testo"))
    
    if len(testo) > 0 then
      sql = "SELECT * FROM tabella WHERE 1 = 1 "
        if inStr(testo," ") > 0 then
          parole = split(testo)
            for p = 0 to uBound(parole)
              sql = sql & "AND campo LIKE '%" & replace(parole(p),"'","''") & "%' "
            next
        else
          sql = sql & "AND campo LIKE '%" & replace(testo,"'","''") & "%' "
        end if
      sql = sql & "ORDER BY altroCampo"
    end if

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    493
    caaaavolo non c'ero andato neanche vicino!!!
    grazie!

    con questo codice però mi dà errore dove segnato di rosso
    ho sbagliato ad adattare il codice?

    grazie per la tempestività...e competenza!

    codice:
    <%
    testo=request.QueryString("nomesanto")
    
    
    %>
    
    <%
    Dim Recordset1
    Dim Recordset1_cmd
    Dim Recordset1_numRows
    
    Set Recordset1_cmd = Server.CreateObject ("ADODB.Command")
    Recordset1_cmd.ActiveConnection = MM_santi_STRING
    'Recordset1_cmd.CommandText = "SELECT * FROM santi WHERE isanti LIKE '% " & nome & "%' "
    					
    					if len(testo) > 0 then
    					  Recordset1_cmd.CommandText = "SELECT * FROM santi WHERE 1 = 1 "
    						if inStr(testo," ") > 0 then
    						  parole = split(testo)
    							for p = 0 to uBound(parole)
    							  Recordset1_cmd.CommandText = Recordset1_cmd.CommandText & "AND campo LIKE '%" & replace(parole(p),"'","''") & "%' "
    							next
    						else
    						  Recordset1_cmd.CommandText = Recordset1_cmd.CommandText & "AND campo LIKE '%" & replace(testo,"'","''") & "%' "
    						end if
    					  Recordset1_cmd.CommandText = Recordset1_cmd.CommandText & "ORDER BY isanti"
    					end if
    
    Recordset1_cmd.Prepared = true
    
    
    Set Recordset1 = Recordset1_cmd.Execute   
    Recordset1_numRows = 0
    
    
    %>

  4. #4
    codice:
    <%
    testo=request.QueryString("nomesanto")
    
    
    %>
    
    <%
    Dim Recordset1
    Dim Recordset1_cmd
    Dim Recordset1_numRows
    
    Set Recordset1_cmd = Server.CreateObject ("ADODB.Command")
    Recordset1_cmd.ActiveConnection = MM_santi_STRING
    					
    					if len(testo) > 0 then
    					  sql = "SELECT * FROM santi WHERE 1 = 1 "
    						if inStr(testo," ") > 0 then
    						  parole = split(testo)
    							for p = 0 to uBound(parole)
    							  sql = sql & "AND isanti LIKE '%" & replace(parole(p),"'","''") & "%' "
    							next
    						else
    						  sql = sql & "AND isanti LIKE '%" & replace(testo,"'","''") & "%' "
    						end if
    					  sql = sql & "ORDER BY isanti"
    					end if
    
    Recordset1_cmd.Prepared = true
    
    Recordset1_cmd.CommandText = sql
    Set Recordset1 = Recordset1_cmd.Execute   
    Recordset1_numRows = 0
    
    
    %>

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    493
    si, beh...non avevo capito molto nel codice, te ne eri accorto?!!!


    grazie 10000000000000000000 funziona perfettamente!!!!!!!!!!!!!!!!!!!!!!!!!!

    ciao ciao

  6. #6

    Re: motorino di ricerca con LIKE

    Originariamente inviato da tretretre

    io credo che sia un problema di sintassi di questa riga di codice

    codice:
    Recordset1_cmd.CommandText = "SELECT * FROM santi WHERE isanti LIKE '% " & nome & "%' "
    (dove nome è il valore preso dal form di ricerca)
    ok, col codice di mems hai risolto. però il problema stava tutto il quel benedetto spazio dopo la prima %

    avresti risolto così

    codice:
    Recordset1_cmd.CommandText = "SELECT * FROM santi WHERE isanti LIKE '%" & nome & "%' "

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    493
    scusatemi ma sto trovando sempre più difficoltà...
    avrei un'altra domandina che non riguarda la precedente (forse era meglio aprire un nuovo post?...)

    ho un db con i campo titolo testo lettera e contiene delle canzoni

    tramite una query fatta ahimé con dreamweaver cerco di elencare tutte le canzoni che hanno nel campo lettera il valore che passo tramite querystring. Ho fatto un campo repeat e tutto ok.

    poi mi è venuto in mente di mettere ad inizio pagina tutti i titoli uno sotto l'altro e di mettere un collegamento-segnalibro interno alla pagina che mi ributta al punto in cui inizia il testo di quella determinata canzone ho inserito il <%titolo%> e ho creato la seconda area ripetuta. ma succede che mi stampa a video solo una olta l'area ripetuta in questoo caso l'elenco dei titoli e sotto non mi mostra più titolo e testo di ogni canzone.
    posto il codice anche se un po' incasinato.

    grazie ancora per l'aiuto

    codice:
    <%@LANGUAGE="VBSCRIPT"%>
    
    <%
    Dim filtromusica__MMColParam
    filtromusica__MMColParam = "1"
    If (Request.QueryString("co") <> "") Then 
      filtromusica__MMColParam = Request.QueryString("co")
    End If
    %>
    <%
    Dim filtromusica
    Dim filtromusica_cmd
    Dim filtromusica_numRows
    
    Set filtromusica_cmd = Server.CreateObject ("ADODB.Command")
    filtromusica_cmd.ActiveConnection = MM_musica_STRING
    filtromusica_cmd.CommandText = "SELECT * FROM Canzoni WHERE lettera = ?" 
    filtromusica_cmd.Prepared = true
    filtromusica_cmd.Parameters.Append filtromusica_cmd.CreateParameter("param1", 200, 1, 255, filtromusica__MMColParam) ' adVarChar
    
    Set filtromusica = filtromusica_cmd.Execute
    filtromusica_numRows = 0
    %>
    <%
    Dim Repeat1__numRows
    Dim Repeat1__index
    
    Repeat1__numRows = -1
    Repeat1__index = 0
    filtromusica_numRows = filtromusica_numRows + Repeat1__numRows
    
    %>
    <%
    Dim Repeat2__numRows
    Dim Repeat2__index
    
    Repeat2__numRows = -1
    Repeat2__index = 0
    filtromusica_numRows = filtromusica_numRows + Repeat2__numRows
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <link rel="stylesheet" href="../emx_nav_left.css" type="text/css" />
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" href="../niftyPrint.css" media="print">
    <link rel="stylesheet" type="text/css" href="../niftyCorners.css">
    
    <script type="text/javascript" src="../niftycube.js"></script>
    <script type="text/javascript">
    window.onload=function(){
    Nifty("div#box","big");
    }
    </script>
    <title>Canzoni</title></head>
    <body>
    <table width="100%" border="0">
      <tr>
        <td width="200" valign="TOP"></td>
        <td valign="TOP">
    	
    	<div id="box">
    	
    	  
    
    
    	    
              </p>
    	  
    
    </p>
    	  <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <% 
    While ((Repeat2__numRows <> 0) AND (NOT filtromusica.EOF)) 
    %>
              <tr>
                <td>7"><%=(filtromusica.Fields.Item("titolo").Value)%></td>
              </tr>
              <% 
      Repeat2__index=Repeat2__index+1
      Repeat2__numRows=Repeat2__numRows-1
      filtromusica.MoveNext()
    Wend
    %>
    </table>
    	  <% 
    While ((Repeat1__numRows <> 0) AND (NOT filtromusica.EOF)) 
    
    
    %>
        
    
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td width="73%" scope="col"><a name="52<%=(filtromusica.Fields.Item("ID").Value)%>7"></a><%=(filtromusica.Fields.Item("titolo").Value)%> <%=(filtromusica.Fields.Item("mptre").Value)%></td>
          <td width="27%" scope="col"></td>
        </tr>
        <tr>
          <td>
    
    <%=(filtromusica.Fields.Item("testosong").Value)%></p>
          
    
    </p></td>
          <td></td>
        </tr>
      </table>
      
    
    </p>
      <% 
      Repeat1__index=Repeat1__index+1
      Repeat1__numRows=Repeat1__numRows-1
      filtromusica.MoveNext()
    Wend
    %>
    
    	
    	</div>
    	
    	</td>
      </tr>
    </table>
    
    
    </body>
    </html>
    <%
    filtromusica.Close()
    Set filtromusica = Nothing
    %>

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    493
    ho provato a mettere
    filtromusica.movefirst
    alla fine del ciclo while ma mi dà errore proprio dove c'è scritto filtromusica.movefirst

    Tipo di errore:
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E18)
    Impossibile ritornare alla posizione nel set di righe.
    /Musica/lista.asp, line 84

  9. #9
    Per muoverti avanti e indietro nel recordset devi usare l'oggetto recordser di ADO e impostare il tipo di cursore opportuno.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    493
    quindi devo reimpostare tutto?
    cosa devo fare nello specifico?
    grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.