Array
(
)

Try,except

Felipeiw
   - 25 jan 2006

#C骴igo


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


Edilcimar
   - 25 jan 2006

quando houver erro no envio ele j pula para o except


Macario
   - 25 jan 2006

Ol eu faria da seginte maneira:

Transformaria esta Procedure em Function 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:


Michael
   - 25 jan 2006

Atente para o fato de que, independentemente do erro que ocorra dentro entre o try e o except, a mensagem que ser exibida ao usu醨io ser sempre 碋rro no envio de email, o que n鉶 bom, pois vc pode achar q problema est sempre na rotina EnviarEmail.

Sugiro que, dentro da rotina enviar email, vc fa鏰 um try..except, e, no caso de erro, levante uma exce玢o do tipo EErroEnviarEmail. Ent鉶 no try..except 磂xterno, vc trata a mensagem correta. Veja:

#C骴igo


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: ApplyUpdates n鉶 gera exce玢o, mas dispara o evento OnReconcileError do componente TClientDataSet. Um erro nessa linha ent鉶 n鉶 vai entrar no except.

[]磗