Fórum Erro em campo data ao limpar campo e passar para o próximo campo #388164

08/10/2010

0

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


Uelson Cavalcante

Uelson Cavalcante

Responder

Posts

08/10/2010

Emerson Nascimento

veja se é possível fazer o tratamento no OnExit. algo como:

if (Trim(EditDataFim.Text) = '') or (EditDataFim.Text = '  /  /  ') then
  dmDados.dstESTRU.FieldByName('DATAFIM').clear;
Responder

Gostei + 0

08/10/2010

Uelson Cavalcante

Não deu certo !

Ocorre o erro antes mesmo do evento OnExit.

Obrigado.
Responder

Gostei + 0

08/10/2010

Eriley Barbosa

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.
Responder

Gostei + 0

08/10/2010

Carlos Phelippe

Use a sua máscara assim:

!00/00/00;1;_
Responder

Gostei + 0

13/10/2010

Uelson Cavalcante

Use a sua máscara assim:

!00/00/00;1;_



Não deu certo, funciona somente com Backspace !
Responder

Gostei + 0

13/10/2010

Carlos Phelippe

troquei as bolas...

!99/99/99;1;_

O zero é obrigatório o nove é facultativo.
Responder

Gostei + 0

13/10/2010

Eduardo Marcolongo

  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;

Responder

Gostei + 0

18/10/2010

Uelson Cavalcante

Também não deu certo !
Obrigado,
Uelson
Responder

Gostei + 0

18/10/2010

William Galleti

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.
  if MaskEdit1.Text = '  /  /  ' then    MaskEdit1.EditMask := '';

E no onChange..
  MaskEdit1.EditMask := ' !99/99/99;1;_';

Espero ter ajudado.
Responder

Gostei + 0

18/10/2010

Carlos Phelippe

O que poderia ser usado no lugar do TMaskEdit?
Responder

Gostei + 0

19/10/2010

Wilson Junior

Utilize o TDateTimePicker (da palheta Win32).

Espero ter colaborado
Responder

Gostei + 0

19/10/2010

Uelson Cavalcante

Só quero lembrar aos colegas que o objeto "edit" em questão é um Data Control.
Obrigado,
Uelson
Responder

Gostei + 0

19/10/2010

Uelson Cavalcante

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


Responder

Gostei + 0

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

Aceitar