Fórum Problemas com campo Data não obrigatório no TClientDataSet #328069

25/08/2006

0

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
[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

Pezzin

Responder

Posts

25/08/2006

Marco Salles

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]


Responder

Gostei + 0

25/08/2006

Marco Salles

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]


Responder

Gostei + 0

25/08/2006

Pezzin

Na mosca...

Ela completa ainda o ano de 2 para 4 dígitos.

Obrigado novamente.


Responder

Gostei + 0

25/08/2006

Marco Salles

so uma correção , pq houve uam pequena falha

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; 



Responder

Gostei + 0

25/08/2006

Pezzin

[quote:83aef9169e=´Marco Salles´]so uma correção , pq houve uam pequena falha

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; 
[/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 ?


Responder

Gostei + 0

25/08/2006

Marco Salles

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...


Responder

Gostei + 0

25/08/2006

Pezzin

Valeu.

Funcionou blz.


Responder

Gostei + 0

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

Aceitar