| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 27 Dic, 2012 5:23 pm Asunto: Query con LIKE: Esto no me había pasado nunca |
|
|
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 |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Mar 22 Ene, 2013 4:47 am Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 22 Ene, 2013 1:23 pm Asunto: |
|
|
| 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 |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Jue 24 Ene, 2013 11:24 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 25 Ene, 2013 11:52 am Asunto: |
|
|
| 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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 25 Ene, 2013 4:54 pm Asunto: |
|
|
| 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 |
|
 |
|