Fórum Erro em campo data ao limpar campo e passar para o próximo campo #388164
08/10/2010
0
ao editar um registro se o usuário quiser apagar uma data ao passar para o próximo campo dava erro.
A máscara do campo é: !99/99/99;1;_
Fiz o seguinte no evento OnKeyPress:
// Se pressionar BACKSPACE, limpa o campo da data para não dar erro
if Key = #8 then
dmDados.dstESTRU.FieldByName('DATAFIM').clear;
Neste caso funcionou perfeitamente. Ao passar para o próximo campo o campo data fica limpo (e sem / /).
Mas se o campo data receber o foco e for pressionada a tecla DEL, ao tentar passar para o próximo campo ocorre o erro:
" / / " is not a valid date and time
Tentei fazer o mesmo tratamento no evento OnKeyDown, mas para a tecla DEL:
// Se pressionar DEL, limpa o campo da data para não dar erro
if Key = VK_DELETE then
dmDados.dstESTRU.FieldByName('DATAFIM').clear;
Mas o erro continua.
Como posso fazer com que a data possa ficar em branco ?
Lembrando que este campo data não é um campo requerido.
Obrigado,
Uelson
Uelson Cavalcante
Curtir tópico
+ 0Posts
08/10/2010
Emerson Nascimento
if (Trim(EditDataFim.Text) = '') or (EditDataFim.Text = ' / / ') then
dmDados.dstESTRU.FieldByName('DATAFIM').clear;
Gostei + 0
08/10/2010
Uelson Cavalcante
Ocorre o erro antes mesmo do evento OnExit.
Obrigado.
Gostei + 0
08/10/2010
Eriley Barbosa
Gostei + 0
08/10/2010
Carlos Phelippe
!00/00/00;1;_
Gostei + 0
13/10/2010
Uelson Cavalcante
!00/00/00;1;_
Não deu certo, funciona somente com Backspace !
Gostei + 0
13/10/2010
Carlos Phelippe
!99/99/99;1;_
O zero é obrigatório o nove é facultativo.
Gostei + 0
13/10/2010
Eduardo Marcolongo
procedure Tdata.cdavec1018ENTREGA1SetText(Sender: TField;
const Text: String);
var
data: TDateTime;
begin
try
if Text= ' / / ' then
sender.Clear
else
begin
data:=strtodate(Text);
sender.AsString:=Text;
end;
except
on e:econverterror do
begin
Showmessage('A Dada Digitada : '+Text+' Não Corresponde a Uma Data Válida');
abort;
end;
end;
Gostei + 0
18/10/2010
Uelson Cavalcante
Obrigado,
Uelson
Gostei + 0
18/10/2010
William Galleti
O legal mesmo seria voce trocar esse componente ai. Usar maskedit para datas é meio ultrapassado, mais vamos lá.
Voce pode colocar uma condição no evento onExit bem simples.
if MaskEdit1.Text = ' / / ' then MaskEdit1.EditMask := '';
E no onChange..
MaskEdit1.EditMask := ' !99/99/99;1;_';
Espero ter ajudado.
Gostei + 0
18/10/2010
Carlos Phelippe
Gostei + 0
19/10/2010
Wilson Junior
Espero ter colaborado
Gostei + 0
19/10/2010
Uelson Cavalcante
Obrigado,
Uelson
Gostei + 0
19/10/2010
Uelson Cavalcante
Realmente, utilizando o código no onSetText, postado pelo nosso colega Eduardo, funciona.
O que estava acontecendo é que como nosso colega Carlos Alberto havia citado para alterar a máscara para !00/00/00;1;_, acabei deixando e por isso não dava certo. Depois que alterei para !99/99/99;1;_ então tudo funcionou perfeitamente.
Obrigado a tdos.
Abraços,
Uelson
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)