Fórum Por que o Exception não é retornado??? #55128
07/02/2006
0
begin select count(NUM) as NN from TAB1 into :RESP; when any do begin exception My_Exception; end end
[b:0bd315089b]DÚVIDA:[/b:0bd315089b]
Ao chamar esta procedure no Delphi, caso ocorra algum erro durante sua execução não deveria retornar a exceção que eu criei com o nome de My_Exception?
Como faço para que o delphi receba a mensagem de erro emitida pela Exception?
desde já agradeço.
Rtava
Curtir tópico
+ 0Posts
08/02/2006
Rtava
begin select count(email_spool.id_spool) as NN from email_spool into :AX; suspend; when any do begin exception axaxax; end end
Executando esta stored procedure no IB Expert funciona corretamente e a mensagem da exceção que criei com nome ´axaxax´ é retornada na tela em forma de caixa de diálogo. Porém, chamando a stored procedure a partir do Delphi não é emitido nenhuma mensagem de nenhum tipo. Esta stored procedure tem o nome dew ´AAAAA´. A forma como estou fazendo sua chamada no Delphi é: Select ax from AAAAA
[b:e2c2359231]Será que pode ser problema do driver ODBC que estou usando? Ou será que é problema de sintaxe mesmo?[/b:e2c2359231]
Gostei + 0
08/02/2006
Rtava
begin RESP = -999; select count(NUM) as NN from TAB1 into :RESP; when any do begin exception My_Exception; end end
A chamada da Stored Procedure tem que ser assim:
with qrAtual do begin Close; SQL.Clear; sql.Add(´EXECUTE PROCEDURE NEW_PROCEDURE´); open; end;
O valor retornado pela variável RESP será sempre -999 caso a procedure seja executada com sucesso. Caso contrário, se ocorrer erro, será retornado uma exceção com o texto que defini na Exception de nome ´My_Exception´.
Para ler o valor da variável RESP da procedure:
showmessage(qrAtual.fieldbyname(´RESP´).AsString);
Gostei + 0
08/02/2006
Rtava
Gostei + 0
08/02/2006
Rtava
Usando ADO, basta inserir um objeto TADOStoredProc, atribuir o objeto de conexão à propriedade ´Connection´ do mesmo, em seguida escolhe a Stored Procedure desejada, indicando-a na propriedade ´ProcedureName´ (a Stored Procedure já tem que estar criada no BD, claro), e pronto.
Para chamar a Stored Procedure a partir do Delphi basta fazer:
ADOStoredProc.ExecProc;
Para ler o valor da resposta da Stored Procedure, seja resposta de erro ou resposta de processamento OK, basta fazer:
ShowMessage(IntToStr(ADOStoredProc.Parameters.FindParam(´err_code´).Value));
Onde: ´err_code´ é o nome de minha variável de saída na Stored Procedure, que criei com nome ´TEST´, tal como segue:
SET TERM ^ ; CREATE PROCEDURE TEST RETURNS ( ERR_CODE INTEGER) AS begin err_code = 0; insert into TAB1 (TAB1.id, TAB1.DATA, TAB1.val) values (111,´2000/05/05 10:10:12´, ´MAMAMA´); when any do err_code = sqlcode; end ^ SET TERM ; ^ GRANT INSERT ON LOGS TO PROCEDURE TEST; GRANT EXECUTE ON PROCEDURE TEST TO SYSDBA;
Se a procedure for executada com sucesso, a variável ´err_code´ retornará ZERO. Caso contrário, retornará o valor do erro.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)