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
Curtir tópico
+ 0
Responder
Posts
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:
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:
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
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
Clique aqui para fazer login e interagir na Comunidade :)