Validação de data diferente da data de hoje, não esta funcionando

Delphi

SQLite

10/12/2020

Bom dia, estou com uma duvida boba, preciso validar a data , ver se ela é nula ou inferior ao dia de hoje, porem, se eu colocar o dia de hoje ela cai no erro de ser inferior ao dia de hoje, é bobo, mas to quebrando a cabeça

if (Trunc(Pedido.FieldByName(''DATA'').AsDateTime) <> now) then
begin
if (Trunc(Pedido.FieldByName(''DATA'').AsDateTime) = 0 ) or (Trunc(Pedido.FieldByName(''DATA'').AsDateTime) < Now )then
begin
Pedido.FieldByName(''DATA'').FocusControl;
raise Exception.Create(''Data inválida! Data inferior a data atual!'');
end;
end;

Banco SQLite
Ramboli

Ramboli

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

10/12/2020

você está comparando data com data-hora. não vai funcionar. você precisa comparar dados semelhantes.
tente truncar os dois lados da comparação:
if (Trunc(Pedido.FieldByName('DATA').AsDateTime) <> Trunc(now)) then
   if (Trunc(Pedido.FieldByName('DATA').AsDateTime) = 0) or (Trunc(Pedido.FieldByName('DATA').AsDateTime) < Trunc(Now)) then
   begin
      Pedido.FieldByName('DATA').FocusControl;
      raise Exception.Create('Data inválida! Data inferior a data atual!');
   end;

ou ainda usar AsDate:
if (Pedido.FieldByName('DATA').AsDate <> SysUtils.Date) then
   if (Pedido.FieldByName('DATA').AsDate = 0) or (Pedido.FieldByName('DATA').AsDate < SysUtils.Date) then
   begin
      Pedido.FieldByName('DATA').FocusControl;
      raise Exception.Create('Data inválida! Data inferior a data atual!');
   end;

GOSTEI 1

Mais Respostas

Ramboli

Ramboli

10/12/2020

você está comparando data com data-hora. não vai funcionar. você precisa comparar dados semelhantes.
tente truncar os dois lados da comparação:
if (Trunc(Pedido.FieldByName('DATA').AsDateTime) <> Trunc(now)) then
   if (Trunc(Pedido.FieldByName('DATA').AsDateTime) = 0) or (Trunc(Pedido.FieldByName('DATA').AsDateTime) < Trunc(Now)) then
   begin
      Pedido.FieldByName('DATA').FocusControl;
      raise Exception.Create('Data inválida! Data inferior a data atual!');
   end;

ou ainda usar AsDate:
if (Pedido.FieldByName('DATA').AsDate <> SysUtils.Date) then
   if (Pedido.FieldByName('DATA').AsDate = 0) or (Pedido.FieldByName('DATA').AsDate < SysUtils.Date) then
   begin
      Pedido.FieldByName('DATA').FocusControl;
      raise Exception.Create('Data inválida! Data inferior a data atual!');
   end;




Opa, muito obrigado, consegui resolver graças a ti, era um problema bobo que me atormentava, muito obrigado, truncar os dois lados da comparação funcionou, muito obrigado




GOSTEI 0
POSTAR