Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 05-06-2020
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Como dices los compañeros, lo del formato despliegue lo defines tu.

Mencionas en tu primer post que usas los componentes FIBPlus.

Bueno el TpfIBDataset tiene una propiedad 'DefaultFormats' en la cual puedes definir los siguientes formatos de despliegue:
Código Delphi [-]
     DefaultFormats.DateTimeDisplayformat:='dd.mm.yyyy hh:mm';
     DefaultFormats.DisplayFormatDate:='dd.mm.yyyy';
     DefaultFormats.DisplayFormatTime:='hh:mm';
     DefaultFormats.NumericDisplayFormat:='#,##0.0';
     DefaultFormats.NumericEditFormat:='0.0';

Con esto das solución a el problema al formato de despliegue de datos.

Saludos cordiales
Responder Con Cita
  #22  
Antiguo 07-06-2020
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Perdonad que os moleste de nuevo con este tema. He usado los parámetros como me habéis dicho pero con este código me da el error:
SQL Error code -303
Arithmetic excepcion, numeric overflow or string truncation.

El código que uso es:
Código Delphi [-]
HistoricoRecibos.Close;
HistoricoRecibos.SelectSQL.Clear;
HistoricoRecibos.SelectSQL.add('SELECT * from HistoricoRecibos');
HistoricoRecibos.SelectSQL.add('where (Upper(Socio) LIKE :Socio)');
HistoricoRecibos.SelectSQL.add('OR Cast(lpad(extract(Month from FECHAEMISION),2,''0'') as VarChar(3)) || ''.'' || 
                                   Cast(lpad(extract(Day from FECHAEMISION),2,''0'') as VarChar(3)) || ''.'' || 
                                   Cast(extract(year from FECHAEMISION) as VarChar(5)) LIKE :FechaEmision');
HistoricoRecibos.ParamByName('Socio').AsString := '%' + Edit1.Text + '%';
HistoricoRecibos.ParamByName('FechaEmision').AsString := '%' + Edit1.Text + '%';

HistoricoRecibos.QSelect.ExecQuery;
HistoricoRecibos.Open;

Cuando voy introduciendo la fecha en el Edit1 en este formato: ej."23.06.202" hasta aqui funciona bien y hace bien la consulta, pero cuando introduzco el último "0" de "año 2020" me da el error.

He probado con Cast, Extract y este código es el que mas se aproxima a lo que quiero, sabéis que puede pasar para que me de ese error??
Gracias por anticipado.

Última edición por Casimiro Notevi fecha: 07-06-2020 a las 21:19:06.
Responder Con Cita
  #23  
Antiguo 08-06-2020
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Presta atención al consejo: Sigues sin usar los tipos de datos correctos. Estas mandando como texto un fecha.
__________________
El malabarista.
Responder Con Cita
  #24  
Antiguo 08-06-2020
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Esto no tiene los tipos adecuados: fechas como fechas, enteros como enteros...
Código Delphi [-]
HistoricoRecibos.ParamByName('FechaEmision').AsString := '%' + Edit1.Text + '%';  //NO

HistoricoRecibos.ParamByName('FechaEmision').AsDateTime:= StrToDate(Edit1.Text);  //Solo cuando la fecha esté completa
Responder Con Cita
  #25  
Antiguo 08-06-2020
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Y agregaria: Deja de usar un control de texto para un campo fecha. Usa uno que no requiera uso de StrToDate, como TDateTimePicker
__________________
El malabarista.
Responder Con Cita
  #26  
Antiguo 08-06-2020
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Gracias por vuestros consejos y tenéis razón. Sólo deciros que cuando se hacen las grabaciones (append o edit) los campos están definidos correctamente los Date con DateTimePicker y los numericos con FloatEdit etc. Sólo he usado los CampoDate.AsString para filtrar las consultas con el LIKE según va cambiando el Edit de la busqueda caracter a caracter para intentar conseguir que si en el Edit de busqueda tecleo un 2, que me filtre TODOS aquellos registros que en cualquiera de sus campos contengan un "2", si luego tecleo "3", que aparezcan todos los campos que contengan "23", y así sucesivamente hasta acotar al máximo el resultado deseado.
Responder Con Cita
  #27  
Antiguo 08-06-2020
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Cita:
Empezado por marcial Ver Mensaje
Gracias por vuestros consejos y tenéis razón. Sólo deciros que cuando se hacen las grabaciones (append o edit) los campos están definidos correctamente los Date con DateTimePicker y los numericos con FloatEdit etc. Sólo he usado los CampoDate.AsString para filtrar las consultas con el LIKE según va cambiando el Edit de la busqueda caracter a caracter para intentar conseguir que si en el Edit de busqueda tecleo un 2, que me filtre TODOS aquellos registros que en cualquiera de sus campos contengan un "2", si luego tecleo "3", que aparezcan todos los campos que contengan "23", y así sucesivamente hasta acotar al máximo el resultado deseado.



Hola


Como ya te explicaron los tipo datetime son representados internamente como numeros aunque al visualizarlos tengan el formato de fecha que conocemos.
Haciendo una prueba rapida hice esto:


Código Delphi [-]
edit1.Text:=FloatToStr(Now);


Obteniendo: 43990.6227021528


Si te das cuenta para la fecha 08/06/2020 obtengo este numero con lo cual al querer filtrar mientras este escribiendo la fecha no te va a funcionar; es mas te dara errores por todos lados. Te estas complicando innecesariamente. Las fechas debes filtrarlas cuando ya esten ingresadas completamente.


Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #28  
Antiguo 08-06-2020
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por marcial
Sólo he usado los CampoDate.AsString para filtrar las consultas con el LIKE...
Que es el mismo problema . Si miras la documentacion de LIKE veras que es un operador de TEXTO. No uno de FECHAS. Es como intentar usar UPPER con un numero: No tiene sentido.

Es MUY problematico hacer esos brincos de tipos, porque eso afecta todo: El orden, la exactitud, lo correcto de esas operaciones, la velocidad (si esos campos tienen indices al pasar a texto LOS ANULASTE), etc.

Mira por ejemplo:

"Mentiras que los programadores creen sobre el tiempo":

https://infiniteundo.com/post/253269...eve-about-time

Con solo los primeros flipas:

Cita:
There are always 24 hours in a day.
Months have either 30 or 31 days.
Years have 365 days.
February is always 28 days long.
---
Asi que lo que debes hacer es usar la funcion de fecha correcta, o traducir lo que hace LIKE al pensamiento de fechas. Si lo que quieres es filtrar por ejemplo "dame los registros del mes", entonces debe extraer el año/mes y comparar con año/mes.

Para eso consulta la documentacion de la BD. Hay estan las funciones correctas de fecha.

P.D: Aunque a nivel informativo te han explicado como internamente estan implementados los tipos de fecha, NO USES FECHAS ASI. Es incorrecto convertir fechas a flotantes* y hacer comparaciones. Es igual de erroneo que usar texto.

*Porque hacer comparaciones con flotantes es de los mas flipante/absurdo que hay.
__________________
El malabarista.

Última edición por mamcx fecha: 08-06-2020 a las 22:13:36.
Responder Con Cita
  #29  
Antiguo 08-06-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mamcx Ver Mensaje
P.D: Aunque a nivel informativo te han explicado como internamente estan implementados los tipos de fecha, NO USES FECHAS ASI. Es incorrecto convertir fechas a flotantes* y hacer comparaciones. Es igual de erroneo que usar texto.

*Porque hacer comparaciones con flotantes es de los mas flipante/absurdo que hay.
Totalmente, era solamente para que comprendiera cómo es "por dentro".
Responder Con Cita
  #30  
Antiguo 09-06-2020
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Totalmente, era solamente para que comprendiera cómo es "por dentro".

Si exactamente


Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #31  
Antiguo 09-06-2020
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Cita:
Empezado por marcial Ver Mensaje
Sólo he usado los CampoDate.AsString para filtrar las consultas con el LIKE según va cambiando el Edit de la busqueda caracter a caracter para intentar conseguir que si en el Edit de busqueda tecleo un 2, que me filtre TODOS aquellos registros que en cualquiera de sus campos contengan un "2", si luego tecleo "3", que aparezcan todos los campos que contengan "23", y así sucesivamente hasta acotar al máximo el resultado deseado.



Lo que debes comprender es que aunque uses Asstring para pasar un texto al parametro internamente al procesar la consulta firebird lo hara con el tipo real del campo osea Date, si le pasas "23" no lo podra manejar ya que no es un valor de fecha valido. Debes enviar una fecha completa.


Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
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
Ayuda BD Access? Ayuda al modificar!! DarkArias Conexión con bases de datos 4 24-08-2013 23:47:41
Instalar Ayuda (.HLP) en la Ayuda de Delphi? MasterXP Varios 6 12-04-2006 06:57:49
Ayuda para crear ayuda... Gabriel2 Varios 2 10-06-2005 00:15:18
ayuda con strtofloat, ayuda punto flotante TURING Varios 5 30-04-2004 08:03:59
Ayuda Con Instalacion De Archivos De Ayuda Legolas Varios 1 01-12-2003 14:48:03


La franja horaria es GMT +2. Ahora son las 15:31:12.


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