请问如何对存储过程的执行给出反回信息?? |
尚未結案
|
jtp
初階會員 ![]() ![]() 發表:39 回覆:81 積分:29 註冊:2003-04-20 發送簡訊給我 |
我写了一个存储如下
CREATE PROCEDURE ado_purstorage_accy
@aono varchar(15) ,@materialcode varchar(50),@acceptqty int AS update aobom set acceptqty=(@acceptqty acceptqty)
where aono=@aono and materialcode=@materialcode select * from aobom 如果我在执行完毕之后没有找着合乎条件的记录,请问如何给出一个对话框给我让我知道没有合乎条件的记录?
|
hahalin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
hahalin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
jtp
初階會員 ![]() ![]() 發表:39 回覆:81 積分:29 註冊:2003-04-20 發送簡訊給我 |
|
hahalin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
hahalin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
timhuang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
除了 hahalin 兄的方法外, 也可以使用 Stored Procedure 的回傳值來達成, 如:
CREATE PROCEDURE ado_purstorage_accy @aono varchar(15) ,@materialcode varchar(50),@acceptqty int, @ret int output AS update aobom set acceptqty=(@acceptqty acceptqty) where aono=@aono and materialcode=@materialcode IF EXISTS (SELECT materialcode FROM aobom WHERE materialcode = @materialcode) select @ret = 1 else select @ret = 0 GO利用回傳參數的方式來取得結果也是一種不錯的方法! |
hahalin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
jtp
初階會員 ![]() ![]() 發表:39 回覆:81 積分:29 註冊:2003-04-20 發送簡訊給我 |
还有点不明白,就是
IF EXISTS (SELECT materialcode FROM aobom WHERE materialcode = @materialcode)
select @ret = 1
else
select @ret = 0 1. 我update的时候是需要满足aono=@aono and materialcode=@materialcode,为什么timhuang上面写的只有一个条件呢,我加上一个条件,但运行不了。
2. 用ADOQuery如何取回那个传回值呢?
|
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
插花一下, 應該也可以運用 Stored Procedure 的 Return Code, 如:
CREATE PROCEDURE ado_purstorage_accy @aono varchar(15) ,@materialcode varchar(50),@acceptqty int AS begin update aobom set acceptqty=(@acceptqty acceptqty) where aono=@aono and materialcode=@materialcode return(@@rowcount) end |
timhuang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
我想你需要的應該是確認是否有更新到資料吧. 在 MSSQL 中是使用 @@ROWCOUNT 來確認, 再利用 Stored Procedure 的 return value 的方式來回傳, 一般回傳的值 0 為成功, 1 為失敗, 當然, 實際的應用可以看你的需要來調整!!
寫個小範例給你參考: MSSQL 2000 + Delphi 7 Stored Procedure:
CREATE PROCEDURE [dbo].[sp_update] @id varchar(7), @name varchar(50) AS declare @rc int update uutable set name=@name where [id]=@id select @rc = @@ROWCOUNT if (@rc = 0 ) return(1) -- no row has been changed , return 1 (false) else return(0) -- return 0 (success) GODELPHI 中的 ADOStoredProc 的用法: procedure TForm1.Button1Click(Sender: TObject); var ret: string; begin ADOStoredProc1.ProcedureName := 'sp_update'; ADOStoredProc1.Parameters.Refresh; ADOStoredProc1.Parameters.ParamByName('@id').Value := '0000001'; ADOStoredProc1.Parameters.ParamByName('@name').Value := '12221'; ADOStoredProc1.ExecProc; ret := VarToStr(ADOStoredProc1.Parameters[0].Value); // 第 0個參數一定是回傳值!! (就是 stored procedure 的 return 值) if ret='0' then ShowMessage('success') else ShowMessage('no row has been changed!'); end;ps. 還是 mickey 兄的手腳快. 弟還在測這個部分的時候, mickey 兄已經 post 上來囉.... 真厲害.... 用 return 的方式是不錯的一種方法, 利用 inputoutput 參數可以再多傳出資料, 也是都可以應用的方式!! 發表人 - timhuang 於 2004/01/14 10:32:22 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |