Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-10-2004
Tecnic2 Tecnic2 is offline
Miembro
 
Registrado: may 2004
Posts: 155
Poder: 21
Tecnic2 Va por buen camino
Question Error con LIKE y apóstrofe

Hola a todos,

Tengo que hacer una búsqueda en mi aplicación de un camp de texto, para éllo utilizo una consulta SQL con la instrucción LIKE. El problema me viene cuando lo que tengo que buscar son nombres de ciudades como L'Hospitalet, el cual contiene un apóstrofe que el SQL interpreta como final de cadena y me genera un error.

Cómo puedo solventar éste problema?

Gracias por adelantado.
Responder Con Cita
  #2  
Antiguo 04-10-2004
Avatar de Investment
Investment Investment is offline
Miembro
 
Registrado: may 2003
Posts: 378
Poder: 22
Investment Va por buen camino
Yo lo que hago normalmente es sustituir el apóstrofe por un acento en la tabla para poder buscar sin problemas

L'Hospitalet se convierte en L´hospitalet y ya puedes buscar sin problemas.
__________________
Saludos,
Peter Investment
Responder Con Cita
  #3  
Antiguo 04-10-2004
Tecnic2 Tecnic2 is offline
Miembro
 
Registrado: may 2004
Posts: 155
Poder: 21
Tecnic2 Va por buen camino
Unhappy No me sirve para buscar

Garcias por respoder.

Ésta solución ya la había pensado yo, pero al buscar después no encuentran L'Hospitalet porque me escriben un acento seguido de espacio, sinó una apóstrofe.

Alguna solución mas?
Responder Con Cita
  #4  
Antiguo 04-10-2004
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Hola

Tienes que sustituir la comilla simple por dos comillas simples, de manera que te quede así: L''Hospitalet

un saludo
Responder Con Cita
  #5  
Antiguo 04-10-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Tecnic2
..El problema me viene cuando lo que tengo que buscar son nombres de ciudades como L'Hospitalet, el cual contiene un apóstrofe que el SQL interpreta como final de cadena y me genera un error.
Puedes utilizar una función similar a ésta para pasársela a la cadena antes de hacer la búsqueda; Lo que hace es sustituir una comilla simple por dos; Supongo que puedes programar otras variantes; Busca en la ayuda de delphi sobre Pos, para buscar un caracter (y no tener que recorrer toda la cadena), o incluso la función AnsiReplaceStr, para sustituir directamente (que en las últimas versiones de Delphi ya viene); Pero bueno mientras tanto...

Código Delphi [-]
function ReplaceSimpleQuote(str : string): string;
const
  QUOTE = #39;
var
  i   : integer;
begin
  Result := STR_EMPTY;
  // recorrer la cadena
  for i:=1 to length(str) do begin
    // si encuentra comilla....
    if str[i]= QUOTE then begin
      // añado dos en lugar de una
      result := result + QUOTE + QUOTE;
    end
    else begin
      // dejo el caracter que estaba....
      result := result + str[i];
    end;
  end;
end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 05-10-2004
Tecnic2 Tecnic2 is offline
Miembro
 
Registrado: may 2004
Posts: 155
Poder: 21
Tecnic2 Va por buen camino
Post Solo evita el error

Por lo que veo, con las soluciones que me dais, lo que se hace es no solucionar el problema sinó que evita que salga el error.

De todas formas, muchas gracias por las respuestas.
Responder Con Cita
  #7  
Antiguo 05-10-2004
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Hola

A mi me funciona, te pongo un ejemplo.

Código SQL [-]
   Select Codigo, Nombre, Direccion from clientes where poblacion like oblacion

Código Delphi [-]
    QClientes.ParamByName('poblacion').AsString := AnsiReplaceStr(Edit1.Text, '''', '''''');
    QClientes.Open;

El segundo parámetro de AnsiReplaceStr son cuatro comillas y el último seis comillas.
Si no tienes esta función en tu delphi puedes usar la función que te dio Neftali.


un saludo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 04:47:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi