Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-03-2004
Tomás Tomás is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 140
Poder: 21
Tomás Va por buen camino
DateTimePicker: problema comparando fechas

Hola a todos:

Al comparar dos fechas, una guardada en un registro con otra de un DateTimePicker, siendo la misma fecha no las considera iguales.

Así no funciona cuando las fechas son iguales:

rFechaPrimero := DM.IBDSContaFECHA.AsDateTime; //del registro
rFecha := DTPFecha.Date; //del DTPicker
if rFechaPrimero >= rFecha then
Application.MessageBox('La fecha debe ser mayor...','Aviso',mb_Ok+mb_IconStop);

Añadiendo StrToDate(DateToStr( )) al DTPicker si funciona:

rFechaPrimero := DM.IBDSContaFECHA.AsDateTime;
rFecha := StrToDate(DateToStr(DTPFecha.Date)); //<---¿?
if rFechaPrimero >= rFecha then
Application.MessageBox('La fecha debe ser mayor...','Aviso',mb_Ok+mb_IconStop);

¿Por qué? ¿Estoy haciendo algo mal? ¿Influirá la hora del DTPicker?

Gracias. Tomás.
Responder Con Cita
  #2  
Antiguo 17-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Puede tener que ver con el hecho de que a fin de cuentas un TDateTime es de tipo Double y las comparaciones entre valores double no siempre son lo que se espera debido a la representación interna de dichos valores.

Puedes usar la función CompareDateTime de la unidad DateUtils para tal efecto.

// Saludos
Responder Con Cita
  #3  
Antiguo 17-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cuando comparas dos TDateTime no compara solamente la fecha... sino fecha y hora. Si queres comparar únicamente las fechas, simplemente truncá ambos valores con trunc(fecha).

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 17-03-2004
Tomás Tomás is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 140
Poder: 21
Tomás Va por buen camino
He estado mirando la función "CompareDateTime", y por lo que puedo entender, ya que mi inglés no es muy voyante, compara también hasta los mislisegundos, pero he visto y probado "CompareDate" que funciona perfectamente.

CompareDate(FechaUno,FechaDos) devuelve
-1 si FechaUno es menor
0 si son iguales
1 si FechaDos es mayor

Probaré ahora lo que apunta Jackguate: Trunc(fecha).

Muchisimas gracias a los dos.
Tomás
Responder Con Cita
  #5  
Antiguo 17-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por Tomás
lo que apunta Jackguate
Dado que no es la primera vez que lo veo... solo apuntar que mi nickname es jachguate...

Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 06-09-2004
LoBo2024 LoBo2024 is offline
Miembro
 
Registrado: ago 2004
Posts: 24
Poder: 0
LoBo2024 Va por buen camino
Retomo este hilo ya q no me ha aclarado el tema estoy intentando hacer que si la fecha es superior a una cierta fecha quiero q la aplicacion se cierre, pero no consigo q me cierre la aplicación

procedure TPrincipal.FormCreate(Sender: TObject);
begin
if CompareDate(Trunc(Date),Trunc(StrToDate('05/08/2004'))) = 1 then Close;
end;

Ese es el codigo q yo tengo si alguien me puede decir lo q hago mal, le estaria muy agradecido.

Gracias por adelantado.

Última edición por LoBo2024 fecha: 06-09-2004 a las 12:12:52.
Responder Con Cita
  #7  
Antiguo 06-09-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
No lo pongas en el OnCreate del formulario principal, sino en el DPR del proyecto y, si es necesario ejecuta el Application.Run y, sino, no

Código Delphi [-]
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  if CompareDate(Trunc(Date),Trunc(StrToDate('05/08/2004'))) <> 1 then 
    Application.Run;
end.
Responder Con Cita
  #8  
Antiguo 06-09-2004
LoBo2024 LoBo2024 is offline
Miembro
 
Registrado: ago 2004
Posts: 24
Poder: 0
LoBo2024 Va por buen camino
Muchas gracias al principio me fallaba pero me faltaba añadir los units necesarios el dateutils y el sysutils gracias por tu ayuda
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


La franja horaria es GMT +2. Ahora son las 02:50:29.


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