Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Error con LIKE y apóstrofe (https://www.clubdelphi.com/foros/showthread.php?t=14875)

Tecnic2 04-10-2004 11:28:34

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.

Investment 04-10-2004 11:45:51

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.

Tecnic2 04-10-2004 11:53:06

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?

basti 04-10-2004 12:05:09

Hola

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

un saludo

Neftali [Germán.Estévez] 04-10-2004 14:13:39

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;

Tecnic2 05-10-2004 09:38:53

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.

basti 05-10-2004 10:02:02

Hola

A mi me funciona, te pongo un ejemplo.

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

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


La franja horaria es GMT +2. Ahora son las 05:48:04.

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