全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1332
推到 Plurk!
推到 Facebook!

請問有沒有人會用ADOStoredPorc呢?

尚未結案
JS
一般會員


發表:22
回覆:26
積分:9
註冊:2002-07-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-28 16:46:08 IP:211.78.xxx.xxx 未訂閱
請問一下我這樣寫會error不知是何原因 ADOStoredProc1.ProcedureName:='dept_package.dept_sp'; ADOStoredProc1.Parameters.Clear; ADOStoredProc1.Parameters.CreateParameter('dept_no', ftInteger, pdInput, 2, 11); ADOStoredProc1.Parameters.CreateParameter('io_cursor', ftInterface, pdInputOutput, 0, null); ADOStoredProc1.Open; ===================================================================== Error Message:參數數目不正確 ===================================================================== Oracle package如下: CREATE OR REPLACE PACKAGE BODY dept_package AS PROCEDURE dept_sp(dept_no IN NUMBER,io_cursor IN OUT t_cursor) IS v_cursor t_cursor; BEGIN IF dept_no<>0 THEN OPEN v_cursor FOR SELECT * FROM DEPT WHERE DEPTNO=dept_no; ELSE OPEN v_cursor FOR SELECT * FROM DEPT; END IF; io_cursor:=v_cursor; END dept_sp; END dept_package;
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-28 16:56:46 IP:210.66.xxx.xxx 未訂閱
小弟沒有用過Oracle,但用TADOStoredProc呼叫MS SQL 2000之StoredProcure,會有多一個回傳值的參數@RETURN_VALUE,不知Oracle是不是也是這樣,建議您直接在Form下面拉一個TADOStoredProc,然後做好您的設定,再看看有幾個參數要設的! Ian
JS
一般會員


發表:22
回覆:26
積分:9
註冊:2002-07-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-28 17:01:35 IP:211.78.xxx.xxx 未訂閱
有幾個參數要設定?在那看?是在design time的屬性視窗嗎?如果您有for ms sql的code,可否貼上來,我想應該是一樣用法吧~~thx
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-28 17:10:48 IP:61.222.xxx.xxx 未訂閱
因為你的store procedure參數有用到cursor,有一點不同,參考這裡: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=48618, http://delphi.ktop.com.tw/topic.php?TOPIC_ID=50515
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-28 17:29:28 IP:210.66.xxx.xxx 未訂閱
ADOStoredProc1.ProcedureName := 'Menu_Collect;1';
ADOStoredProc1.Parameters.CreateParameter('@RETURN_VALUE', ftInteger, pdReturnValue, 0, null);
ADOStoredProc1.Parameters.CreateParameter('@Prg_ID', ftString, pdInput, 10, null);
ADOStoredProc1.Parameters.ParamByName('@Prg_ID').Value := Trim(FSys_Name);
這是小弟的用法,不過change.jian前輩的說法可能比較正確!畢竟小弟沒有用過Oracle。 Ian
JS
一般會員


發表:22
回覆:26
積分:9
註冊:2002-07-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-28 18:32:50 IP:211.78.xxx.xxx 未訂閱
thx,但是還是不行~~
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-29 15:52:02 IP:61.222.xxx.xxx 未訂閱
引言: thx,但是還是不行~~
可以的話,請把你的做法及產生的錯誤訊息描述一下,不然別人可能無從幫起
JS
一般會員


發表:22
回覆:26
積分:9
註冊:2002-07-20

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-06-29 16:30:58 IP:211.78.xxx.xxx 未訂閱
不好意思,我大概沒把情形講清楚,所以我再重新敘述一下: 我是用ADOStorProcedure來執行Oracle的stored porcedure,所有產生的procedure的碼已貼在最上面了,因為我要取回one or more recordset,所 以希望用cursor的方式傳出來,那我已經在資料庫端測試過了沒有問題了, 可是delphi這端(已貼在最上面了)一直試不出來,錯誤資訊如圖,不知如何改才對?
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-06-29 21:47:30 IP:61.229.xxx.xxx 未訂閱
Hi,JS:   1.雖然我找不到相關的文件說明,但我認為應該是你把io_cursor的參數設為in out的關係,你要不要試試看直接改成out就好.(Delphi與Oracle都要改)      2.我看你Store procedure 裡有"o_cursor:=v_cursor;"這樣一行指令.老實說我很久沒碰oracle了,這樣的指令是否能正常work要請你再確認一下,一般應該是直接Open不是嗎?如下:
create or replace procedure REPORT_JOB_COST
( E_ID IN VARCHAR2,
  c1 out pg_ref_cursor.rpt_cursor
)
is
begin
   open  c1 for
   SELECT EMPLOYEE_ID,
          EMPLOYEE_NAME,
          JOB_NAME,
          CALCULATE_JOB_COST(EMPLOYEE_JOBID) AS JOB_COST
     FROM EMPLOYEE, JOB
    WHERE EMPLOYEE_JOBID = E_ID; 
end;    
JS
一般會員


發表:22
回覆:26
積分:9
註冊:2002-07-20

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-07-01 09:41:49 IP:211.78.xxx.xxx 未訂閱
謝謝change.jian的回覆,其實您說的我也有試過了,結果delphi還是不行(因為我有用其他的程式語言試過是OK的),但我想DELPHI應該也可以吧~~只是不知道如何用吧~~不知有沒有人想一起想想看~~
系統時間:2024-05-17 11:35:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!