Nós utilizamos muito em pesquisas e relatórios a validação de data inicial e final e/ou data e hora inicial e final. Pois bem, para não ficar reescerevendo várias vezes a mesma coisa, pode ser utilizada duas rotinas para estas validações (segue abaixo as rotinas).


Adicione no Uses DateUtils.

Declaração das rotinas:

procedure ValidaPeriodo(DataIni, DataFim : TDateTime; CampoFoco: TWinControl); overload;
procedure ValidaPeriodo(DataIni, DataFim, HoraIni, HoraFim : TDateTime;
  CampoFoco: TWinControl); overload;



Implementação das rotinas:

procedure ValidaPeriodo(DataIni, DataFim : TDateTime; CampoFoco: TWinControl);
begin
  if  DateOf(DataIni) > DateOf(DataFim) then
    begin
      if  CampoFoco <> nil then
          CampoFoco.SetFocus
      {endif};
      Raise Exception.Create( 'A data inicial não pode ser maior do que a data final.' + #13 +
        'Por favor, corrija.' )
    end
  {endif};
end;

procedure ValidaPeriodo(DataIni, DataFim, HoraIni, HoraFim : TDateTime;
  CampoFoco: TWinControl);
begin
  ValidaPeriodo( DataIni, DataFim, CampoFoco );

  if  ( DateOf(DataIni) = DateOf(DataFim) )
  and ( TimeOf(HoraIni) > TimeOf(HoraFim) ) then
    begin
      if  CampoFoco <> nil then
          CampoFoco.SetFocus
      {endif};
      Raise Exception.Create( 'A hora inicial não pode ser maior do que a hora final.' + #13 +
        'Por favor, corrija.' );
    end
  {endif};
end;



Espero ter colaborado.