problemas para fazer testes em DBdateEdit
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?
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
Curtidas 0
Respostas
Gxf
10/12/2021
assim nao funcionaria?
if(seuedit.text < now) then
begin
showmessage('Data inválida!');
qrydadosDATA:= now;
exit;
end;
if(seuedit.text < now) then
begin
showmessage('Data inválida!');
qrydadosDATA:= now;
exit;
end;
GOSTEI 0
Emerson Nascimento
10/12/2021
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):
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;
GOSTEI 0
Beatriz
10/12/2021
assim nao funcionaria?
if(seuedit.text < now) then
begin
showmessage('Data inválida!');
qrydadosDATA:= now;
exit;
end;
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.
GOSTEI 0
Beatriz
10/12/2021
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):
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?
GOSTEI 0
Beatriz
10/12/2021
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;
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;
GOSTEI 0
Emerson Nascimento
10/12/2021
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;
GOSTEI 0