erro validar data
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.
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
Curtidas 0
Respostas
Marco Salles
09/04/2008
Voce esta usando alguma máscara no Field ???
se sim , qual é a mascára que voce esta usando ???
se sim , qual é a mascára que voce esta usando ???
GOSTEI 0
Ricklorente
09/04/2008
Estou sim !99/99/9999;1;
E como conexão uso ClientDataSet, DataSetProvider, SqlDataSet
E como conexão uso ClientDataSet, DataSetProvider, SqlDataSet
GOSTEI 0
Marco Salles
09/04/2008
então ta resolvido ...
e programe o evento [b:afb2d9a416]OnSetText[/b:afb2d9a416] do Tfield o seguinte código
Código:
espero ter sido util...
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...
GOSTEI 0
Ricklorente
09/04/2008
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.
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
Marco Salles
09/04/2008
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....
GOSTEI 0
Powerlog Tecnologia
09/04/2008
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 ?
E se eu estou em um GRID, alterando a data diretamente no grid, em qual evento eu coloco essa validação ?
GOSTEI 0
Marco Salles
09/04/2008
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 ???
GOSTEI 0
Powerlog Tecnologia
09/04/2008
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 ?
Existe outra forma ?
GOSTEI 0
Marco Salles
09/04/2008
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á ?????
GOSTEI 0
Powerlog Tecnologia
09/04/2008
Veja:
E a função...
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
Fabriciocolombo
09/04/2008
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
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
Powerlog Tecnologia
09/04/2008
Tem algo faltando nesse código ...
Função:
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
Powerlog Tecnologia
09/04/2008
sobe
GOSTEI 0
Frostlost
09/04/2008
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
Powerlog Tecnologia
09/04/2008
Eu digito direto no GRID; não tenho edits nessa tela ...
GOSTEI 0
Marco Salles
09/04/2008
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.
voce pode não ter o fields no clientDataSet , mas voce pode atribuir oo Evento OnSetText em RumTime
Tipo Isto
private procedure MeuEventoSetText(Sender: TField; const Text: String);
SeuDataSet.FieldByName(´SeuCampoData´).OnSetText:=MeuEventoSetText;
Neste MeuEvenoSetText Escreva o codigo ja postado
procedure TForm1.MeuEventoSetText(Sender: TField; const Text: String); 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;
Acho que isto resolve , se é que entendi...
GOSTEI 0
Powerlog Tecnologia
09/04/2008
[b:8706af6009]SHOW DE BOLA ![/b:8706af6009]
Valeu Marco Salles !
Valeu Marco Salles !
GOSTEI 0