Em 2 camadas funciona, em 3 não !!!!
O meu problema é pegar o retorno de um Stored Procedure que possui parametros de entrada e saída.
É o sequinte, minha aplicação é em três camadas, então não acesso o
componente SQLStoredProc diretamente, acesso ele através de um
CLientDataSet que acessa o DataSetProvider que por sua vez acesso o
SQLStoredProc.
Executo dessa maneira :
procedure TCAQ_FUNC001.bbtCalcular2Click(Sender: TObject);
var v_result : String;
begin
try
with dmCAQ2.cdsCAQfuncTeste do
begin
Close;
//Primeiro : atribuimos os valores ao parametro
dmCAQ2.cdsCAQfuncTeste.Params[0].Value := edtTexto.Text;
//Segundo: Solicitamos a abertura do ClienteDataSet
Open;
v_result := dmCAQ2.cdsCAQFuncTeste.Params[1].AsString;
end;
edtResultTexto.Text := v_result;
except
showMessage(´Problemas com o calculo da analise !´);
end;
end;
No Open do ClientDataSet da o sequinte erro : ´dbExpress Error : Invalid Parameter´
Quando testo em 2 camadas executando diretamene o componente
SQLStoredProc funciona.
Executo dessa maneira em 2 camdas :
procedure TForm1.Button1Click(Sender: TObject);
begin
try
with stpTeste do
begin
Params[0].AsString := edit1.Text;
ExecProc;
edit2.Text := Params[1].AsString;
end;
except
showMessage(´Erro´);
end;
end;
A Stored no Oracle está assim
CREATE PROCEDURE teste (v_texto IN VARCHAR2,
v_result_txt OUT VARCHAR2) AS
BEGIN
v_result_txt := ´Retorno: ´ || v_texto;
END;
Será que não consigo pegar o retorno via ClienteDataSet em 3 camadas ?
É o sequinte, minha aplicação é em três camadas, então não acesso o
componente SQLStoredProc diretamente, acesso ele através de um
CLientDataSet que acessa o DataSetProvider que por sua vez acesso o
SQLStoredProc.
Executo dessa maneira :
procedure TCAQ_FUNC001.bbtCalcular2Click(Sender: TObject);
var v_result : String;
begin
try
with dmCAQ2.cdsCAQfuncTeste do
begin
Close;
//Primeiro : atribuimos os valores ao parametro
dmCAQ2.cdsCAQfuncTeste.Params[0].Value := edtTexto.Text;
//Segundo: Solicitamos a abertura do ClienteDataSet
Open;
v_result := dmCAQ2.cdsCAQFuncTeste.Params[1].AsString;
end;
edtResultTexto.Text := v_result;
except
showMessage(´Problemas com o calculo da analise !´);
end;
end;
No Open do ClientDataSet da o sequinte erro : ´dbExpress Error : Invalid Parameter´
Quando testo em 2 camadas executando diretamene o componente
SQLStoredProc funciona.
Executo dessa maneira em 2 camdas :
procedure TForm1.Button1Click(Sender: TObject);
begin
try
with stpTeste do
begin
Params[0].AsString := edit1.Text;
ExecProc;
edit2.Text := Params[1].AsString;
end;
except
showMessage(´Erro´);
end;
end;
A Stored no Oracle está assim
CREATE PROCEDURE teste (v_texto IN VARCHAR2,
v_result_txt OUT VARCHAR2) AS
BEGIN
v_result_txt := ´Retorno: ´ || v_texto;
END;
Será que não consigo pegar o retorno via ClienteDataSet em 3 camadas ?
Mascotepc
Curtidas 0
Respostas
Titanius
22/11/2005
Já tentou dar um Fetch Params? e marcar o parametro como OutPut?
[]s
[]s
GOSTEI 0
Mascotepc
22/11/2005
Fetch Params sim, agora quanto Marca como output, vc fala no próprio ClientDataSet ? Se for ja está como OutPut sim.
GOSTEI 0
Titanius
22/11/2005
Verifica no CDS e la no Server tbm... se os dois estao como output.... aki comigo funciona assim...
GOSTEI 0
Mascotepc
22/11/2005
Tanto no CDS do Cliente como no SQLStoredProc do servidor estão como OutPut ! Vc utiliza 3 Camdas ?
GOSTEI 0
Titanius
22/11/2005
Pra falar a verdade eu já usei, porém quando meu projeto estava pronto começou dar muito problema, e não conseguia solucionar, pois não se acha documentacao farta na net... por este motivo agora faço 3 camadas usando Asta.. os problemas que eu tinha nao tenho mais... :D
[]s
[]s
GOSTEI 0