Ver Mensaje Individual
  #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
Reputación: 20
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