Stored Procedures
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?
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
Curtidas 0
Respostas
Martins
09/04/2008
[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?
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;
GOSTEI 0
Rjun
09/04/2008
No SQL Server você precisa indicar que seu parâmetro vai retornar um valor. No Firebird isso não é necessário?
GOSTEI 0
Jonathan Bispo
09/04/2008
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:
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...
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...
GOSTEI 0
Luiz Henrique
09/04/2008
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+
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+
GOSTEI 0
Emerson Nascimento
09/04/2008
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;
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;
GOSTEI 0
Jonathan Bispo
09/04/2008
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.
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.
GOSTEI 0
Wianei
09/04/2008
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
GOSTEI 0