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

请问如何对存储过程的执行给出反回信息??

尚未結案
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-13 15:17:15 IP:218.18.xxx.xxx 未訂閱
我写了一个存储如下 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-13 15:20:36 IP:61.222.xxx.xxx 未訂閱
兩種作法 先判斷條件 IF EXISTS (SELECT materialcode FROM aobom WHERE materialcode = @materialcode) 然後 1.print ('沒有合乎条件的记录') 或 2.RAISERROR ('沒有合乎条件的记录', 16, 1) 發表人 - hahalin 於 2004/01/13 15:24:55 發表人 - hahalin 於 2004/01/13 15:29:14
hahalin
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-13 15:46:36 IP:61.222.xxx.xxx 未訂閱
  我剛測了一下   只有raiserror可以在前端show訊息      參考看看  
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-13 16:14:19 IP:218.18.xxx.xxx 未訂閱
我运行不了,说什么")"处有误,能不能具体点说出来啊?拜托
hahalin
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-13 16:39:09 IP:61.222.xxx.xxx 未訂閱
應該是raiserror的問題 字串前後加單引號就好 『'』,跟delphi一樣 RAISERROR ('error message', 16, 1)
hahalin
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-01-13 16:40:40 IP:61.222.xxx.xxx 未訂閱
或是post你的code,也讓其他朋友能有機會一起幫你想辦法...
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-01-14 00:33:31 IP:61.62.xxx.xxx 未訂閱
除了 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-01-14 08:35:18 IP:61.222.xxx.xxx 未訂閱
對對對,沒錯沒錯,timhuang大大的方法可以用tquery元件取回回傳值, 是一個比較簡單實用的好辦法唷...
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-01-14 08:58:17 IP:218.18.xxx.xxx 未訂閱
还有点不明白,就是 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-01-14 09:58:53 IP:218.163.xxx.xxx 未訂閱
插花一下, 應該也可以運用 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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-01-14 10:28:08 IP:203.95.xxx.xxx 未訂閱
我想你需要的應該是確認是否有更新到資料吧. 在 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)
GO
DELPHI 中的 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
系統時間:2024-04-28 6:04:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!