Erro em campo data ao limpar campo e passar para o próximo campo
Bom dia,
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
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
Curtidas 0
Respostas
Emerson Nascimento
08/10/2010
veja se é possível fazer o tratamento no OnExit. algo como:
if (Trim(EditDataFim.Text) = '') or (EditDataFim.Text = ' / / ') then
dmDados.dstESTRU.FieldByName('DATAFIM').clear;
if (Trim(EditDataFim.Text) = '') or (EditDataFim.Text = ' / / ') then
dmDados.dstESTRU.FieldByName('DATAFIM').clear;
GOSTEI 0
Uelson Cavalcante
08/10/2010
Não deu certo !
Ocorre o erro antes mesmo do evento OnExit.
Obrigado.
Ocorre o erro antes mesmo do evento OnExit.
Obrigado.
GOSTEI 0
Eriley Barbosa
08/10/2010
Já tive este problema e só consegui resolver trocando por um dbDatetimepicker que baixei da internet, mas este componente esta presente na rxlib e na jedivcl.
GOSTEI 0
Carlos Phelippe
08/10/2010
Use a sua máscara assim:
!00/00/00;1;_
!00/00/00;1;_
GOSTEI 0
Uelson Cavalcante
08/10/2010
Use a sua máscara assim:
!00/00/00;1;_
!00/00/00;1;_
Não deu certo, funciona somente com Backspace !
GOSTEI 0
Carlos Phelippe
08/10/2010
troquei as bolas...
!99/99/99;1;_
O zero é obrigatório o nove é facultativo.
!99/99/99;1;_
O zero é obrigatório o nove é facultativo.
GOSTEI 0
Eduardo Marcolongo
08/10/2010
No evento onSetText deste campo:
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
Uelson Cavalcante
08/10/2010
Também não deu certo !
Obrigado,
Uelson
Obrigado,
Uelson
GOSTEI 0
William Galleti
08/10/2010
Boa tarde..
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.
E no onChange..
Espero ter ajudado.
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
Carlos Phelippe
08/10/2010
O que poderia ser usado no lugar do TMaskEdit?
GOSTEI 0
Wilson Junior
08/10/2010
Utilize o TDateTimePicker (da palheta Win32).
Espero ter colaborado
Espero ter colaborado
GOSTEI 0
Uelson Cavalcante
08/10/2010
Só quero lembrar aos colegas que o objeto "edit" em questão é um Data Control.
Obrigado,
Uelson
Obrigado,
Uelson
GOSTEI 0
Uelson Cavalcante
08/10/2010
Ok, resolvido.
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
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