Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema al buscar palabras con tilde

Estas en el tema de Problema al buscar palabras con tilde en el foro de SQL Server en Foros del Web. Buenas noches a todos, Tengo una página de un videoclub y hasta ahora he realizado varios tipos de consultas en SQL sin demasiados problemas, el ...
  #1 (permalink)  
Antiguo 21/08/2008, 14:01
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 10 meses
Puntos: 0
Problema al buscar palabras con tilde

Buenas noches a todos,

Tengo una página de un videoclub y hasta ahora he realizado varios tipos de consultas en SQL sin demasiados problemas, el caso es que por probar se me ha courrido poner en el buscador una palabara con tilde y me ha dado este error:
Microsoft JET Database Engine (0x80040E14)
Error de sintaxis (falta operador) en la expresión de consulta 'Titulo like '%Director's%' ORDER by Anio,Titulo asc'.
/pelis2/buscarmultiple.asp, línea 258


Sólo me pasa si busco palabras con tilde, si busco palabras con acento lo hace bien. En general no habría porque hacer muchas búsquedas con tilde pero quizá en otro caso más adelante si tenga que hacerlo por lo que agradecería cualquier consejo o ayuda que podáis darme.

Esta es la consulta:

ssql = "Select * from PELICULAS where Titulo like '" &titulo& "%' ORDER by Titulo,Anio asc"
  #2 (permalink)  
Antiguo 21/08/2008, 15:11
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Problema al buscar palabras con tilde

en sql server eso se soluciona poniendo dos comillas en lugar de una... cuando se ejecuta un sql dinamico como el tuyo...

en access no te sabria decir...

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 21/08/2008, 16:14
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problema al buscar palabras con tilde

Gracias por responder Andres95,

La consulta la hago en sql desde una página en asp a una base de datos de Access y la mayoría de los campos son de tipo memo. Pero el error en la búsqueda me lo da aunque busque en datos de tipo texto.

Lo de poner doble comilla doble lo he probado aquí pero no me ha funcionado, he probado de estas 2 formas y en las 2 me sigue dando el mismo error.:


ssql = "Select * from PELICULAS where Titulo like "" &titulo& "%"" ORDER by Titulo,Anio asc"


ssql = "Select * from PELICULAS where Titulo like "" &titulo& "%" ORDER by Titulo,Anio asc"

He visto una función que era para los acentos en otro hilo de esta misma web y aunque la probado tampoco me ha servido. Lo que no se es si se podrá modificar para que admita las tildes en la búsqueda.

Este es el hilo de esa función:
http://www.forosdelweb.com/f15/ignor...des-asp-142915
  #4 (permalink)  
Antiguo 21/08/2008, 22:12
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Problema al buscar palabras con tilde

No importa que hagas la consulta en lenguaje sql, el caso es que es una base de datos de Access. Y esta es manejada por el motor Microsoft Jet como indica tu mensaje de error.

Aun cuando soporta acceso sql, no aplica al 100% las cosas que aplican para SQL Server (un motor de base de datos distinto), en realidad access opera con un dialecto de sql, y por ello para empezar el like no funciona con con el signo % sino con *.

Ahora bien, el reemplazo de las comillas debe quedar en tu cadena resultante, es decir, en este caso ssql...

por lo que tu code prodria ser algo como

Código:
ssql = "Select * from PELICULAS where Titulo like '" & replace(titulo,"'","''") & "*'  ORDER by Titulo,Anio asc"
Con lo que ssql tomaria un valor como:

Código:
Select * from PELICULAS where Titulo like 'Director''s*' ORDER by Anio,Titulo asc
Lo cual es una consulta valida para access...

Te anexo una base de ejemplo en la que hice la prueba que te comento...

Sample DB

Espero te sea de utilidad lo comentado.

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 21/08/2008 a las 22:26
  #5 (permalink)  
Antiguo 22/08/2008, 04:31
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problema al buscar palabras con tilde

Gracias de nuevo por responder,

Creo que entiendo lo que quieres decir que Access tiene una forma distinta funcionar de SQLServer y por eso no funciona exactamente igual.

He probado tu código y aunque ya no me da el error de Microsoft Jet, ahora el problema que tengo es que no me encuentra ningun resultado nunca ni con tildes ni sin tildes.

La página en la que me sale lo de que no hay resultados se llamaría así por ejemplo:

http://localhost/pelis2/buscartitulo.asp?titulo=Alien

Por lo que en principio la consulta la hace bien, pero por lo que sea ahora no encuentra los resultados aunque los haya.
  #6 (permalink)  
Antiguo 22/08/2008, 08:36
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Problema al buscar palabras con tilde

En tu codigo asp...

inmediatamente despues de la asignacion de ssql..escribe..

response.write "<br /> ssql = " & ssql
response.end

lo que despliegue la pantalla ponlo aqui.. seria la consulta a tu bd...
para asi verificar cual es el comando que en realidad estas lanzando...


PD. Pudiste ver la bd que te anexe en el post anterior?
Ahi viene una consulta como la que ocupas...

---------

Edit: Aunque me parece que en este punto tu pregunta ya es mas de ASP que de SQL....

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 22/08/2008 a las 08:40 Razón: comentario adicional
  #7 (permalink)  
Antiguo 22/08/2008, 10:34
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problema al buscar palabras con tilde

Hola de nuevo,

He puesto eso después de la consulta y me sale esto:

ssql = SELECT * FROM PELICULAS WHERE Titulo like 'Director''s*'


Este es el código ASP que tengo a partir de la consulta, luego hay más.

Código HTML:
  ssql = "SELECT * FROM PELICULAS WHERE Titulo like '" & replace(tmultiple,"'","''") & "*'"
  
response.write "<br /> ssql = " & ssql
response.end
  
tabla.Open sSQL,conexion,adopenstatic,adcmdtext
Si que vi tu archivo, de hecho lo use de prueba, cambiando el nombre por el de mi base de datos y esas cosas pero no consegui que me funcionará bien, te dejo el link a una versión con pocos registros de mi bd, a ver si tengo algun fallo allí, en principio creo que está todo ok.

http://rapidshare.com/files/139290738/pelis.zip.html

He probado así:
ssql = "SELECT * FROM PELICULAS WHERE Titulo like '" & replace(tmultiple,"'","'") & "'"

y me sale esto:
ssql = SELECT * FROM PELICULAS WHERE Titulo like 'Director's cut'

Pero sigue sin encontrarme ningun resultado.
  #8 (permalink)  
Antiguo 22/08/2008, 11:09
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Problema al buscar palabras con tilde

desafortunadamente tengo bloqueado el acceso aqui a rapidshare...

lo checare mas tarde...

pero si la cadena es como dices, no deberia causar problemas...

si puedes incluir tu pag asp... seria mejor..
-----------------

edit

tengo una duda...

en la bd hay un registro donde el titulo empieza con Director??

si esta a la mitad del titulo esa palabra, hay que agregar tambien un asteristo al inicio

seria like '*director*'


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 22/08/2008 a las 11:15 Razón: duda
  #9 (permalink)  
Antiguo 22/08/2008, 11:51
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problema al buscar palabras con tilde

Gracias por tu paciencia,

Este es el codigo asp de la página, he cortado lo que iba después porque es parte de la plantilla y no me dejaba enviar el mensaje sino pero vamos no creo que el problema esté allí:

Código HTML:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="Templates/plantillaVC.dwt.asp" codeOutsideHTMLIsLocked="false" -->
<head>
<link rel="stylesheet" type="text/css" href="estilos/estilovideoclub.css">
<!--[if IE 6]> 
<link rel="stylesheet" type="text/css" href="estilos/estilovideoclubIE6.css" /> 
<![endif]-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- InstanceBeginEditable name="doctitle" -->
<title>Untitled Document</title>
<!-- InstanceEndEditable -->
<!-- InstanceBeginEditable name="head" -->
<!-- InstanceEndEditable -->

</head>
<!--#include file="includes/AbrirBD.asp"-->
<!-- #include file="includes/acceder.asp"-->
<body>

<div class="titulo"><span class="titular">VIDEOCLUB <span class="verdetitular">ON</span>LINE</span></div>
<div class="decoracion"></div>
<div class="fondonegro">

<!-- Botón de home-->

<!-- Botón de home-->  
   
   <div class="genero3"><a href="index.asp" target="_self">MENU</a></div>
	<div class="genero"><a href="listado.asp?id=1" target="_self">Accion</a></div>
    <div class="genero"><a href="listado.asp?id=2" target="_self">Animacion</a></div>
    <div class="genero"><a href="listado.asp?id=4" target="_self">Ciencia Ficcion</a></div>
    <div class="genero"><a href="listado.asp?id=5" target="_self">Comedia</a></div>
    <div class="genero"><a href="listado.asp?id=6" target="_self">Drama</a></div>
    <div class="genero"><a href="listado.asp?id=3" target="_self">Suspense-Terror</a></div> 

  <form class="formulario1" action="buscarmultiple.asp?tmultiple=tmultiple" method="get">
    <input name="tmultiple" type="text" id="tmultiple" style="height:17px;border:none;padding-top:0px;margin-top:0px;margin-left:0px;" size="15" />
    <select style="height:18px;border:none;padding-top:0px;margin-top:0px;" name="multiple" id="multiple">
      	<option value="1" selected="selected">Interprete</option>
       	<option value="2" >Director</option>
       	<option value="3" >Titulo</option>
        <option value="4" >Todas</option>
       </select>
    <label>
    <input class="fexplorer" type="submit"  name="button3" id="button3" value="Buscar" />
    </label>
  </form>
</div>

<div class="decoracion"></div>
<div class="fondoverde">
	
<!-- InstanceBeginEditable name="Editable" -->
<div class="menu31">

<%tmultiple=request.QueryString("tmultiple")
  mmultiple= request("multiple")
  Select case mmultiple%>
  
<%  case 1:
   ssql = "SELECT * FROM PELICULAS WHERE Interpretes like '" & replace(tmultiple,"'","''") & "*'"
response.write "<br /> ssql = " & ssql
response.end

  tabla.Open sSQL,conexion,adopenstatic,adcmdtext

'resultados por pagina a elegir arbitrariamente'
num_registros = 10 
 session("ssql")=ssql
	   %>
       
<!--actualizamos numero de pagina-->
<%If Request.QueryString("pag")<>"" Then
   Session("pagina")=Request.QueryString("pag")
Else
   Session("pagina")=1
End If%>

<div align="center">
<% if tabla.RecordCount = 0 then%>
No se han encontrado: resultados
<%response.redirect("nohayresultados.asp")%>
<% else if tabla.RecordCount = 1 then%>
Se ha encontrado: <span class="negrita2"><%=tabla.RecordCount%></span> resultado
<%else%>
Se han encontrado: <span class="negrita2"><%=tabla.RecordCount%></span> resultados
<%end if
end if%>
<%ptotales = tabla.PageCount%>
</div>

<%
'Dimensionamos las paginas y determinamos la pagina actual'
tabla.PageSize=num_registros
tabla.AbsolutePage=Session("pagina")
%>
	   
<%
'Contamos el numero de campos
num_campos=tabla.Fields.Count
For campo=0 to num_campos-1%>
   
<%
Next
registros_mostrados = 0%>

<%if tabla.RecordCount >=5 then%>
<div class="blanco">
<%else%>
<div class="blancoie">
<%end if%>

<%While (Not tabla.eof And registros_mostrados < num_registros)
   registros_mostrados = registros_mostrados +1
%> 
<%For campo=0 to num_campos-1 %>
   <%Next%>
			
 			<div class="fila">


                       	<div class="lista1">
                <a href="detalle.asp?id=<%=tabla.fields("id")%>" title="Detalle" target="_self"><img class="imagen" style="border: 1px solid #0000;"  src="miniaturas/<%=tabla.fields("foto")%>" /></a>
                </div>   
                    <div class="lista">
                        <ul>
                           <li><span class="negrita"><a href="detalle.asp?id=<%=tabla.fields("id")%>" title="Detalle" target="_self"><%=tabla.fields("Titulo")%></a></span> <a href="buscaranio.asp?anio=<%=tabla.fields("Anio")%>" target="_self">(<%=tabla.fields("Anio")%>)</a></li>
                            <li><span class="gris"><a href="buscarpais.asp?pais=<%=tabla.fields("Pais")%>" target="_self"><%=tabla.fields("Pais")%></span></a></li>
                            <li><span class="lnegro"><a href="buscardirector.asp?director=<%=tabla.fields("Director")%>" target="_self"><%=tabla.fields("Director")%></span></a></li>
                            <li><%=tabla.fields("Interpretes")%></li>
                        </ul>
                    </div>
                </div>                      
                
		    <% tabla.movenext
			Wend 

            
i=0
%>
<% if tabla.PageCount > 1 then%> 
<div class="paginacion"><span class="pag2">Ir a la página:
<% While i<tabla.PageCount  
   i=i+1  
%>
	
   <a href="buscaractor.asp?actor=<%=tmultiple%>&pag=<%=i%>"> <%=i%></a>
   
