Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-07-2006
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
Cool Optimizar comparación de fechas

El título puede no ser del todo exacto, pero no se me ocurría otro mejor. Gracias de antemano a todos.
Es una cuestión algo tonta: me he planteado si lo estaré haciendo de un modo óptimo o por lo menos mínimo.

El problema:
Tengo que comparar 4 fechas más o menos lo que quiero saber es:
Cita:
fecha_creacion<=fecha_aprobacion<=fecha_emision_f_ant<=fecha_emision_f
Si esta comparación no se cumple no puedo dejar grabar los cambios.

Problema, los datos se obtienen de una consulta, están en DBEdits y algunos pueden llegar en blanco, y ese es el problema. Tengo un pequeño monstruo de if-else anidados para asegurarme de que no comparo cuando llegan en blanco y sí cuando tienen datos... que no me acaba de convencer.
Código Delphi [-]
function fechasValidas: Boolean;
begin
// fecha_creacion siempre tiene algún valor.
  if (fecha_aprobacion.Text<>'') then
  begin
  // fecha_aprobacion tiene algún valor
    result := StrToDate(fecha_creacion.Text)<=StrToDate(fecha_aprobacion.Text);
    if (result=FALSE) then
      exit;
    if (fecha_emision_f_ant.Text<>'') then
    begin
    // fecha_emision_f_ant tiene algún valor
      result := (StrToDate(fecha_aprobacion.Text)<=StrToDate(fecha_emision_f_ant.Text));
      if (result=FALSE) then
        exit;
      if (fecha_emision_f.Text<>'') then
        result := (StrToDate(fecha_emision_f_ant.Text)<=StrToDate(fecha_emision_f.Text));
    end
    else
    begin
    // fecha_emision_f_ant no tiene datos
      result := StrToDate(fecha_creacion.Text)<=StrToDate(fecha_aprobacion.Text);
      if (result=FALSE) then
        exit;
      if (fecha_emision_f.Text<>'') then
        result := (StrToDate(fecha_aprobacion.Text)<=StrToDate(fecha_emision_f.Text));
    end;
  end
  else
  // fecha_aprobacion no tiene datos, por lo que el resto tampoco pueden tenerlos.
    result := TRUE;
end;

Peculiaridades:
fecha_creacion: nunca llega en blanco.
fecha_aprobacion: si no existe las otras dos (fecha_emision_f_ant y fecha_emision_f) tampoco.


PD: Me ha costado escribir todo esto... creo que me voy a tomar una galleta para recuperarme .
Responder Con Cita
 



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
Optimizar con Case XXX of TIKIMORE Varios 9 10-07-2010 17:21:20
comparación de fechas Nelly Varios 2 27-10-2005 17:30:42
Comparación de Fechas sierraja Varios 5 19-06-2005 06:56:20
Optimizar Vistas repo Firebird e Interbase 1 02-03-2005 18:13:43
Optimizar Paradox en red Sick boy Conexión con bases de datos 0 26-02-2005 13:31:48


La franja horaria es GMT +2. Ahora son las 17:25:36.


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