delphp自動建立儲存過程引數列表

2021-08-25 09:48:49 字數 2276 閱讀 2845

通過adostoredproc執行儲存過程必須先手動建立引數列表,這個建立有點麻煩,所以自已寫了個自動建立引數列表的函式,供自已使用,哪位有需要的話也可以直接使用。

//自動建立儲存過程列表 function tform1.createprocparalist(adostore:tadostoredproc;pubquery:tadoquery;var mymsg:string):boolean; var fnstrlist:array of string; tmpstr,procname,paraname,paradatatype:string; fnlist:tstrings; i,fnlength:integer; ft:tdatatype; pd:tparameterdirection; begin result:=true; mymsg:=''; if adostore.procedurename='' then begin result:=false; mymsg:='請設定儲存過程名稱'; exit; end; adostore.parameters.clear; fnstrlist:=vararrayof(['varchar','int','money','decimal','datetime']); fnlist:=tstringlist.create; for i := low(fnstrlist) to high(fnstrlist) do begin fnlist.add(fnstrlist[i]); end; if not adostore.connection.connected then adostore.connection.connected:=true; procname:=adostore.procedurename; //取儲存過程引數列表 tmpstr:='select a.[name] paraname,b.[name] [datetype],a.length,a.xprec,' +'a.xscale,a.isoutparam,b.xusertype from syscolumns a ' +'inner join systypes b on a.xusertype=b.xusertype ' +'where id=object_id('+quotedstr(procname)+')'; with pubquery do begin close; sql.text:=tmpstr; try open; except result:=false; mymsg:='開啟儲存過程相關物件失敗'; exit; end; try try //建立引數列表 while not eof do begin paraname:=fieldbyname('paraname').asstring; paraname:=copy(paraname,2,length(paraname)-1); paradatatype:=fieldbyname('datetype').asstring; fnlength:=fieldbyname('length').asinteger; if fieldbyname('isoutparam').asinteger=0 then pd:=pdinput else pd:=pdoutput; case fnlist.indexof(paradatatype) of 0:ft:=ftstring; 1:ft:=ftinteger; 2:ft:=ftcurrency; 3:ft:=ftbcd; 4:ft:=ftdatetime; end; adostoredproc1.parameters.createparameter(paraname,ft,pd,fnlength,null); next; end; except result:=false; mymsg:='建立儲存過程引數列表失敗'; exit; end; finally freeandnil(fnlist); end; end; end;

--以下是呼叫的方法

procedure tform1.button1click(sender: tobject); var tmpstr:string; begin //自動建立儲存過程列表 if not createprocparalist(adostoredproc1,adoquery1,tmpstr) then begin messagedlg(tmpstr,mtwarning,[mbok],0); exit; end; //呼叫儲存過程 with adostoredproc1.parameters do begin items[0].value:='sfsdfsdfsd'; items[1].value:=20; items[2].value:=15.6; items[3].value:=45.4; items[4].value:=strtodate('2010-03-04'); end; with adostoredproc1 do begin execproc; showmessage(parameters.items[5].value); end; end;

建立儲存過程

execute pro book 當你執行該儲存過程時,所有包括在其中的sql語句都會執行,在上面的例子中,會返回所有在forum表中的記錄。當在批處理中的第乙個語句是呼叫儲存過程時,你並不需要使用execute語句。你可以簡單地提供儲存過程的名稱來執行儲存過程。比如在isql w中,可以象下面所示...

建立儲存過程

create procedure dbo procgetdata days int asbegin set nocount on added to prevent extra result sets from interfering with select statements.set nocoun...

建立儲存過程

在ms sql server 2000 中,建立乙個儲存過程有兩種方法 一種是使用transaction sql 命令create procedure,另一種是使用圖形化管理工具enterprise manager。用transaction sql 建立儲存過程是一種較為快速的方法,但對於初學者,使...