Fórum erro validar data #356877

09/04/2008

0

Vou tentar explicar..

Estou tentando fazer as validações de um campo dbedit que recebe uma data, qnd passo pelo campo sem digitar nada não acontece nada, normal, porém quando passo pelo campo digito alguma coisa e depois apago o que digitei e saio do campo ele me dá o erro:

raised exception Class EConvertError with message ´ / / ´is not a valid date.

Como faço para tirar esse erro. Gostaria que o usuário se ele digitou a data mas errou e não era pra digitar nada era só bra deixar o campo em branco então que o foco saia sem dar erro.

E pegando o embalo como faço pra passar o erro: is not a valid date´ para o português? Assim se o usuário digitar data: 89/25/2100 o erro será ´Esta não é uma data válida´.

Fico muito agradecido pelas respostas.


Ricklorente

Ricklorente

Responder

Posts

09/04/2008

Marco Salles

Voce esta usando alguma máscara no Field ???

se sim , qual é a mascára que voce esta usando ???


Responder

Gostei + 0

09/04/2008

Ricklorente

Estou sim !99/99/9999;1;

E como conexão uso ClientDataSet, DataSetProvider, SqlDataSet


Responder

Gostei + 0

09/04/2008

Marco Salles

então ta resolvido ...

Coloque a mascara no field do campo !99/99/9999;1;_


e programe o evento [b:afb2d9a416]OnSetText[/b:afb2d9a416] do Tfield o seguinte código
Código:

procedure TForm1.SEUDATASETonSetText(Sender: TField; const Text: String); 
var 
  data:Tdate; 
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 Correposnde a Uma Data Válidadata´); 
     abort; 
   end; 
 end; 


espero ter sido util...


Responder

Gostei + 0

09/04/2008

Ricklorente

Caraca.. Funcionou perfeitamente, cara to quebrando a cabeça o dia inteiro com esse negócio e não sai do lugar.. Tmb iniciante é fogo. Mas garanto que estou me dedicando para aprender.

Agora é o seguinte, eu só não entendi pq vc declarou a variavel ´Data´ e atribuiu (data:=strtodate(Text);) ela, onde vc está usando ela no código?? Eu deixei sem e funcionou, será q tem problema??

Mt obrigado pela ajuda.


Responder

Gostei + 0

09/04/2008

Marco Salles

