Fórum SP com Returning_Values #47282

06/10/2004

0

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

Responder

Posts

06/10/2004

Afarias

|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+


Responder

Gostei + 0

06/10/2004

Rafaelunp

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?


Responder

Gostei + 0

06/10/2004

Afarias

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+


Responder

Gostei + 0

06/10/2004

Rafaelunp

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....


Responder

Gostei + 0

06/10/2004

Rafaelunp

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;



Responder

Gostei + 0

06/10/2004

Afarias

|zIDCPagarReceber := |IBSP_CPAGARRECEBERINSZIDCPAGARRECEBER.Value;

tente::

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



T+


Responder

Gostei + 0

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

Aceitar