problemas para fazer testes em DBdateEdit

10/12/2021

0

Olá

Eu estou com problemas para fazer testes em DBdateEdit (Lazarus/Delphi);

-> Preciso inibir o usuário de digitar uma data menor a atual. Ele apenas poderia selecionar a data de hoje ou uma data posterior a hoje.

Testei dessa forma porém não dá certo. O código sempre verifca o primeiro if como verdadeiro

obs: O dateEdit está vinculado a uma field da query da dados, que a field Data.

--------------------------------------------------------------
if(qrydadosDATA < now) then
begin

showmessage('Data inválida!');
qrydadosDATA:= now;
exit;
end;


if(qrydadosDATA > now) then
begin
exit;
end;
--------------------------------------------------------------

também tentei dessa outra forma:


if(qrydadosDATA < now) then
begin

showmessage('Data inválida!');
qrydadosDATA:= now;
exit;
end

else
begin
exit;
end;
--------------------------------------------------------------------
como eu poderia fazer testes com esse campo da melhor forma?
Beatriz

Beatriz

Responder

Posts

10/12/2021

Gxf

assim nao funcionaria?


if(seuedit.text < now) then
begin
showmessage('Data inválida!');
qrydadosDATA:= now;
exit;
end;
Responder

11/12/2021

Emerson Nascimento

possivelmente porque o campo só recebe uma data e você está comparando com data/hora.
por exemplo:

11/12/2021 (11 de dezembro, informado no campo) sempre será menor que 11/12/2021 14:00:00 (duas da tarde do mesmo dia 11 de dezembro, obtido a partir da função now).

para funcionar você precisa comparar tipos iguais (data x data):

if (qrydadosDATA < date) then
begin
   showmessage('Data inválida!');
   qrydadosDATA:= date;
end;

// **************************************
// o if abaixo é totalmente desnecessário
// **************************************
//if(qrydadosDATA > now) then
//begin
//   exit;
//end;


Responder

13/12/2021

Beatriz

assim nao funcionaria?


if(seuedit.text < now) then
begin
showmessage('Data inválida!');
qrydadosDATA:= now;
exit;
end;


Dá nada, eu não consigo comparar usando o edt porque ele é em texto. Tipo, não da pra testar se uma string é menor que uma data.

Responder

13/12/2021

Beatriz

possivelmente porque o campo só recebe uma data e você está comparando com data/hora.
por exemplo:

11/12/2021 (11 de dezembro, informado no campo) sempre será menor que 11/12/2021 14:00:00 (duas da tarde do mesmo dia 11 de dezembro, obtido a partir da função now).

para funcionar você precisa comparar tipos iguais (data x data):

if (qrydadosDATA < date) then
begin
   showmessage('Data inválida!');
   qrydadosDATA:= date;
end;

// **************************************
// o if abaixo é totalmente desnecessário
// **************************************
//if(qrydadosDATA > now) then
//begin
//   exit;
//end;




O que viria a ser esse date? Se eu não posso usar o now, como faço para capturar exatamente a data do dia?
Responder

13/12/2021

Beatriz

Fiz assim e está dando certo até então. Precisei mudar o evento, estava no Onchange do dbDateEdit, e agora está no Onclick do botão que grava.
O unico problema era que, se eu selecionasse a data do prórprio dia ele continuava sinalizando como inválida >> Então a solução foi criar uma variavel para teste e acrescentar 1.

procedure TfrmBaixaEfetivacao.BtnGravarClick(Sender: TObject);
var dia: TDate;
begin

dia:= qrydadosDATA.AsDateTime + 1;

if (dia < now) then
begin
ShowMessage('Data inválida!');
Exit;
end;

Responder

13/12/2021

Emerson Nascimento

Beatriz, acredito que isso que você fez pode dar problema.

procedure TfrmBaixaEfetivacao.BtnGravarClick(Sender: TObject);
var dia: TDate;
begin

   dia := qrydadosDATA.AsDate; // somente data.

   if (dia < date) then // *now* retorna data e hora; *date* retorna somente a data
   begin
      ShowMessage('Data inválida!');
      Exit;
   end;


Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar