REVELAR

Fórum Por que o Exception não é retornado??? #55128

07/02/2006

0

Pessoal, criei uma stored procedure com o seguinte conteúdo:

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

Rtava

Responder

Posts

08/02/2006

Rtava

uma outra forma que estou utilizando a exceção e mesmo assim não consigo capturá-la no Delphi, é a seguinte:

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]


Responder

Gostei + 0

08/02/2006

Rtava

resolvido... supondo uma stored procedure chamada NEW_PROCEDURE:

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);  



Responder

Gostei + 0

08/02/2006

Rtava

só mais uma coisinha: Esse ´qrAtual´ que usei aí, no Delphi, é um componente TADOQuery.


Responder

Gostei + 0

08/02/2006

Rtava

corrigindo a afirmação de que não é possível pegar o número da exception gerado pelo FB:

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar