Tratamento de Exception

06/09/2004

Tenho uma função que valida datas. Funciona perfeitamente. Porém eu
digito a data em um DBedit e quando saiu, ao invés de a função
entrar em ação aparece um erro mostrando que a data não é válida.
Realmente quero testar se a data é valida ou não, mas quando não for
válida quero que apareça a mensagem que programei.

Coloquei o código no evento onExit do DbEdit.
Já coloquei esse código direto no evento onExit:

Try
StrToDate(DBEditData.Text);
except
ShowMessage(´A data digitada não é uma data válida !!! Digite novamente´);

DBEditData.SetFocus;
end;

Se puder ajudar...

Valeu a força!!!

JR.


Jrjoliv2003

Respostas

06/09/2004

Nerdex

Caro 2003...

Após o except vc terá que identificar e informar o tipo erro e passar este parâmetro para que a msg possa ser exibida. Outra coisa... o teste deste bloco protejido deve ser feito não no compilador Delphi, pois este sempre retornará o erro em run time. Para testar, vc deve rodar o .exe criado, direto do WinExplorer...

try
//código
except
on [i:ae557a5cfd]coloque aqui o erro diagnisticado[/i:ae557a5cfd] do
//coloque aqui sua mensagem de erro


Responder Citar

07/09/2004

Jrjoliv2003

Desculpe! Sou novato em programação. Esse item faz parte do meu Projeto Final.

Não entendi o que colocar em ´erro diagnosticado´. Como que pego eu identifico esse erro? Pela mensagem?

try
//código
except
on coloque aqui o erro diagnisticado do
//coloque aqui sua mensagem de erro

Obrigado por estar ajudando.

JR.


Responder Citar

08/09/2004

Fórum Vini

Após o except vc terá que identificar e informar o tipo erro e passar este parâmetro para que a msg possa ser exibida.

Isto não é realmente necessário, mas somente para ter certeza:
try
  ...
except
  on EConvertError do
  begin
    ShowMessage(´A data digitada não é uma data válida !!! Digite novamente´);
    DBEditData.SetFocus;
  end;
end;


Não entendi o que colocar em ´erro diagnosticado´. Como que pego eu identifico esse erro? Pela mensagem?

O que ele quis dizer foi, a grosso modo, para você dizer assim para o compilador: ´Só mostra a mensagem se o erro causado foi mesmo pela data estar errada´, ou seja, se foi um erro EDivByZero(um exemplo, ele nunca ocorreria nesse caso), o seu programa não mostraria uma mensagem de erro, ele só mostraria quando o erro realmente foi causado por uma data inválida. O código que eu postei ali em cima faz exatamente isso. Para identificar as exceções você usa a classe delas(mas você pode usar a mensagem também, embora seja menos recomendável)

Outra coisa... o teste deste bloco protejido deve ser feito não no compilador Delphi, pois este sempre retornará o erro em run time.

Não necessariamente, você pode ir em [b:d7bb3d8b36]Tools > Debugger Options > Language Exceptions[/b:d7bb3d8b36] e desmarcar a opção [b:d7bb3d8b36]Stop on Delphi Exceptions[/b:d7bb3d8b36] :wink:

Espero ter ajudado,
Vinicius;


Responder Citar

09/09/2004

Jrjoliv2003

Fiz tudo que vc informou e nada. O código é esse:

try
strtodate(dbedit1.Text);
except
on EConvertError do
begin
ShowMessage(´A data digitada não é uma data válida !!! Digite novamente´);
DBEdit1.SetFocus;
end;
end;

A mesnagem que aparece é do sistema ´is not valid datetime´. Uma mensagem que tem o ícone vermelho.

Se puder ajudar!!

JR.


Responder Citar

09/09/2004

Xanatos

Bom esse problema acontece pq antes de entrar no Evento exit ele atribui os valores ao campo da tabela que é tipo Date. Se vc nao for mudar para tipo string entao ao inves de usar um TDBEdit vc pode usar um TEdit que seu código ira funcionar na boa!!!!


flw


Responder Citar

09/09/2004

Jrjoliv2003

Beleza!!

Eu geralmente uso componentes RX. Porém o campo é para Data de Nascimento. Fica muito chato o usuário ficar clicando até chegar o ano.

Eu vou mudar para string.

Mas obrigado por ter ajudado.


JR.


Responder Citar

11/09/2004

Jrjoliv2003

Resolvido!!!

Com a ajuda de um colega, mais uma vez, foi resolvido esse item:

No evento OnSetText do campo da tabela digitei:

var
Data:TDateTime;
begin
try
Data:=StrToDate(Text);
SuaTabelaCampoTada.AsDateTime:=Data;
Except
on Econverterror do
begin
MessageDlg(Text+´ Não é uma data válida!´,MtInformation,[Mbok],0);
Abort;
end;
end;

Valeu!!

JR


Responder Citar