Ajuda- aos programadores !!!

21/03/2003

0

Terminei meu programa de controle de veiculos!! e estou com um problema!!! que ninguem consegue resolver!! ele parece facil de resolver mas não eh não!!!

no cadastro de veiculos eu tenho um campo data(data de apolice do veiculo) e esse campo é do tipo date e não é obrigatorio, pois um veiculos pode não estar segurado....

o problema e o seguinte ele teria que deixar passar data em branco!!!
se o usuario passar pelo campo usando TAB ele deixa passar normal, mas se o usuario para no campo digitar algo apagar e tentar sair ele da um erro de data invalida ele tenta converter a mascara!!! quando ele da esse erro ele nem entrar em nenhuma linha do código, pois execute o programa usando o F7 e verifiquei que ele da o erro antes mesmo de executar o onexit do dbedit!!!!

eu ja usei esse codigo mas nada adiantou>>>

procedure TFrmVeiculos.DBEdit9Exit(Sender: TObject);
begin
if not TbVeiculos.FieldByName(´DT_VENC_APOL´).isnull then
begin
try
strtodate(DBEdit9.text); //tentativa 1
except
on EConvertError do
begin
showmessage(´Data Inválida´);
dbedit9.SetFocus;
end;
end;
end;
end;

procedure TFrmVeiculos.DBEdit11Exit(Sender: TObject);
begin
if (dbedit11.text) <>´ / / ´ then
begin
try
strtodate(DBEdit11.text); //tentativa 2
except
on EConvertError do
begin
showmessage(´Data Inválida´);
dbedit11.SetFocus;
end;
end;
end;
end;

ele nem entra no bloco de comando a mensagem de erro que da é em ingles !!!


Anonymous

Anonymous

Responder

Posts

21/03/2003

Leao

meu amigo que tal voce fazer uma coisa, faz um outro campo e veja se ele está preenchido, se sim, então envie o para o dbedit antes de alvar.


Responder

21/03/2003

Adilsond

Voce deve fazer a verificação no evento OnSetText do campo:

procedure TForm1.Table1HireDateSetText(Sender: TField; const Text: String);
begin
try
if Trim(Text) = ´´ then
Sender.Value := null
else
Sender.AsDateTime := StrToDate(Text);
except
raise EDataBaseError.Create(´Data com formato inválido.´);
end;
end;


Responder

21/03/2003

Afb

Amigo passei pelo mesmo erro usando o dbedit para o campo data o que acontece e que existe um evento interno do delphi que quando um campo data e mascarado e formatado conforme a pessoa deseja e o campo e do tipo Tdate ele ocorre nao adianta tratar no exit pois ele acontece antes e tambem nao adianta tratar no onValidade ou no OnSetText ou no OnChange que tudo isso ja tentei minha solucao foi criar uma variavel global e colocar um maskedit pois ai sim eu pude tratar nos eventos ja mencionados


afb1@bol.com.br


Responder

21/03/2003

Leao

Amigo tem uma solução melhor trabalher com SQL ao invez de Table, que voce nunca vai passar por este problema.

Gracas a Deus eu nunca passei por isto.


Responder

21/03/2003

Marcelo Saviski

procedure TFrmVeiculos.DBEdit9Exit(Sender: TObject);
begin
if DBEdit9.text <> ´__/__/__´ then [color=blue:b471935b30]{para ano de quatro digitos use ´__/__/____´}[/color:b471935b30]
begin
try
strtodate(DBEdit9.text);
except
on EConvertError do
begin
showmessage(´Data Inválida´);
dbedit9.SetFocus;
end;
end;
end;
end;


Responder

21/03/2003

Anonymous

Eu tive este mesmo problema agora eu já tenho esta rotina que serve para tudo. Basta trocar os campos e tudo corre bem.

procedure TdmDados.tblAlunosTerminoSetText(Sender: TField;
const Text: String);
var
Data : String;
begin
try
Data := Text;
tblAlunosTermino.AsString := Data;
except
on EConvertError do
begin
if Data[1] = ´ ´ then
begin
tblAlunosTermino.EditMask := ´99/99/9999;0; ´;
tblAlunosTermino.Clear;
end
else
begin
ShowMessage(´Data Invalida´);
Abort;
end;
end;
end;
tblAlunosTermino.EditMask := ´99/99/9999;1; ´;
end;


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar