Fórum erro validar data #356877
09/04/2008
0
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
Curtir tópico
+ 0Posts
09/04/2008
Marco Salles
se sim , qual é a mascára que voce esta usando ???
Gostei + 0
09/04/2008
Ricklorente
E como conexão uso ClientDataSet, DataSetProvider, SqlDataSet
Gostei + 0
09/04/2008
Marco Salles
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...
Gostei + 0
09/04/2008
Ricklorente
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.
Gostei + 0
09/04/2008
Marco Salles
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....
Gostei + 0
16/07/2008
Powerlog Tecnologia
E se eu estou em um GRID, alterando a data diretamente no grid, em qual evento eu coloco essa validação ?
Gostei + 0
16/07/2008
Marco Salles
no evento onsettext do Tfield
Voce fez isto ???
Gostei + 0
16/07/2008
Powerlog Tecnologia
Existe outra forma ?
Gostei + 0
16/07/2008
Marco Salles
ta , então é outro caso ..
Veja o tópico inicial :
e no seu caso ... Aonde esta a mascará ?????
Gostei + 0
17/07/2008
Powerlog Tecnologia
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;
Gostei + 0
17/07/2008
Fabriciocolombo
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
Gostei + 0
17/07/2008
Powerlog Tecnologia
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;
Gostei + 0
18/07/2008
Powerlog Tecnologia
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
Gostei + 0
18/07/2008
Powerlog Tecnologia
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)