<%
Wend
%>
</span>         
</div>				 
       <% 
	   tabla.close
	   conexion.close
	   %>
<% else 
	   tabla.close
	   conexion.close
end if %>

<%  case 2:
  ssql = "SELECT * FROM PELICULAS WHERE Titulo like '*" & replace(tmultiple,"'","'") & "*'"
  
response.write "<br /> ssql = " & ssql
response.end
  
  tabla.Open sSQL,conexion,adopenstatic,adcmdtext


'resultados por pagina a elegir arbitrariamente'
num_registros = 10 
 session("ssql")=ssql
	   %>
       
<!--actualizamos numero de pagina-->
<%If Request.QueryString("pag")<>"" Then
   Session("pagina")=Request.QueryString("pag")
Else
   Session("pagina")=1
End If%>

 <div align="center">
<% if tabla.RecordCount = 0 then%>
<%response.Write("No se han encontrado resultados")
response.end()%>
<% else if tabla.RecordCount = 1 then%>
Se ha encontrado: <span class="negrita2"><%=tabla.RecordCount%></span> resultado
<%else%>
Se han encontrado: <span class="negrita2"><%=tabla.RecordCount%></span> resultados
<%end if
end if%>
<%ptotales = tabla.PageCount%>
</div>

<%'Dimensionamos las paginas y determinamos la pagina actual'
tabla.PageSize=num_registros
tabla.AbsolutePage=Session("pagina")

'Contamos el numero de campos
num_campos=tabla.Fields.Count
For campo=0 to num_campos-1%>
   
<%
Next
registros_mostrados = 0%>

<%if tabla.RecordCount >=5 then%>
<div class="blanco">
<%else%>
<div class="blancoie">
<%end if%>

<%While (Not tabla.eof And registros_mostrados < num_registros)
   registros_mostrados = registros_mostrados +1
%> 
<%For campo=0 to num_campos-1 %>
   <%Next%>
			
 			<div class="fila">
                       	<div class="lista1">
                <a href="detalle.asp?id=<%=tabla.fields("id")%>" title="Detalle" target="_self"><img class="imagen" style="border: 1px solid #0000;"  src="miniaturas/<%=tabla.fields("foto")%>" /></a>
                </div>   
                    <div class="lista">
                        <ul>
                           <li><span class="negrita"><a href="detalle.asp?id=<%=tabla.fields("id")%>" title="Detalle" target="_self"><%=tabla.fields("Titulo")%></a></span> <a href="buscaranio.asp?anio=<%=tabla.fields("Anio")%>" target="_self">(<%=tabla.fields("Anio")%>)</a></li>
                            <li><span class="gris"><a href="buscarpais.asp?pais=<%=tabla.fields("Pais")%>" target="_self"><%=tabla.fields("Pais")%></span></a></li>
                            <li><span class="lnegro"><a href="buscardirector.asp?director=<%=tabla.fields("Director")%>" target="_self"><%=tabla.fields("Director")%></span></a></li>
                            <li><%=tabla.fields("Interpretes")%></li>
                        </ul>
                    </div>
                </div>                      
                
		    <% tabla.movenext
			Wend 

            
i=0
%>
<% if tabla.PageCount > 1 then%> 
<div class="paginacion"><span class="pag2">Ir a la página:
<% While i<tabla.PageCount  
   i=i+1  
%>
	
   <a href="buscartitulo.asp?titulo=<%=tmultiple%>&pag=<%=i%>"> <%=i%></a>
   
<%
Wend
%>
</span>         
</div>				 
       <% 
	   tabla.close
	   conexion.close
	   %>
<% else 
	   tabla.close
	   conexion.close
end if %>


<%end select %>
</div>
 ...
Tal y como está ahora sólo muestra el contenido de las ssql pero he hecho pruebas sin el response.write y response.end y no encuentra resultados busque lo que busque. No tenía ningún título que empezase por Director pero lo he creado y al buscar de nuevo tampoco lo ha encontrado.

Lo de poner otro * delante no se si he entendido como iría ¿algo así? Lo he probado y me da el error de ayer: Microsoft JET Database Engine (0x80040E14)

ssql = "SELECT * FROM PELICULAS WHERE Titulo like '*" & replace(tmultiple,"'","'") & "*'"

ssql = SELECT * FROM PELICULAS WHERE Titulo like '*Director's cut*'
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:26.