Caraca.. Funcionou perfeitamente, cara to quebrando a cabeça o dia inteiro com esse negócio e não sai do lugar.. Tmb iniciante é fogo. Mas garanto que estou me dedicando para aprender. Agora é o seguinte, eu só não entendi pq vc declarou a variavel ´Data´ e atribuiu (data:=strtodate(Text) ela, onde vc está usando ela no código?? Eu deixei sem e funcionou, será q tem problema??


somente a título didático ... o efeito é o mesmo que

sender.asstring:=text ...
[b:56a683b025]
se text não for uma data válida gera tb uma exceção que será tratada pelo codigo try except [/b:56a683b025]
Pode ficar tranquilo , não ha problemas....


Responder

Gostei + 0

16/07/2008

Powerlog Tecnologia

Meu caso é o mesmo: tenho máscara no campo data.

E se eu estou em um GRID, alterando a data diretamente no grid, em qual evento eu coloco essa validação ?


Responder

Gostei + 0

16/07/2008

Marco Salles

Meu caso é o mesmo: tenho máscara no campo data. E se eu estou em um GRID, alterando a data diretamente no grid, em qual evento eu coloco essa validação ?


no evento onsettext do Tfield

Voce fez isto ???


Responder

Gostei + 0

16/07/2008

Powerlog Tecnologia

Não tenho os fields no ClientDataSet. Eu carrego-os através de Provider, pois se um dia trocar de tamanho, qtd de campos, etc é uma coisa a menos para me preocupar.

Existe outra forma ?


Responder

Gostei + 0

16/07/2008

Marco Salles

Não tenho os fields no ClientDataSet. Eu carrego-os através de Provider, pois se um dia trocar de tamanho, qtd de campos, etc é uma coisa a menos para me preocupar.


ta , então é outro caso ..

Veja o tópico inicial :

[b:23887f566c]Voce esta usando alguma máscara no Field ??? [/b:23887f566c] se sim , qual é a mascára que voce esta usando ???


[b:23887f566c]Estou sim !99/99/9999;1; [/b:23887f566c] E como conexão uso ClientDataSet, DataSetProvider, SqlDataSet


e no seu caso ... Aonde esta a mascará ?????


Responder

Gostei + 0

17/07/2008

Powerlog Tecnologia

Veja:
  SelectAllM1(12, dmMovimento1.qyGridInvenAge, xFiltroSelect);
  pvInvenAge.DataSet := dmMovimento1.qyGridInvenAge;
  cdsInvenAge.ProviderName := ´pvInvenAge´;
  dsInvenAge.dataset := cdsInvenAge;
  cdsInvenAge.Active := true;
  cdsInvenAge.IndexFieldNames := ´desebl;desepv;ordstr´;
  SetDateMask(cdsInvenAge.fieldbyname(´datage´));


E a função...

procedure SetDateMask(fField: TField);
begin
  fField.EditMask := ´99/99/9999;1; ´;
end;



Responder

Gostei + 0

17/07/2008

Fabriciocolombo

Bom dia,

no seu caso, crie um procedimento fazendo a validação e atribua ao TField em tempo de execucação.

procedure SetDateMask(fField: TField);
begin
fField.EditMask := ´99/99/9999;1; ´;
TField.OnSetText := OnSetTextDate;
end;

procedure TForm1.OnSetTextDate(Sender: TField; const Text: String);
begin
if not(Text= ´ / / ´) then
begin
try
sender.AsString:=Text;
except
on e:econverterror do
begin
raise Exception.Create(´A Dada Digitada : ´+Text+´ Não Correposnde a Uma Data Válidadata´);
end
else
begin
raise; //É importante lembrar de emitir uma exceção mesmo que o erro não seja de data inválida. Senão a exceção será suprimida
end;
end;
end;
end
else
begin
sender.Clear ;
end;
end;

Até mais


Responder

Gostei + 0

17/07/2008

Powerlog Tecnologia

Tem algo faltando nesse código ...

procedure SetDateMask(fField: TField);
begin
  fField.EditMask := ´99/99/9999;1; ´;
  fField.OnSetText := OnSetTextDate   [b]E os parâmetros ???[/b];
end;


Função:

procedure OnSetTextDate(fField: TField; const Text: String);
begin
  if not(Text= ´ / / ´) then
  begin
    try
      fField.AsString:=Text;
    except on e:econverterror do
    begin
      raise Exception.Create(´A data digitada : ´+Text+´ não correposnde a uma data válida´);
    end
    else
    begin
      raise; //É importante lembrar de emitir uma exceção mesmo que o erro não seja de data inválida. Senão a exceção será suprimida
    end;
    end;
    end;
    end
  else
  begin
    fField.Clear ;
  end;
end;



Responder

Gostei + 0

18/07/2008

Powerlog Tecnologia

sobe


Responder

Gostei + 0

18/07/2008

Frostlost


procedure TFrmClientes.DBEdit21Change(Sender: TObject);
begin
  if ((SENDER as TDBEdit).DataSource.DataSet.State in [dsInsert, dsEdit])
    and ((SENDER as TDBEdit).Text = ´  /  /    ´) then
    (SENDER as TDBEdit).Field.Clear;
end;



Claudio Stein Junior


Responder

Gostei + 0

18/07/2008

Powerlog Tecnologia

Eu digito direto no GRID; não tenho edits nessa tela ...


Responder

Gostei + 0

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

Aceitar