25/01/2006

Try,except

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

        CdsClientes.Edit;
        CdsClientesdatenvio.Value := date;
        CdsClientes.Post;
        CdsClientes.ApplyUpdates(0);
      except
        Mensagem(碋RRO,碋rro 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

Respostas

25/01/2006

Edilcimar

quando houver erro no envio ele j pula para o except


Responder Citar

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 Citar

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醨io ser sempre [color=red:3504da6711]碋rro no envio de email碵/color:3504da6711], o que n鉶 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鏰 um [b:3504da6711]try..except[/b:3504da6711], e, no caso de erro, levante uma exce玢o do tipo [b:3504da6711]EErroEnviarEmail[/b:3504da6711]. Ent鉶 no [b:3504da6711]try..except[/b:3504da6711] 磂xterno, vc trata a mensagem correta. Veja:

type
  EErroEnviarEmail = class(Exception);

...

procedure EnviarEmail(...);
begin
  ...
  try
    // Envie o email aqui dentro
  except
    raise EErroEnviarEmail.Create(碋rro 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鉶 gera exce玢o, mas dispara o evento [b:3504da6711]OnReconcileError [/b:3504da6711]do componente [b:3504da6711]TClientDataSet[/b:3504da6711]. Um erro nessa linha ent鉶 n鉶 vai entrar no [b:3504da6711]except[/b:3504da6711].

[]磗


Responder Citar