![]() |
Error con Lower?
Buenos días,
Tengo una consulta con un LIKE que hace condiciones como esta: xdoc like "% '+temp+' %" La variable temp esta formateada antes para pasar a minúsculas: temp:=ansilowercase(temp); La cosa es que para que me haga correctamente la consulta se supone que añadiendo el Lower delante de xdoc (el campo) ya tendría que funcionar, pero no, tengo un try catch puesto desde el principio de la función y me salta éste en el momento que pongo esto: lower(xdoc) like "% '+temp+' %" Alguna sugerencia? No sé qué hacer más.. Muchas gracias de antemano - Zaida - |
Pero, ¿cuál es la excepción? ¿Qué mensaje porta?
|
Ups, perdón, tienes toda la razón.
El error es: Type mismatch in expression Gracias |
Entonces "temp" no es un STRING ni un ANSISTRING, sino un PCHAR, ¿me equivoco? Si es así, ahí está el problema, ya que no se pueden concatenar PCHAR así como así. Si no recuerdo mal, lo siguiente debería funcionar:
O, en el peor de los casos: Si no es el caso, entonces pon el método completo a ver si el problema está en otro lado. |
La variable temp es del tipo: widestring.
He añadido lo de ansistring(temp) en la consulta, tal y como comentas y me sigue dando el mismo error. Voy a cambiar el tipo de la variable temps de widestring a ansistring o string, aver si funciona. Gracias |
He puesto la variable temp como ansistring:
temp: ansistring; Y nada..me sigue saltando el mismo error. También he probado lo de crear una variable temp_aux de tipo ansistring y hacer un temp_aux:=temp, y tampoco. Y el error es seguro que viene de aquí porque en el momento que quito lo de lower(temp) y dejo solo temp, hace la consulta correctamente. |
Hola nena_yei.
No sé si entendi bién tu problema, pero hice esta prueba con employee.gdb y me funciona perfectamente.
Un saludo. |
Gracias ecfisa, pero la cosa sigue sin funcionar, he llegado a la conclusión que la función LOWER no es compatible con el motor de base de datos que estoy utilizando. La solución sería tener toda la información en minúscula en la base de datos (cosa imposible) o en la consulta sql hacer la comparación con la palabra buscada tal cual, la palabra buscada en mayúscula y la palabra buscada en minúscula, pero tampoco me es posible porque es una consulta con multitud de condiciones (es un diccionario etimológico, de ahí la dificultad) y si añado 2 condiciones a cada comparación, la consulta excede de carácteres y también me saltaría un error.
Si alguien tiene alguna idea de como podría solucionarlo? Muchas gracias |
Hola,
¿Que base de datos usas? Con Firebird, la función lower funciona correctamente. Saludos, |
La base de datos está en Access
|
Hola.
Entonces la función es lcase (y ojo, que en access las comillas son dobles). Un saludo. |
Hola,
Con lcase me aparece el siguiente error: Capability not supported. Qué desesperación..porque la aplicación la inició otra persona y la verdad es que me está costando sacarla ahora adelante, y más porque hacía 4 años que no tocaba nada de Delphi! Saludos, |
Hola.
Prueba a hacer la instrucción completa en access, y cuando te funcione, copia y pega en delphi. Cuando da guerra, bajo mi punto de vista, lo mejor es probar la sintaxis completa de la instrucción sobre la base de datos y solo cuando funcione adaptarla al programa. Saludos, |
Ya lo hice anteriormente eso, la consulta en sí esta bien, cuando la paso directamente a Access hago los cambios que toca (dobles comillas y demás) y funciona correctamente. El problema lo da cuando se ejecuta desde Delphi, que en el momento de poner el lower, me da el error de Type mismatch, he probado también de poner la palabra a buscar manualmente, es decir sin utilizar la variable "temp" y también me da error.
xdoc like "% test %" --> también da error Que algo que parece tan sencillo y simple de estos problemas..buff.. Saludos, |
La franja horaria es GMT +2. Ahora son las 23:34:35. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi