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 02-07-2010
antigrondona antigrondona is offline
Miembro
 
Registrado: ene 2010
Posts: 47
Poder: 0
antigrondona Va por buen camino
Incluir comillas y singos en consulta sql

Hola amigos. Resulta que tengo una consulta donde quiero buscar parte de un texto, seria where(sinopsis like "%detalle%"), donde detalle es la variable que contiene la frase a buscar. El problema es que si tengo una frase a buscar, con comilla y los 2 puntos, me salta el error de sintaxis, ejemplo:
casa de: d'amico es una frase que me trae problemas, la comilla o apostrofe sola no, pero si previamente tiene ( : ) ahi me genera el error.

Supongo que habria que adaptar la cadena detalle, de manera de evitar el problema en la consulta.

Espero sus ayudas, saludos.
Responder Con Cita
  #2  
Antiguo 02-07-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Código Delphi [-]
with TuQuery do begin //suponiendo que es un TADOQUery
 if active then close;
 SQL.Clear;
 SQL.Add('Select UnCampo');
 SQL.Add('From UnaTabla T');
 SQL.Add('Where UnCampo like :UnValor');
 Parameters.ParamByName('UnValor').Value := '%' + Detalle + '%';
 Open;
end;

o también:
Código Delphi [-]
....
 SQL.Add('Where UnCampo like '+QuotedStr('%'+ ReplaceStr(Detalle, ' ', '%')+'%'));
....

Aunque yo me inclino más por usar parámetros.
__________________


Última edición por ContraVeneno fecha: 02-07-2010 a las 18:16:41.
Responder Con Cita
  #3  
Antiguo 02-07-2010
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Se me ocurre que podrías cambiar los caracteres que te dan problemas por el signo de interrogación.
En el caso que comentas quedaría de la siguiente forma ?d?amico, create una función por donde pasar los string y que te lo guarde en otra variable con los caracteres ya cambiados.

Un saludo.
Responder Con Cita
  #4  
Antiguo 02-07-2010
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Había dejado abierto el hilo y no me he dado cuenta de que ContraVeneno ya te había contestado, sigue sus consejos que seguro serán más útiles que los mios.

Un saludo.
Responder Con Cita
  #5  
Antiguo 02-07-2010
antigrondona antigrondona is offline
Miembro
 
Registrado: ene 2010
Posts: 47
Poder: 0
antigrondona Va por buen camino
ok, probare con los parametros, ahora bien, necesito por favor que me guien un poco más para completar la instruccion, mi linea de consulta para el query (es de tipo TAdoquery) es:
detalle, que es un edit que captura en detalle.text lo que se quiere buscar
query.sql.text:='select * from tabla where (det like "%'+detalle.text+'%")';

Ahi necesitaria ver como arreglarlo para probar
Responder Con Cita
  #6  
Antiguo 02-07-2010
antigrondona antigrondona is offline
Miembro
 
Registrado: ene 2010
Posts: 47
Poder: 0
antigrondona Va por buen camino
Acabo de descubrir que el problema es otro, dejo la linea exacta ya que estaba posteando un ejemplo gral

peli_q1.Active:=false;
peli_q1.SQL.Clear;
peli_q1.SQL.Text:='Select * from TPeliculas where(peli_tit like "%'+info.Text+'%")and(peli_titori like "%'+info.Text+'%") order by peli_titori';
peli_q1.Active:=true;

el problema es la condicion doble ya que con
peli_q1.Active:=false;
peli_q1.SQL.Clear;
peli_q1.SQL.Text:='Select * from TPeliculas where(peli_tit like "%'+info.Text+'%") order by peli_titori';
peli_q1.Active:=true;

no genera error
Responder Con Cita
  #7  
Antiguo 05-07-2010
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
No se que gestor de base de datos usas, pero cuando yo hago un consulta con un like para encontrar dentro de un campo una cadena de texto tengo que utilizar comillas simples, al copiar tu ejemplo me sale que son comillas dobles (esta de aquí->"%'+info.Text+'%"<-y esta de aquí), yo te aconsejaría que, igual que en el ejemplo que te ha puesto ContraVeneno utilizaras el quotedstr que te añade las comillas simples a la cadena de string que le pases a esta función, en tu caso la comparación yo la pondría de la siguiente forma.
Código Delphi [-]
peli_q1.Close;
peli_q1.SQL.Text:='Select * from TPeliculas where (peli_tit like '+quotedstr('%'+info.Text+'%')+')and(peli_titori like '+quotedstr('%'+info.Text+'%')+') order by peli_titori';
peli_q1.ExecSQL;
peli_q1.Open;

Por cierto, intenta utilizar las etiquetas de delphi para cuando pongas código así se verá más claro tu mensaje.
Un saludo.
Responder Con Cita
  #8  
Antiguo 06-07-2010
antigrondona antigrondona is offline
Miembro
 
Registrado: ene 2010
Posts: 47
Poder: 0
antigrondona Va por buen camino
Cita:
Empezado por ElDioni Ver Mensaje
No se que gestor de base de datos usas, pero cuando yo hago un consulta con un like para encontrar dentro de un campo una cadena de texto tengo que utilizar comillas simples, al copiar tu ejemplo me sale que son comillas dobles (esta de aquí->"%'+info.Text+'%"<-y esta de aquí), yo te aconsejaría que, igual que en el ejemplo que te ha puesto ContraVeneno utilizaras el quotedstr que te añade las comillas simples a la cadena de string que le pases a esta función, en tu caso la comparación yo la pondría de la siguiente forma.
Código Delphi [-]peli_q1.Close; peli_q1.SQL.Text:='Select * from TPeliculas where (peli_tit like '+quotedstr('%'+info.Text+'%')+')and(peli_titori like '+quotedstr('%'+info.Text+'%')+') order by peli_titori'; peli_q1.ExecSQL; peli_q1.Open;


Por cierto, intenta utilizar las etiquetas de delphi para cuando pongas código así se verá más claro tu mensaje.
Un saludo.
amigo, utilizo un archivo sencillo de acces para la base de datos. Tu recomendacion me evita el error, es decir, con la consulta como vos la planteas no revienta el programa pero la busqueda no es eficiente. Pongo una frase tal cual esta en la tabla y no la encuentra.
Responder Con Cita
  #9  
Antiguo 06-07-2010
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Además de la última recomendación que te hago, ¿has probado a cambiar los caracteres que te daban problemas por signos de interrogación como te comentaba en mi primera aportación?
Yo creo que con estados dos opciones sumadas no deberías tener ningún problema.
Un saludo.

Última edición por ElDioni fecha: 06-07-2010 a las 17:33:35.
Responder Con Cita
  #10  
Antiguo 06-07-2010
antigrondona antigrondona is offline
Miembro
 
Registrado: ene 2010
Posts: 47
Poder: 0
antigrondona Va por buen camino
Cita:
Empezado por ElDioni Ver Mensaje
Además de la última recomendación que te hago, ¿has probado a cambiar los caracteres que te daban problemas por signos de interrogación como te comentaba en mi primera aportación?
Yo creo que con estados dos opciones sumadas no deberías tener ningún problema.
Un saludo.
No entiendo a qué te referís con cambiar a signos de admiración, lo que sí es que sacando ( " ) y poniendo quotedstr (de hecho probe con el select tal cual vos armaste) no genera error pero no busca correctamente.
Responder Con Cita
  #11  
Antiguo 06-07-2010
antigrondona antigrondona is offline
Miembro
 
Registrado: ene 2010
Posts: 47
Poder: 0
antigrondona Va por buen camino
Perdón amigos, no me hacia la búsqueda correctamente porque era peli_tit or peli_titori, estaba poniendo ''and'' por lo que era imposible que encuentre 2 títulos iguales.
La solución es entonces utilizar quotedstr y quitar ( " ). Mil gracias.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
String Con comillas agonzalez Varios 14 03-03-2017 07:46:41
Problemas con las comillas al conformar una consulta SQL kman Varios 13 19-08-2006 20:06:40
Las comillas de marras! IPQ Firebird e Interbase 3 15-06-2006 16:26:45
Comillas y fechas Carlex SQL 6 26-01-2006 03:22:02
Problema con comillas en Consulta SQL COCOL SQL 5 17-03-2005 01:45:47


La franja horaria es GMT +2. Ahora son las 06:45:00.


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