Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-02-2011
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Question 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 -
Responder Con Cita
  #2  
Antiguo 18-02-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Pero, ¿cuál es la excepción? ¿Qué mensaje porta?
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 18-02-2011
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Ups, perdón, tienes toda la razón.
El error es:
Type mismatch in expression

Gracias
Responder Con Cita
  #4  
Antiguo 18-02-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
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:
Código Delphi [-]
'lower(xdoc) like "% '+ANSISTRING (temp)+' %"'
O, en el peor de los casos:
Código Delphi [-]
VAR
  temp2: ANSISTRING;
(...)

  temp2 := temp;
(...)
  'lower(xdoc) like "% '+temp2+' %"'
Si no es el caso, entonces pon el método completo a ver si el problema está en otro lado.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #5  
Antiguo 18-02-2011
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 18-02-2011
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 18-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola nena_yei.

No sé si entendi bién tu problema, pero hice esta prueba con employee.gdb y me funciona perfectamente.
Código Delphi [-]
var
  temp: WideString;
begin
  temp:= 'Japan';
  temp:= Lowercase(temp);
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Add('SELECT * FROM COUNTRY');
  IBQuery1.SQL.Add('WHERE LOWER(COUNTRY) LIKE ''%'+ temp + '%''');
  IBQuery1.Open;
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 28-02-2011
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
Question

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

Última edición por nena_yei fecha: 28-02-2011 a las 10:12:59.
Responder Con Cita
  #9  
Antiguo 28-02-2011
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 14
pacopenin Va por buen camino
Hola,

¿Que base de datos usas? Con Firebird, la función lower funciona correctamente.

Saludos,
__________________
http://www.gestionportable.com
Responder Con Cita
  #10  
Antiguo 28-02-2011
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
La base de datos está en Access
Responder Con Cita
  #11  
Antiguo 28-02-2011
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 14
pacopenin Va por buen camino
Hola.

Entonces la función es lcase (y ojo, que en access las comillas son dobles).

Un saludo.
__________________
http://www.gestionportable.com
Responder Con Cita
  #12  
Antiguo 28-02-2011
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
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,
Responder Con Cita
  #13  
Antiguo 28-02-2011
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 14
pacopenin Va por buen camino
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,
__________________
http://www.gestionportable.com
Responder Con Cita
  #14  
Antiguo 28-02-2011
nena_yei nena_yei is offline
Miembro
 
Registrado: abr 2009
Posts: 60
Poder: 16
nena_yei Va por buen camino
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,
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Por qué sale el [Fatal Error]Internal Error:LA30?? Lizette Varios 13 14-01-2016 13:44:35
Error al generar instalador con installshield (error 6173) jangel_ramirezm Varios 4 09-12-2008 00:07:54
dbexpress Error: unknown error Code '101' raorre Conexión con bases de datos 3 13-10-2008 07:53:49
Error General Sql Error lock conflict ...deadlock Patricio Varios 1 19-03-2008 14:52:14
error:[Fatal Error] Unit1.pas(7): Unit ZDbcConnection was compiled with a different.. karaoke Conexión con bases de datos 2 19-12-2007 10:22:36


La franja horaria es GMT +2. Ahora son las 17:40:33.


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