GARANTIR DESCONTO

Fórum Stored Procedure retornando parametro para o Delphi #290316

02/08/2005

0

Pessoal possuo um arquitetura em 3 camadas, com dbexpress e DCOM.

Fiz uma stored procedure em PL/SQL(Oracle) que me retorna um parametro do tipo String;

O problema é que não consigo acessar esse parametro no Delphi.

estou fazendo da sequinte forma:

try
dmCAQ.cdsCAQCopiaFT.FetchParams;
{ Os parametros abaixo são IN }
dmCAQ.cdsCAQCopiaFT.Params[0].Value := edtDescFT.Text;
dmCAQ.cdsCAQCopiaFT.Params[1].Value := edtCodEmpOrig.Text;
dmCAQ.cdsCAQCopiaFT.Params[2].Value := edtCodItemOrig.Text;
dmCAQ.cdsCAQCopiaFT.Params[3].Value := edtCodEmpDest.Text;
dmCAQ.cdsCAQCopiaFT.Params[4].Value := edtCodItemDest.Text;
{Esse proximo parametro é o de retorno OUT }
dmCAQ.cdsCAQCopiaFT.Params[5].Value := v_new_cod_ft;
dmCAQ.cdsCAQCopiaFT.Execute;
showMessage(´Copia gerada com sucesso !´);
edtCodFT.Text := v_new_cod_ft;
except
showMessage(´Problemas com a copia da Ficha Técnica !´);
end;

No dmCAQ.cdsCAQCopiaFT.execute da o sequinte erro:
´dbExpress : Invalid Parameter´;

Alguém sabe como posso acessar esse parametro ?


Mascotepc

Mascotepc

Responder

Posts

02/08/2005

Rjun

Posta o inicio da sua STP onde você declara os parâmetros.


Responder

Gostei + 0

02/08/2005

Mascotepc

CREATE PROCEDURE stp_caq_copiaFT(desc_nova_ft IN VARCHAR2,
cod_emp_origem IN VARCHAR2,
cod_item_origem IN VARCHAR2,
cod_emp_destino IN VARCHAR2,
cod_item_destino IN VARCHAR2,
new_cod_ft OUT VARCHAR2)
AS BEGIN


Responder

Gostei + 0

02/08/2005

Rjun

´dbExpress : Invalid Parameter´;


A mensagem é só essa ou tem algo mais?


Responder

Gostei + 0

02/08/2005

Mascotepc

dbExpress Error : Invalid Parameter - Somente isso !


Responder

Gostei + 0

02/08/2005

Rjun

A variável [b:0b462b96f5]v_new_cod_ft[/b:0b462b96f5] tem algum valor?


Responder

Gostei + 0

02/08/2005

Mascotepc

Não a variavel não possui nenhum valor !


Responder

Gostei + 0

02/08/2005

Rjun

Eu não conheço Oracle mas no MSSQL quando o parâmetro é de saida deve-se colocar OUTPUT após a declaração do parâmetro.

Se v_new_cod_ft não tem valor então a linha que você faz a atribuição não tem necessidade de existir.

Para você obter o valor do parâmetro após a execução da stp faça o seguinte :

edtCodFT.Text := dmCAQ.cdsCAQCopiaFT.Params[5].Value;


No DBExpress com Oracle não tem ParamByName?


Responder

Gostei + 0

02/08/2005

Mascotepc

Em Oracle para se declarar um parametro de retorno basta colocar a clausula OUT depois do seu nome.

Tentei fazer dessa forma, executar a Stored sem atribuir nada a esse paramentor e deu o mesmo erro na hora de EXECUÇÃO : ´DBExpress Error : Invalid Parameter´.

Sim ! DBExpress com Oracle posssui ParamByName !


Responder

Gostei + 0

02/08/2005

Rjun

Eu prefiro usar parambyname. Fica mais claro o q está se fazendo.

Bom, vc usa o parâmetro durante a STP ou ele só recebe um valor para retornar a aplicação?


Responder

Gostei + 0

02/08/2005

Mascotepc

Só recebe um valor para retonar a aplicação !

Inicialmente fiz a STP sem esse parametro de retorno e funcionou perfeitamente. Só que ai surgiu a necessiade do retorno. Ai Criei este parametro para que possa retornar para a aplicação. Nos componentes do Delphi o parametro aparece normalmente, tanto no TSQLStoredProc do Servidor quanto no ClientDataSet do Cliente.


Responder

Gostei + 0

02/08/2005

Rjun

Vc ja executou a STP no Oracle pra ver se esta tudo OK?


Responder

Gostei + 0

02/08/2005

Mascotepc

Sim executei no SQL*Plus e o retorno vem de maneira correta !


Responder

Gostei + 0

02/08/2005

Rjun

Verifique se no TSQLStoredProc o parâmetro esta mercado como ptOutput.


Responder

Gostei + 0

02/08/2005

Massuda

Eu não trabalho muito com BD, mas, fora o que o rjun escreveu, acho que como o parâmetro é do tipo output, você não pode atribuir um valor a ele antes de executar:
dmCAQ.cdsCAQCopiaFT.Params[5].Value := v_new_cod_ft;



Responder

Gostei + 0

02/08/2005

Mascotepc

Sim tanto no Servidor como Cliente está como ptOutput !


Responder

Gostei + 0

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

Aceitar