Problemas com campo Data não obrigatório no TClientDataSet

Delphi

25/08/2006

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.


Pezzin

Pezzin

Curtidas 0

Respostas

Marco Salles

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]


GOSTEI 0
Marco Salles

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]


GOSTEI 0
Pezzin

Pezzin

25/08/2006

Na mosca...

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

Obrigado novamente.


GOSTEI 0
Marco Salles

Marco Salles

25/08/2006

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; 



GOSTEI 0
Pezzin

Pezzin

25/08/2006

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


GOSTEI 0
Marco Salles

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

Pezzin

25/08/2006

Valeu.

Funcionou blz.


GOSTEI 0
POSTAR