Fórum Stored Procedures #356861

09/04/2008

0

or favor, alguém sabe me dizer como faço para recuperar uma parâmetro de saída retornado por um Procedimento Armazenado em um banco de dados Firebird?

Aqui está minha procedure:

CREATE OR ALTER PROCEDURE SP_NOME (
cod_cliente integer)
returns (
nome_cliente varchar(50))
as
begin
select nome_cliente from clientes where cod_cliente = :cod_cliente into :nome_cliente;
suspend;
end^

Como podem ver, essa procedure retorna o nome do cliente em função do código.

Sei que podeira fazer isso de forma mais simples pelo Delphi mesmo, mas estou somente tentando entender como recuperar o valor.

Alguém pode me ajudar?


Jonathan Bispo

Jonathan Bispo

Responder

Posts

09/04/2008

Martins

[quote:8365785243=´jonathan bispo´]or favor, alguém sabe me dizer como faço para recuperar uma parâmetro de saída retornado por um Procedimento Armazenado em um banco de dados Firebird?

Aqui está minha procedure:

CREATE OR ALTER PROCEDURE SP_NOME (
cod_cliente integer)
returns (
nome_cliente varchar(50))
as
begin
select nome_cliente from clientes where cod_cliente = :cod_cliente into :nome_cliente;
suspend;
end^

Como podem ver, essa procedure retorna o nome do cliente em função do código.

Sei que podeira fazer isso de forma mais simples pelo Delphi mesmo, mas estou somente tentando entender como recuperar o valor.

Alguém pode me ajudar?[/quote:8365785243]

Já tentou assim?

 Editx.Text := IBStoredProc1.ParamByName(´nome_cliente´).AsString;
//ou
 Editx.Text :=  SQLStoredProc1.ParamByName(´nome_cliente´).AsString;



Responder

Gostei + 0

09/04/2008

Rjun

No SQL Server você precisa indicar que seu parâmetro vai retornar um valor. No Firebird isso não é necessário?


Responder

Gostei + 0

09/04/2008

Jonathan Bispo

Respondendo ao do RJun...
Creio que o parâmetro de saída é informado no trecho

...returns (nome_cliente varchar(50)) ...

Prova disso, é que dentro do ibExpert a procedure executa normalmente.

Respondendo ao Martins...
Assim não daria certo porque o componente MDOStoredProcedure não reconhece o parâmetro de saída dentro de sua lista de parâmetros.
O valor retornado pela Procedure é retornado como um objeto de TField dentro do DataSet.

Eu tentei fazer dessa forma:
edit1.text := mdostoredprocedure.fields[0].asstring;


Mesmo assim não consegui fazer funcionar.
É como se não houvesse valor a ser retornado.

Galera, valeu a força mas a dúvida continua.

Se tiverem outra sugestão, por favor postem aqui.

Valeu...


Responder

Gostei + 0

09/04/2008

Luiz Henrique

Boa Noite, jonathan bispo

Apesar de usar muito pouco store proc nos meus projetos e tambem
nao sei como este componente(MDO so ou falar) que vc esta usando trabalha, mas é + ou - como o RJun comentou, no componente StoreProcedure que esta usando, vc cria um parametro ´OutPut´ com este nome ai que mencionou, ao executar a store proc por ele, o retorno sera no parametro OutPut de memo nome. Por exemplo: no DBExpress seria o TSQLStoreProc, criaria-se este parametro neste objeto.

Espero que tenha ajudado

Abraço , T+


Responder

Gostei + 0

10/04/2008

Emerson Nascimento

ou simplesmente execute um select na SP.

select * from SP_NOME (cod_cliente)

coloque esta instrução no componente e abra-o como se fosse uma select numa tabela qualquer. no FB as SPs com resultado (SPs selecionáveis) são entendidas como uma tabela.

por exemplo (não conheço os componentes mdo):
mdodataset.close;
mdodataset.commandtext := ´select * from SP_NOME (:cliente)´;
mdodataset.parambyname(´cliente´).asinteger := cod_cliente;
mdodataset.open;

edit1.text := mdodataset.fields[0].asstring;


Responder

Gostei + 0

10/04/2008

Jonathan Bispo

Valeu pela ajuda galera...

Consegui utilizar minha Stored Procedure.

Quando a SP retorna algum valor, realmente tenho que executá-la através de um componente Query, como o Emerson falou.

Quanto a SP não retorna valor, simplesmente passo os parâmetros necessários e a executo, através de um componentes StoredProcedure.

Apesar de não ser da forma que eu pensava funcionou bem.

Mais uma vez, obrigado pela ajuda.

Abraços.


Responder

Gostei + 0

10/04/2008

Wianei

Se Vc estiver usando dbExpress poderi ter utilizado uma Cliente Dataset que funcionario da mesma forma sem usar o componete stured procedure. Tabem poderia esperimentar a inclusão da expressão into:[Campo de retorno] , la no delphi vc especifica o tipo do parametro(integer, string...) diz que ele é parametro de entrada e atribui um valor qualquer com 1 por exemplo e chama como se fosse uma tabela normal


Responder

Gostei + 0

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

Aceitar