Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Query con LIKE: Esto no me había pasado nunca

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Query con LIKE: Esto no me había pasado nunca Responder citando

Tengo esta tabla en una base de datos Firebird:
Código:
CREATE TABLE Municipio (Nombre CHAR(65) NOT NULL, Codigo CHAR(5) NOT NULL, Registro INTEGER NOT NULL, PRIMARY KEY (Nombre, Codigo, Registro))

y quiero buscar un registro por el código postal con este query:
Código:
SELECT DISTINCT Nombre, Codigo, Registro FROM Municipio WHERE Codigo LIKE :Postal ORDER BY Nombre, Codigo

el parámetro :Postal lo asigno así:
Código:
Query->ParamByName("Postal")->AsString  = Postal.Trim().SubString(1, nCount) + "%";

donde nCount es el valor de un bucle decreciente desde 5 hasta 2. Bien: Cuando el código postal está completo (p. ej. 45001), al ejecutar el query tal cual me da este error:

Entiendo el error: El campo Codigo tiene cinco posiciones y estoy haciendo una comparación con una cadena de 6 (45001%), pero es que esta rutina en otro programa y otra base de datos, con una tabla exactamente igual, me funciona perfectamente en casos similares al ejemplo; ahora tengo andar calculando la longitud del campo para ver si le pongo o no el comodín %.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola Angel, personalmente prefiero usar VARCHAR antes que CHAR, creo que si cambias CHAR(5) por VARCHAR(5) creo que se soluciona el problema.

Una variante interesante de LIKE en Firebird CONTAINING ..

saludos Tor.
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Lo de usar VARCHAR no se me había ocurrido. La otra instrucción que citas no la conocía; miraré.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Tor escribió:
Una variante interesante de LIKE en Firebird CONTAINING
La instrucción CONTAINING no me vale porque me saca todas las filas que contengan ese dato, no que empiecen.

He probado cambiando en la definición de las tablas CHAR por VARCHAR y el resultado es el mismo. Lo más curioso de todo es que esta misma tabla, con la misma definición y contenido, la uso en otro programa con el mismo query ¡y me funciona perfectamente!
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Angel probaste con VARCHAR(6) o incluso mas, solo para salir de la duda duda de que fuera realmente un problema de longitud de campo.

con respecto a CONTAINING como te decía es una variante interesante de LIKE, en los casos que se realicen búsquedas de textos con mayúsculas, minúsculas, acentos etc, LIKE es muy estricto.

saludos tor
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Tor escribió:
Angel probaste con VARCHAR(6) o incluso mas, solo para salir de la duda duda de que fuera realmente un problema de longitud de campo.

Pues no, no lo he probado.

Tor escribió:
con respecto a CONTAINING como te decía es una variante interesante de LIKE, en los casos que se realicen búsquedas de textos con mayúsculas, minúsculas, acentos etc, LIKE es muy estricto.

No la conocía hasta que las has citado, pero es muy interesante.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Tor escribió:
Angel probaste con VARCHAR(6) o incluso mas, solo para salir de la duda duda de que fuera realmente un problema de longitud de campo.

Como cabía esperar ha funcionado a la perfección. Lo que me sorprende es que en otra tabal exactamente igual con el campo código postal a cinco posiciones y con la misma rutina me funciona a la perfección; no soy capaz de ver que es lo que es distinto entre ambas bases de datos.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.