線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4976
推到 Plurk!
推到 Facebook!

oracle ADOStoredProc 提供不一致或不完全的資訊導致參數物件不適當地被拒

缺席
鈴鐺
初階會員


發表:33
回覆:81
積分:35
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-03 15:35:14 IP:61.220.xxx.xxx 未訂閱
請問動態 call oracle store procedure 的方法? 因為我試了下列三種方式, 第一種偶有成功, 但不知是否有高手可以告知最正確的方法呢? 第一種方法我代入較複雜的 stored procedure 就會發生  "提供不一致或不完全的資訊導致參數物件不適當地被拒" 錯誤. 我猜英文版訊息為"Parameter Object Defined Improperly" 方法一: 用 Refresh,
with ADOStoredProc1 do
begin
  ProcedureName := 'Proc1';
  Parameters.Refresh;
  Parameters.ParamByName('P1').Value := 123;
  Parameters.ParamByName('P2').Value := 456;
  ExecProc;
  ShowMessage('Ret:' String(Parameters.ParamByName('Param1').Value);
end;
方法二: 用 CreateParameters,
with ADOStoredProc1 do
begin
  ProcedureName := 'Proc1';
  Parameters.Refresh;
  Parameters.CreateParameter('P_RET',ftInteger,pdReturnValue,0,null);
  Parameters.CreateParameter('P1',ftInteger,pdInput,0,123);
  Parameters.CreateParameter('P2',ftInteger,pdInput,0,456);
  ExecProc;
  ShowMessage('Ret:' String(Parameters.ParamByName('P_RET').Value);
end;
方法三: 用 AddParameters, 發表人 - 鈴鐺 於 2002/09/03 15:41:27
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-04 00:55:34 IP:211.23.xxx.xxx 未訂閱
奇怪了,我利用你說的第一種及第二種方式都不會有問題,但第三種試不出來,將code貼給你參考看看
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  with ADOStoredProc1 do
    begin
      ProcedureName := 'TEST';
      Parameters.Refresh;
      Parameters.ParamByName('P1').Value := 123;
      ExecProc;
      ShowMessage('Ret:'   string(Parameters[0].Value));
    end;
end;    procedure TForm1.Button3Click(Sender: TObject);
begin
  with ADOStoredProc1 do
    begin
      ProcedureName := 'TEST';
      Parameters.Refresh;
      Parameters.CreateParameter('P1', ftFloat, pdInput, 0, 123);
      ExecProc;
      ShowMessage('Ret:'   string(Parameters[0].Value));
    end;
end;    create or replace function TEST(P1 IN NUMBER) return number is
begin
  
  RETURN 1;
end TEST;    
@@~~飛翔在天際的精靈~~@@ 發表人 - andersonhsieh 於 2002/09/04 01:06:10
------
@@~~飛翔在天際的精靈~~@@
鈴鐺
初階會員


發表:33
回覆:81
積分:35
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-04 10:16:34 IP:211.21.xxx.xxx 未訂閱
引言: 奇怪了,我利用你說的第一種及第二種方式都不會有問題,但第三種試不出來,將code貼給你參考看看
這問題和參數有關,請在試試下列 store procedure
PROCEDURE PROC1( p1 IN NUMBER,
                 p2 IN VARCHAR2,
                 p3 IN number,
                 p4 IN VARCHAR2,
                 p5 IN VARCHAR2,
                 p6 IN NUMBER,
                 p7 OUT NUMBER,
                 p8 OUT VARCHAR2)
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-04 10:32:21 IP:211.20.xxx.xxx 未訂閱
我大概知道你的問題了,你總共有八個參數,而你卻只產生三個參數那是不對的 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
鈴鐺
初階會員


發表:33
回覆:81
積分:35
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-04 10:52:43 IP:61.220.xxx.xxx 未訂閱
引言: 我大概知道你的問題了,你總共有八個參數,而你卻只產生三個參數那是不對的
你誤會了,我當然知道要產生八個參數(方法二),方法一不需要. 只是要將問題先簡化, 若有網友遇到相同錯誤訊息, 也許可以幫上忙. 發表人 - 鈴鐺 於 2002/09/04 10:53:53
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-04 11:13:56 IP:211.20.xxx.xxx 未訂閱
你的參數型態要正確,如是VARCHAR2則要ftString,NUMBER則建議用ftFloat @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
系統時間:2024-11-23 6:46:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!