Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Problemas con 'like' (https://www.clubdelphi.com/foros/showthread.php?t=72517)

Toni 23-02-2011 17:02:58

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.

BlueSteel 23-02-2011 19:04:21

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:p:cool:

Toni 23-02-2011 19:27:47

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.

Casimiro Noteví 23-02-2011 20:54:21

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'



La franja horaria es GMT +2. Ahora son las 21:43:40.

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