SP com Returning_Values

Firebird

06/10/2004

Amigos,

Nao estou sabendo usar/criar/executar procedures corretamente no IB/FB.
Não estou sabendo pra que server um Suspend por exemplo ou como usar o Returning_Values...

Por exemplo: Eu criei a SP abaixo e quero que ela inclua uma nova Conta na tabela CPagarReceber e apos isso me retorne o IDGerado para esta CPagar...

Eu criei mas nao sei se está certa nem sei como usar para ela me exibir o resultado desejado...


CREATE PROCEDURE CPAGARRECEBERINS (
    ZDATALANCAMENTO DATE,
    ZNUMDOCUMENTO VARCHAR (20),
    ZIDGRUPOCONTA INTEGER,
    ZIDFORNECEDOR INTEGER,
    ZDATAEMISSAO DATE,
    ZVALORNOMINAL DECIMAL (8, 2),
    ZVALORPAGO DECIMAL (8, 2),
    ZOBSERVACAO VARCHAR (250),
    ZDOCTIPO VARCHAR (20),
    ZVALORICMS DECIMAL (6, 2),
    ZDESCONTO DECIMAL (6, 2),
    ZFRETETIPO VARCHAR (3),
    ZVALORFRETE DECIMAL (6, 2),
    ZIDFORMAPGTO INTEGER,
    ZIDFUNCIONARIO INTEGER)
RETURNS (
    ZIDCPAGARRECEBER INTEGER)
AS
BEGIN

  ZIDCPAGARRECEBER = GEN_ID(GEN_CPAGARRECEBER,1);
  INSERT INTO CPAGARRECEBER
  (IDCPAGARRECEBER, DATALANCAMENTO, NUMDOCUMENTO, IDGRUPOCONTA, IDFORNECEDOR,
   DATAEMISSAO, VALORNOMINAL, VALORPAGO, OBSERVACAO, DOCTIPO,
   VALORICMS, DESCONTO, FRETETIPO, VALORFRETE, IDFORMAPGTO, IDFUNCIONARIO)
   VALUES
  (:zIDCPAGARRECEBER, :zDATALANCAMENTO, :zNUMDOCUMENTO, :zIDGRUPOCONTA, :zIDFORNECEDOR,
   :zDATAEMISSAO, :zVALORNOMINAL, :zVALORPAGO, :zOBSERVACAO, :zDOCTIPO,
   :zVALORICMS, :zDESCONTO, :zFRETETIPO, :zVALORFRETE, :zIDFORMAPGTO, :zIDFUNCIONARIO);

END



Rafaelunp

Rafaelunp

Curtidas 0

Respostas

Afarias

Afarias

06/10/2004

|Não estou sabendo pra que server um Suspend por exemplo

o SUSPEND serve para informar que os parâmetros de saída devem ser enviados como resposta do procedimento (como um ´registro´) -- deve ser usado apenas em Procedimentos ´selecionáveis´ (procedimentos q podem retornar diversas ´linhas´ e são manipulados semelhantemente à tabelas ou views)


|ou como usar o Returning_Values...

returning values serve para recuperar os parâmetros de saída em procedimentos ´executáveis´, ex:

execute procedure proc_teste(:par_1, :par_2)
returning_values :par_3, :par_4


|Eu criei mas nao sei se está certa nem sei como usar para ela me exibir
|o resultado desejado...

me parece correto, para receber de volta o ID gerado na sua execução use::

execute procedure CPAGARRECEBERINS (**parâmetros de entrada**)
returning_values :ID_GERADO


T+


GOSTEI 0
Rafaelunp

Rafaelunp

06/10/2004

execute procedure CPAGARRECEBERINS (**parâmetros de entrada**) returning_values :ID_GERADO


Afarias,

Está dando erro...

justamente onde inicia o [b:0eb743cea2]returning_values[/b:0eb743cea2].
Estou usando FB 1.5....

o que pode estar ocorrendo?


GOSTEI 0
Afarias

Afarias

06/10/2004

qual o erro e o q vc está fazendo??

Essa sintaxe é para ser usada dentro de outros procedimentos e triggers. Dentro de um programa, vc deve executar procedimentos que retornam valores usando um componente tipo TxxStoredProc



