Fórum Problemas com campo Data não obrigatório no TClientDataSet #328069
25/08/2006
0
Estou tendo um problema com campo data não obrigatório. Quando eu passo pelo DBEdit sem digitar nada, a mascara ´ / / ´ do campo é limpa aumáticamente pelo TClientDataSet.
Mas se o usuário começar a digitar no campo ou precisar limpar esse campo o TClientDataSet não limpa a mascara.
Existe alguma forma para tratar esse problema ?
Definição da mascara no EditMask do campo no TClientDataSet
[img:98a32d6c22]http://www.seek.inf.br/images/erro.jpg[/img:98a32d6c22]
Erro ao tentar sair do campo
[img:98a32d6c22]http://www.seek.inf.br/images/erro1.jpg[/img:98a32d6c22]
Obrigado.
Pezzin
Curtir tópico
+ 0Posts
25/08/2006
Marco Salles
procedure TForm1.cdsdataSetText(Sender: TField; const Text: String);
var
data:TDatetime;
begin
if text = ´ ´+DateSeparator+´ ´+dateseparator+´ ´ Then
sender.Clear
else
begin
if TryStrToDate(text,data) then
sender.AsDateTime:=Data
else
end;
end;
[b:4e0ddf5983]P:s -->>> para sua mascara .. pra outra mascara muda o if then[/b:4e0ddf5983]
Gostei + 0
25/08/2006
Marco Salles
procedure TForm1.cdsdataSetText(Sender: TField; const Text: String);
var
data:TDatetime;
begin
if text = ´ ´+DateSeparator+´ ´+dateseparator+´ ´ Then
sender.Clear
else
begin
if TryStrToDate(text,data) then
sender.AsDateTime:=Data
else
Showmessage(´Data Errada´);
end;
end;
[b:80c809ca75]P:s -->>> para sua mascara .. pra outra mascara muda o if then[/b:80c809ca75]
Gostei + 0
25/08/2006
Pezzin
Ela completa ainda o ano de 2 para 4 dígitos.
Obrigado novamente.
Gostei + 0
25/08/2006
Marco Salles
if text = ´ ´+DateSeparator+´ ´+dateseparator+´ ´ Then por if text = ´ ´+DateSeparator+´ ´+dateseparator+´ ´ Then
pq sua mascara inicial é : ´ / / ´
ficando assim:
procedure TForm1.cdsdataSetText(Sender: TField; const Text: String); var data:TDatetIme; begin if text = ´ ´+DateSeparator+´ ´+dateseparator+´ ´ Then sender.Clear else begin if TryStrToDate(text,data) then sender.AsDateTime:=Data else Showmessage(´Data Errada´); end;
Gostei + 0
25/08/2006
Pezzin
if text = ´ ´+DateSeparator+´ ´+dateseparator+´ ´ Then por if text = ´ ´+DateSeparator+´ ´+dateseparator+´ ´ Then
pq sua mascara inicial é : ´ / / ´
ficando assim:
procedure TForm1.cdsdataSetText(Sender: TField; const Text: String); var data:TDatetIme; begin if text = ´ ´+DateSeparator+´ ´+dateseparator+´ ´ Then sender.Clear else begin if TryStrToDate(text,data) then sender.AsDateTime:=Data else Showmessage(´Data Errada´); end;
Mais um detalhe que observei e não estou conseguindo resolver.
Quando vc entrar no campo a primeira vez, digitar uma data inválida 20/20/2000 coloquei para receber o foco no DBEdit mas ele volta sem a máscara ( / / ) e com tamanho 1.
Como posso corrigir isso ?
Gostei + 0
25/08/2006
Marco Salles
situação normal... a mascara aparece quando o componente receber novamente o foco
mas se voce quiser dar mais um ´Tcham´ deve escrever mais codigo
exemplo
var dataErrada:Boolean; TextoErrado:String;
procedure TForm1.cdsdataSetText(Sender: TField; const Text: String); var data:TDatetIme; begin dataerrada:=false; if text = ´ ´+DateSeparator+´ ´+dateseparator+´ ´ Then sender.Clear else begin if TryStrToDate(text,data) then sender.AsDateTime:=Data else begin Showmessage(´Data Errada´); dataErrada:=True; TextoErrado:=text; end; end; end;
procedure TForm1.DBEdit2Exit(Sender: TObject); var i:integer; begin if dataerrada then begin with dbedit2 do begin SetFocus; Text:=Textoerrado; i:=pos(´ ´,Textoerrado); if i > 0 Then i:=i-1 else i:=length(textoerrado); SelStart:=i; end; end;
boa sorte...
Gostei + 0
25/08/2006
Pezzin
Funcionou blz.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)