Try,except

25/01/2006

0

      try
        Rotinas.EnviarEmail(email,´´,EAssunto.Text,´´,´´,´´,´´,´´,ximagem);

        CdsClientes.Edit;
        CdsClientesdatenvio.Value := date;
        CdsClientes.Post;
        CdsClientes.ApplyUpdates(0);
      except
        Mensagem(´ERRO´,´Erro no envio de email !´);
      end;


Rotinas.EnviarEmail, é um rotina para enviar email, onde eu passo varios parametros, so que tenho que gravar na tabela de clientes, para quais foram enviados email, se falhar o envio nao posso gravar a data, nesse caso esse bloco try except, protege a gravação da data caso falhe o envio do email?

Abs


Felipeiw

Felipeiw

Responder

Posts

25/01/2006

Edilcimar

quando houver erro no envio ele já pula para o except


Responder

25/01/2006

Macario

Olá eu faria da seginte maneira:

Transformaria esta [b:c5f7644e75]Procedure[/b:c5f7644e75] em [b:c5f7644e75]Function[/b:c5f7644e75] de result Boolean, pois assim voce poderia encapsular o tratamento de erro dentro da função e caso o Result for verdadeiro você faria abaixo:


if Rotinas.EnviarEmail(email,´´,EAssunto.Text,´´,´´,´´,´´,´´,ximagem) then
begin
CdsClientes.Edit;
CdsClientesdatenvio.Value := date;
CdsClientes.Post;
CdsClientes.ApplyUpdates(0);
end;

P.s: A mensagem para falha no envio deve ficar dentro da função.

:arrow:


Responder

25/01/2006

Michael

Atente para o fato de que, independentemente do erro que ocorra dentro entre o [b:3504da6711]try[/b:3504da6711] e o [b:3504da6711]except[/b:3504da6711], a mensagem que será exibida ao usuário será sempre [color=red:3504da6711]´Erro no envio de email´[/color:3504da6711], o que não é bom, pois vc pode achar q problema está sempre na rotina [b:3504da6711]EnviarEmail[/b:3504da6711].

Sugiro que, dentro da rotina enviar email, vc faça um [b:3504da6711]try..except[/b:3504da6711], e, no caso de erro, levante uma exceção do tipo [b:3504da6711]EErroEnviarEmail[/b:3504da6711]. Então no [b:3504da6711]try..except[/b:3504da6711] ´externo´, vc trata a mensagem correta. Veja:

type
  EErroEnviarEmail = class(Exception);

...

procedure EnviarEmail(...);
begin
  ...
  try
    // Envie o email aqui dentro
  except
    raise EErroEnviarEmail.Create(´Erro ao enviar o email´);
  end;
end;

...

try
  EnviarEmail(...)
  ...
except
  on E: EErroEnviarEmail do
    ShowMessage(E.Message)
  else
    // Tratamento para outros tipos de erro
end;


Atenção para outra coisa: [b:3504da6711]ApplyUpdates [/b:3504da6711]não gera exceção, mas dispara o evento [b:3504da6711]OnReconcileError [/b:3504da6711]do componente [b:3504da6711]TClientDataSet[/b:3504da6711]. Um erro nessa linha então não vai entrar no [b:3504da6711]except[/b:3504da6711].

[]´s


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