T+


GOSTEI 0
Rafaelunp

Rafaelunp

06/10/2004

qual o erro e o q vc está fazendo?? Essa sintaxe é para ser usada dentro de outros procedimentos e triggers. Dentro de um programa, vc deve executar procedimentos que retornam valores usando um componente tipo TxxStoredProc T+


OK resolvido....
Eu costumo usar Querys para executar procedures no SQL e imaginei q no IB tambem funcionaria...
Coloquei uma IBStoredProcecdure e esta resolvido o pro...
Mais uma vez, obrigado....


GOSTEI 0
Rafaelunp

Rafaelunp

06/10/2004

Afarias,

Executou ok aqui, mas o resultado nao foi o esperado.... está me retornando sempre ´0´ no parametro de saida... enquanto que o idgerado é outro...
Estou fazendo assim:

  IBSP_CPAGARRECEBERINS.ParamByName(´ZDATALANCAMENTO´).AsDate := StrToDate(EdtDataLanc.Text);
  IBSP_CPAGARRECEBERINS.ParamByName(´ZDATAEMISSAO´).AsDate := StrToDate(EdtDataEmissao.Text);
  IBSP_CPAGARRECEBERINS.ParamByName(´ZNUMDOCUMENTO´).AsString := EdtNumDoc.Text;
  IBSP_CPAGARRECEBERINS.ParamByName(´ZIDGRUPOCONTA´).AsInteger := StrToInt(EdtIdGrupoConta.Text);
  IBSP_CPAGARRECEBERINS.ParamByName(´ZIDFORNECEDOR´).AsInteger := StrToInt(IBQValesIDFORNECEDOR.AsString);
  IBSP_CPAGARRECEBERINS.ParamByName(´ZVALORNOMINAL´).AsFloat := StrToFloat(EdtValorNominal.Text);
  IBSP_CPAGARRECEBERINS.ParamByName(´ZVALORPAGO´).AsFloat := 0;
  IBSP_CPAGARRECEBERINS.ParamByName(´ZOBSERVACAO´).AsString := MnObservacao.Text;
  IBSP_CPAGARRECEBERINS.ParamByName(´ZDOCTIPO´).AsString := CBTipoDoc.Text;
  IBSP_CPAGARRECEBERINS.ParamByName(´ZVALORICMS´).AsFloat := StrToFloat(EdtValorICMS.Text);
  IBSP_CPAGARRECEBERINS.ParamByName(´ZDESCONTO´).AsFloat := StrToFloat(EdtValorDesc.Text);
  IBSP_CPAGARRECEBERINS.ParamByName(´ZFRETETIPO´).AsString := CBTipoFrete.Text;
  IBSP_CPAGARRECEBERINS.ParamByName(´ZVALORFRETE´).AsFloat := StrToFloat(EdtValorFrete.Text);
  IBSP_CPAGARRECEBERINS.ParamByName(´ZIDFORMAPGTO´).AsString := IBQFormaPgtoIDFORMAPGTO.AsString;
  IBSP_CPAGARRECEBERINS.ParamByName(´ZIDFUNCIONARIO´).AsString := MenuPrin.QueryLoginIDFUNCIONARIO.AsString;

  Try
    IBSP_CPAGARRECEBERINS.ExecProc;
  Except
    MsgErro(´Ocorreu um erro ao tentar gravar a [CONTA A PAGAR].´+13+13);
    Abort;
  End;

  zIDCPagarReceber := IBSP_CPAGARRECEBERINSZIDCPAGARRECEBER.Value;
  ShowMessage(IntToStr(zIDCPagarReceber));
  IBSP_CPAGARRECEBERINS.Close;



GOSTEI 0
Afarias

Afarias

06/10/2004

|zIDCPagarReceber := |IBSP_CPAGARRECEBERINSZIDCPAGARRECEBER.Value;

tente::

zIDCPagarReceber := IBSP_CPAGARRECEBERINS.ParamByName(´ZIDCPAGARRECEBER´).AsInteger;



T+


GOSTEI 0
POSTAR