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

如何用Delphi 6 接回 Oracle Return FUNCTION ??

尚未結案
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-20 14:26:41 IP:61.220.xxx.xxx 未訂閱
Dear All:     我要如何用 ADO 元件去接回 Oracle Return FUNCTION 的值呢?? 假設 Oracle FUNCTION  為 number 我要如何下手??   < > ======================= 謝謝各位大德不吝賜教!! 小弟感激不進< > =======================
------

南無藥師琉璃光如來
保佑您
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-20 15:26:52 IP:210.65.xxx.xxx 未訂閱
Hi elvis114,    語法大致如下:
procedure TForm1.Button1Click(Sender: TObject);
Var
    Result : Integer;
begin
    ADOStoredProc1.Close;
    ADOStoredProc1.Parameters.ParamByName('p_ip_address').Value := Edit1.Text;
    ADOStoredProc1.ExecProc;
    Result := ADOStoredProc1.Parameters.ParamByName('RETURN_VALUE').Value;
    ADOStoredProc1.Close;
    ShowMessage(IntToStr(Result));
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-20 17:23:49 IP:61.220.xxx.xxx 未訂閱
謝謝 Fishman 的回答 如果是 > =======================
------

南無藥師琉璃光如來
保佑您
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-20 17:38:35 IP:210.65.xxx.xxx 未訂閱
Hi elvis114,    我用的是 Function 而不是 Procedure,看你的語法,應該是呼叫 Package 中的 Function,根據我測試結果,好像不行耶,你改為直接呼叫 Function 試試     ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-20 18:35:39 IP:61.220.xxx.xxx 未訂閱
再次謝謝 Fishman 的回答 我單獨拉出FLAG = 'N'>是否要更改Delphi的寫法??因我Oracle FUNCTION 測試是OK的< > ======================= 謝謝各位大德不吝賜教!! 小弟感激不進< > =======================
------

南無藥師琉璃光如來
保佑您
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-20 23:45:47 IP:61.230.xxx.xxx 未訂閱
Hi elvis114您好: 小弟都是用偷懶的方式...經過實驗證明可行.... 不管Function 或是 Procedure 我都是用Tquery    假設您的Function Name: Func1, 參數型態為Varchar2,回傳型態為Number 請試試看啦...    
Var 
 i: Integer;
begin
 Query1.Close;
 Query1.sql.text:='Select Func1('ABC') Return_value from dual';
//Procedure 如下
// Query1.sql.text:='begin procedureName end;';
 Query1.Open;
 i:=Query1.fieldByName('Return_value').asInteger;
end;
p.s. Oracle 保證可行, 其他資料庫沒有測試過.. 發表人 - yachanga 於 2004/05/20 23:58:56
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-21 08:40:41 IP:210.65.xxx.xxx 未訂閱
Hi elvis114,    Delphi Login 到 DataBase 的帳號是否與該 Function 的 Schema 相同? 若不相同可能會產生此錯誤,意即 你若由 A 帳號 Login  DataBase,並呼叫 Function1,即是在 呼叫 A.Function1,檢查一下是否有此錯誤 再者,建立參數時,必須多一個 Return_Value 作為傳回值
procedure TForm1.Button1Click(Sender: TObject);
Var
    Result : Integer;
begin
    ADOStoredProc1.Close;
    ADOStoredProc1.Parameters.Clear;
    ADOStoredProc1.ProcedureName := 'TEST_FUNCTION';
    ADOStoredProc1.Parameters.CreateParameter('RETURN_VALUE',ftFloat,pdReturnValue,4000,Null); // 回傳值
    ADOStoredProc1.Parameters.CreateParameter('P_IP_ADDRESS',ftString,pdInput,4000,Null); // 傳入值
    ADOStoredProc1.Parameters.ParamByName('P_IP_ADDRESS').Value := Edit1.Text;
    ADOStoredProc1.ExecProc;
    Result := ADOStoredProc1.Parameters.ParamByName('RETURN_VALUE').Value;
    ADOStoredProc1.Close;
    ShowMessage(IntToStr(Result));
end;
發表人 -
------
Fishman
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-21 10:21:42 IP:61.220.xxx.xxx 未訂閱
謝謝 yachanga 你ㄉ方法真的可以  但是真的無法用 >我想要多嘗試一下用 > 或許我有一些強人所難, > 也非常謝謝 > ======================= 謝謝各位大德不吝賜教!! 小弟感激不進< > =======================
------

南無藥師琉璃光如來
保佑您
elvis114
一般會員


發表:37
回覆:53
積分:18
註冊:2003-06-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-05-21 10:38:12 IP:61.220.xxx.xxx 未訂閱
超級感謝Fishman < > 你的方式是可以的< > 我試出來了< > ======================= 謝謝各位大德不吝賜教!! 小弟感激不進< > =======================
------

南無藥師琉璃光如來
保佑您
系統時間:2024-05-19 18:58:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!