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

如何知道 Stored Procedure 已正確執行完成

尚未結案
m1594
一般會員


發表:1
回覆:6
積分:1
註冊:2003-02-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-26 13:35:52 IP:211.79.xxx.xxx 未訂閱
各位前輩好,小弟目前遇到的問題是,呼叫一個 Stored Procedure 後,馬上去select 此 Procedure 有Insert 資料的Table,可是卻無法得到正確的結果,等程式執行完,再去 SQL Query 下指令,就可以得到正確的結果。所以我在呼叫 SP 後,加入延遲程式測試,果然就可以得到正確的結果。我現在已經試過把 select 的時間放在 SP 的AfterClose 裡,還是沒辦法得到正確的結果,到底要怎麼樣才能確定 SP 已經正常做完呢?即使我在程式加中斷點,再去 SQL Query 看,也已經 Update 資料庫了,為什麼在 Delphi 下的ADOQuery無法得到正確的結果呢?多謝了! PS:ADOQuery select 時,數值資料是 -1, 文字資料會是 "to be processed"
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-26 15:18:31 IP:218.163.xxx.xxx 未訂閱
可以考慮在這個stored procedure 的結尾加上你要select欄位的段落
m1594
一般會員


發表:1
回覆:6
積分:1
註冊:2003-02-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-26 15:43:56 IP:211.79.xxx.xxx 未訂閱
感謝版主大大的幫忙,但由於此 Procedure 很多人使用,所以可能沒辦法更動它。
change.jian
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-26 15:54:43 IP:61.222.xxx.xxx 未訂閱
您好,請教一下: 1.您的後端資料庫是什麼? 2.您呼叫store procedure是用open 還是 execute 3.可否將您的store procedure code 放上來,這樣也許可以比較快找到答案.
yachanga
資深會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-26 16:05:14 IP:210.68.xxx.xxx 未訂閱
引言: 各位前輩好,小弟目前遇到的問題是,呼叫一個 Stored Procedure 後,馬上去select 此 Procedure 有Insert 資料的Table,可是卻無法得到正確的結果,等程式執行完,再去 SQL Query 下指令,就可以得到正確的結果。所以我在呼叫 SP 後,加入延遲程式測試,果然就可以得到正確的結果。我現在已經試過把 select 的時間放在 SP 的AfterClose 裡,還是沒辦法得到正確的結果,到底要怎麼樣才能確定 SP 已經正常做完呢?即使我在程式加中斷點,再去 SQL Query 看,也已經 Update 資料庫了,為什麼在 Delphi 下的ADOQuery無法得到正確的結果呢?多謝了! PS:ADOQuery select 時,數值資料是 -1, 文字資料會是 "to be processed"
Hi m1594: 小弟也有遇到這類問題,因為我也不確定procedure 什麼時候跑完. 後來我的解法是: 在procedure 最後一行寫log, insert 一筆record到一個新table.. 您只要定時去新table 找看看有沒有新record.. 如果有就是跑完了.. 不知道其他大大有沒有更好的方法 <>~悠遊法國號~
m1594
一般會員


發表:1
回覆:6
積分:1
註冊:2003-02-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-26 16:52:57 IP:211.79.xxx.xxx 未訂閱
不好意思,沒有說清楚我的環境 1.DB 是用 SQL2000 2.store procedure 的開啟方式,Open 和 Exec 都試過,會是一樣的情形 3.store procedure 由於是別的公司寫的,可能沒辦法全貼上來,最後一段有Return (ReturnVal)值回來,但是ADOStoredProc 沒有辦法得到這個參數(會是因為不是在一開始處宣告的關係嗎?),如果能抓到這個值,應該可以解決問題了。 ... DECLARE @ReturnVal int declare @MSG_STR char(20) select @MSG_STR = CONVERT(char(20), @MSG_ID) execute @ReturnCode = sp_PostDealToExec 'FX', @MSG_STR, @DATE_TIME, @Source, @OriginalID, @LimitCheckTimeout, @ReturnVal out if @LimitCheckTimeout = 0 or @LimitCheckTimeout IS NULL BEGIN select @MSG_ID END ELSE BEGIN IF(@ReturnVal IS NULL) BEGIN SELECT -1 END ELSE BEGIN SELECT @ReturnVal END END
change.jian
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-26 17:55:37 IP:61.222.xxx.xxx 未訂閱
我之前是這樣做的,我的後端資料庫是sybase ,在store procedure裡最後會回傳一個dataset回來,而回傳的dataset內容會依據傳入的store procedure的參數而決定,我用TQuery去跑,在SQL裡直接下以下指令: DECLARE @STARTDATE DATETIME EXEC GET_DATASET @STARTDATE 然後,呼叫TQuery.open來執行.該store procedure會把資料組合在一個temp的table裡,最後回傳該table的內容回來 你可以試試看這樣做行不行,另外,如果說你要取得某個回傳值,那就用TStoredProc,然後設定對應的參數,最後檢查回傳的值.如果你要得到@ReturnVal,那應該用TStoredProc才是.
m1594
一般會員


發表:1
回覆:6
積分:1
註冊:2003-02-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-27 14:13:44 IP:211.79.xxx.xxx 未訂閱
從各位大大的經驗看來,似乎從 Stored Procedure 上下手才是正途,由於我用的SP是有很多人在共用(大多是DTS),可能需要和其他人協調後再下手修改,非常感謝各位前輩寶貴的經驗。
l630521
資深會員


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-04-27 14:40:46 IP:210.66.xxx.xxx 未訂閱
store procedure 由於是別的公司寫的,可能沒辦法全貼上來,最後一段有Return (ReturnVal)值回來,但是ADOStoredProc 沒有辦法得到這個參數(會是因為不是在一開始處宣告的關係嗎?),如果能抓到這個值,應該可以解決問題了。 ADOStoredProc應該可以得到ReturnVal的值,你的問題只要取得這個回傳值就解決了 ADOStoredProc1.Parameters.ParamByName('@ReturnVal').Value就可以取回@ReturnVal的值了。 Ian
系統時間:2024-04-26 23:56:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!