Fórum Duvida Try Except #427608
30/10/2012
0
Por exemplo numa alterações de informações de um cliente estou fazendo:
procedure Tclientes.Button1.Click;
var
t:ttransactiondesc;
begin
t.isolationlevel:= xilREADCOMMITTED;
try
sqlconnection1.startTransaction(t);
qrclientes.close;
qrclientes.sql.clear;
qrclientes.sql.text:='Update clientes set ENDERECO = :ender, NUM = :num where CODIGO = :cod';
qrclientes.parambyname('cod').asinteger:= 1;
qrclientes.parambyname('ender').asstring:= edit1.text;
qrclientes.parambyname('num').asinteger:= strtoint(edit2.text);
qrclientes.execsql;
sqlconnection1.commit(t);
except
sqlconnection1.rollback(t);
messagebox(handle,'Falha na atualização dos dados','Atenção',mb_ok);
A questão é qualquer errro gerado , seja por falha temporaria de conexão ao banco, ou por exemplo no campo NUM entrar com string(sem estar tratado no edit esse erro) ele bloquear... e dar o rollback e a msg de erro, porém isso não acontece retorna no exemplo de dados incompativeis a msg do proprio Mysql e não a excessão programada
Erick Ernits
Curtir tópico
+ 0Posts
30/10/2012
Claudia Nogueira
Qualquer problema no bloco, irá retornar a mensagem que você colocou na exceção.
Se você estiver testando por dentro do delphi, ou seja, compilando, vai mostrar dois erros, primeiro o erro propriamente dito e depois a mensagem personalizada.
Testou executando diretamente o exe por fora do Delphi?
Gostei + 0
30/10/2012
Erick Ernits
Gostei + 0
30/10/2012
Claudia Nogueira
Só se o problema estiver ocorrendo também quando executa o rollback, aí sim daria esse problema.
Uma solução seria colocar um except separado para o rollback:
try
sqlconnection1.startTransaction(t);
qrclientes.close;
qrclientes.sql.clear;
qrclientes.sql.text:='Update clientes set ENDERECO = :ender, NUM = :num where CODIGO = :cod';
qrclientes.parambyname('cod').asinteger:= 1;
qrclientes.parambyname('ender').asstring:= edit1.text;
qrclientes.parambyname('num').asinteger:= strtoint(edit2.text);
qrclientes.execsql;
sqlconnection1.commit(t);
except
try
sqlconnection1.rollback(t);
except
end;
messagebox(handle,'Falha na atualização dos dados','Atenção',mb_ok);
end;
Gostei + 0
30/10/2012
Alisson Santos
Caso seja o dbexpress, alguns erros são silenciosos que não mostra para você, ainda mais quando utiliza o try, except, o ideal verificar se vai retornar algum erro direto no provider dataset que é o componente que monta a select e passa para o banco de dados executar.
Gostei + 0
30/10/2012
Erick Ernits
Caso seja o dbexpress, alguns erros são silenciosos que não mostra para você, ainda mais quando utiliza o try, except, o ideal verificar se vai retornar algum erro direto no provider dataset que é o componente que monta a select e passa para o banco de dados executar.
Boa tarde Alisson,
Sim estou usando o dbexpress... teria como fazer isso direto pela query mesmo tratando dessa maneira ou algo semelhante ? Sem a necessidade de armazenar no dataset para depois atualizar no banco ?
Obrigado a todos pela atenção!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)