Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-02-2011
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Poder: 22
Toni Va por buen camino
Problemas con 'like'

Buenas tardes,

Tengo una base de datos realizada en FB1.5, y la aplicación en C++ Builder 6 con componentes de acceso a datos IBX.

Me estoy encontrando con un problema en unas consultas muy simples que hasta el momento funcionaban y nadie se habia quejado. Estas consultas SQL permiten consultar o todos los registros por defecto o si el usuario entra en un Edit un articulo solo devuelve los que se corresponden con dicho articulo.

Para poder hacer la clausula where utilizo un like y desde el programa concateno '%' + Codigo.

Código SQL [-]
PARAM1 = '%1234'  '1234 seria el codigo a buscar.

select * from Historico where codigo like :PARAM1;

Este sistema me ha estado funcionando bien hasta ahora, que me he encontrado con el caso que hay registros en la base de datos que no me los esta mostrando.

Por ejemplo, desde el IBManager realizo la misma consulta pero en lugar de utilizar el like utilizo '=', entonces si me retorna todos los registros con el codigo='1234', cosa que con like en algun caso muy, muy puntual no me devuelve todos los registros.

Código SQL [-]
PARAM1 = '1234'  '1234 seria el codigo a buscar.

select * from Historico where codigo = :PARAM1;

Deciros que esta tabla historico tiene aplicada una llave externa con la tabla de articulos para garantizar que el codigo de articulo es correcto y existe. Por lo que no permitiria un codigo con espacios o algun error de estos.

Como os decia es en algun caso muy puntual pero tengo que encontrar la causa. En uno de los casos que me he encontrado he estado intentando buscar que diferencia podia haber entre este registro y los que si devolvia, pero no he encontrado nada. Lo que si puedo aportar es que desde el IBMananger me he colocado encima del registro en cuestion y le he vuelto a repicar el codigo sobre si mismo y he grabado los cambios con la sorpresa de que ahora ya sale el registro cuando se consulta desde el programa.
__________________
Saludos,

Bitman

Última edición por Toni fecha: 23-02-2011 a las 17:13:16.
Responder Con Cita
  #2  
Antiguo 23-02-2011
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 24
BlueSteel Va por buen camino
Hola

no se si te sirva, pero yo utilizaba Interbase y el codigo para aplicar el like era el sigte:

Código Delphi [-]
IBQ_Select.Close;
IBQ_Select.SQL.clear;
IBQ_Select.Sql.Add('Select * From "Proveedor"');
IBQ_Select.Sql.Add('Where "Pro_Rut" Like'+QuotedSTr('%'+vBus.Text+'%'));
IBQ_Select.Open;

vBus es un componente de tipo Edit

Salu2
__________________
BlueSteel
Responder Con Cita
  #3  
Antiguo 23-02-2011
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Poder: 22
Toni Va por buen camino
Hola,

Por lo que yo se los '%' en el like se utilizan de igual forma que los comodines '*' en un dir de ms-dos, por lo si lo colocar solo delante '%1234' te buscara coincidencias que terminen en '1234'.

Cita:
001234
221234
1234
Si lo pones como tu me dices '%1234%' buscara concidencias en cualquier parte del campo.

Cita:
001234
221234
1234
012340 - esta no saldria en el otro caso
Muchas gracias igualmente.
__________________
Saludos,

Bitman
Responder Con Cita
  #4  
Antiguo 23-02-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Exactamente así:

Cita:
LIKE is a case-sensitive pattern search operator. It is quite a blunt instrument
compared to pattern searches in regular expression engines. It recognizes two “wild-
card” symbols, % and _ (the underscore character), that work as follows:
• % can be substituted into a search string to represent any number of unknown
characters, including none, for example:
LIKE '%mit%'
will be true with strings such as 'blacksmith', 'mitgenommen', 'commit', as well
as 'mit'.
• An underscore character ( _ ) can be substituted into a search string to represent
a single, unknown character. For example, the following searches for records
where the surname might be 'Smith', 'Smyth', or a similar pattern:
LIKE 'Sm_th'
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 17:45:47.


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