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 26-12-2012
joaking joaking is offline
Registrado
NULL
 
Registrado: nov 2012
Posts: 3
Poder: 0
joaking Va por buen camino
buscar por campo que no es clave.

Buenas, pues como estoy empezando en lazarus, firebird y zeos tengo un primer problema.

He creado una tabla con codcliente,nombre. El problema está cuando quiero buscar por nombre me da un error sql error code = -206 ..... pero si busco por id(que es clave de la tabla) funciona correctamente.

ZQbnombre.SQL.text := 'select nombre from clientes where nombre = "pepe"'; (error)
ZQbnombre.SQL.text := 'select * from clientes WHERE codcliente = 2';
¿En las especificaciones del campo nombre tiene que tener algo para poder buscar luego en él?

Gracias.
Responder Con Cita
  #2  
Antiguo 26-12-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola joaking, bienvenido a Club Delphi

Según veo en tu sentencia:
Código Delphi [-]
  ZQbnombre.SQL.text := 'select nombre from clientes where nombre = "pepe"';
  ...
estas encerrando a pepe entre comillas dobles (") y tendrías que encerrarlo entre dos pares de comillas simples (' '):
Código Delphi [-]
  ZQbnombre.SQL.text := 'select nombre from clientes where nombre = ''pepe''';
  ...
También podrías hacer:
Código Delphi [-]
  ZQbnombre.SQL.text := 'select nombre from clientes where nombre = ' + QuotedStr('pepe');
  ...
Y mucho mejor pasando a pepe como parámetro:
Código Delphi [-]
  ZQbnombre.SQL.text := 'select nombre from clientes where nombre = :PNOMBRE';
  ZQbnombre.ParamByName('PNOMBRE').AsString := 'pepe';
  ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 26-12-2012
joaking joaking is offline
Registrado
NULL
 
Registrado: nov 2012
Posts: 3
Poder: 0
joaking Va por buen camino
Gracias, Perfecto. Pero ahora complicándolo un poco más, este otro no me funciona correctamente.

Código Delphi [-]
  ZQbnombre.SQL.text := 'select * from clientes where upper(nombre) like'+QuotedStr('%'+bnombre.Text+'%');

bnombre.text ----- TEdit campo con el texto a buscar pero quiero que lo busque tanto si lo escribo en mayúsculas como en minúsculas sin saber como está metido en la tabla.

Muchas gracias.

Última edición por ecfisa fecha: 26-12-2012 a las 23:04:11. Razón: Corregir problema etiquetas (WYSIWYG)
Responder Con Cita
  #4  
Antiguo 26-12-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola joaking.

Cita:
quiero que lo busque tanto si lo escribo en mayúsculas como en minúsculas sin saber como está metido en la tabla.
Como ejemplo, una búsqueda incremental desde un Edit:
Código Delphi [-]
procedure TForm.bnombreChange(Sender: TObject);
begin
  ZQbnombre.Close;
  ZQbnombre.SQL.text := 'SELECT * FROM CLIENTES WHERE UPPER(NOMBRE) LIKE '+
    QuotedStr(UpperCase(bnombre.Text)+'%');
  ZQbnombre.Open;
end;

Pero, para evitar la inyección SQL, mucho mejor sería:
Código Delphi [-]
procedure TForm.bnombreChange(Sender: TObject);
begin
  ZQbnombre.Close;
  ZQbnombre.SQL.Text := 'SELECT * FROM CLIENTES WHERE UPPER(NOMBRE) LIKE :PNOMBRE';
  ZQbnombre.ParamByName('PNOMBRE').AsString := UpperCase(bnombre.Text)+'%';
  ZQbnombre.Open;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 26-12-2012 a las 23:26:49. Razón: Ortografía
Responder Con Cita
  #5  
Antiguo 27-12-2012
joaking joaking is offline
Registrado
NULL
 
Registrado: nov 2012
Posts: 3
Poder: 0
joaking Va por buen camino
Perfecto para un campo de búsqueda. Mucho tengo que aprender de sql. La inyección SQL nunca se me hubiera ocurrido.

Muchas 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
Campo clave unico en Dif. PC, Como? El_Raso Firebird e Interbase 6 08-11-2010 11:12:22
Campo clave en DBase!!!!! EfrainSanmiguel Conexión con bases de datos 7 14-12-2005 17:27:31
Campo clave incrementa Marcosr_87 SQL 8 21-11-2004 23:24:37
Agregar un campo clave sitrico Conexión con bases de datos 2 28-01-2004 15:41:08
Mas de un campo clave en IB. BECERRA Firebird e Interbase 7 28-05-2003 11:46:48


La franja horaria es GMT +2. Ahora son las 07:30:42.


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