Problemas com campo Data não obrigatório no TClientDataSet
Olá Pessoal,
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
Erro ao tentar sair do campo
Obrigado.
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
Erro ao tentar sair do campo
Obrigado.
Pezzin
Curtidas 0
Respostas
Marco Salles
25/08/2006
acredito que manipulando o evento OnsetTest Do Camp voce ira Resolver
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]
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
Marco Salles
25/08/2006
acredito que manipulando o evento OnsetTest Do Camp voce ira Resolver
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]
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
Pezzin
25/08/2006
Na mosca...
Ela completa ainda o ano de 2 para 4 dígitos.
Obrigado novamente.
Ela completa ainda o ano de 2 para 4 dígitos.
Obrigado novamente.
GOSTEI 0
Marco Salles
25/08/2006
so uma correção , pq houve uam pequena falha
pq sua mascara inicial é : ´ / / ´
ficando assim:
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
Pezzin
25/08/2006
[quote:83aef9169e=´Marco Salles´]so uma correção , pq houve uam pequena falha
pq sua mascara inicial é : ´ / / ´
ficando assim:
[/quote:83aef9169e]
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 ?
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
Marco Salles
25/08/2006
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.
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
Pezzin
25/08/2006
Valeu.
Funcionou blz.
Funcionou blz.
GOSTEI 0