SQL 預存函數如何取回傳回值? |
答題得分者是:hahalin
|
superrakce
一般會員 發表:24 回覆:35 積分:11 註冊:2006-10-09 發送簡訊給我 |
這是預存程式
[code sql] CREATE PROC ImportOCAT ( @NType int,@ocatid varchar(10),@ocatname nvarchar(50) ) AS BEGIN select * from ocat where 分類代碼 = @ocatid if @@ROWCount = 0 begin insert into ocat (分類代碼,分類名稱) values (@ocatid,@ocatname) return 1 end else begin if @NType ='2' begin update ocat set 分類名稱 = @ocatname where 分類代碼 = @ocatid return 2 end else return 3 end END GO [/code] Q1:為何錯誤?訊息為指定了太多參數 [code delphi] var exlSP:Tadostoredproc; begin exlSP:=Tadostoredproc.Create(owner); exlSP.Connection := form1.AQ.Connection ; exlSP.ProcedureName := 'ImportOCAT'; exlSP.Parameters.CreateParameter('NType',ftInteger,pdInput,4,null); exlSP.Parameters.CreateParameter('Ocadid',ftString,pdInput,10,null); exlSP.Parameters.CreateParameter('ocadname',ftString,pdInput,50,null); exlSP.Parameters.CreateParameter('ocatRet',ftInteger,pdReturnValue,1,null); exlSP.Parameters.ParamByName('NType').Value := 1; exlSP.Parameters.ParamByName('Ocadid').Value := '78'; exlSP.Parameters.ParamByName('ocadname').Value := '87'; exlSP.ExecProc; showmessage(inttostr(exlSP.Parameters.ParamValues['ocatRet'] )); [/code] Q2:多重步驟OLE DB 操作發生錯誤,請檢查每一個可用的OLE DB [code delphi] VAR AQXLS: TADOQuery; BEGIN AQXLS.Connection := form1.AQ.Connection ; AQXLS.SQL.Text := 'EXEC ImportOCAT :NType,:Ocadid,:ocadname'; AQXLS.Parameters.CreateParameter('NType',ftInteger,pdInput,4,null); AQXLS.Parameters.CreateParameter('Ocadid',ftString,pdInput,10,null); AQXLS.Parameters.CreateParameter('ocadname',ftString,pdInput,50,null); AQXLS.Parameters.CreateParameter('ocatRet',ftInteger,pdReturnValue,1,null); AQXLS.ExecSQL; [/code] Q3:若回傳的是Parameter 則將TParameterDirection 設為pdOutput? |
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
[code delphi] var qry:tadoquery; ntype,ocatid,ocatname:string; result:string; begin qry:=tadoquery.create(self); qry.connection:= connection1 ; //<--给connection //要给ntype,ocatid,ocatname 值 qry.sql.text:='exec importOCAT ' ntype ',' ocatid ',' ocatname; result:=""; try qry.open; if (qry.bof <> qry.eof) then result:=qry.fields[0].asstring; finally qry.free; end; //收工 end; [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |