各位Delphi高手,可以請問SQL server的Stored Procedure的撰寫嗎? |
答題得分者是:ko
|
hanniannie
一般會員 發表:3 回覆:1 積分:0 註冊:2011-08-04 發送簡訊給我 |
不好意思...因為最近才開始學delphi,然後知道了裡頭可以使用stored procedure的功能,但他的來龍去賣還是沒很了解。
只知道要先在stored procedure裡寫SQL,然後再到delphi裡寫傳參數的程式碼(應該是這樣@@) 但我只有在delphi的TQuery的SQL裡寫過""exec test :id""這種比較簡單的,如要傳參數我就不太會了 目前再寫一個"搜尋"的功能,他可以依造"員工號碼(empid)"、請假狀態的"取消申請(status=1)"、"批退(status=2)"、"核准(status=3)來搜尋資料<都是使用checkbox> 如果只有"員工號碼"打勾,則只找尋到員工號碼的資料 但也許有人把"取消申請"與"批退"都打勾,那我又應該要如何寫stored pro,以及delphi的程式 我的stored pro寫法如下: Create pro Test @emp varchar(10), @statusid int As if empid=@emp begin Select * From Job Where empid=@emp end if statusid=@staus begin Select * From Job Where status=@statusid end <這樣對嗎?!!> 還是要寫成: if statusid=1 begin Select * From Job Where status=1 end if statusid=2 begin Select * From Job Where status=2 end if statusid=3 begin Select * From Job Where status=3 end 接下來TQuery裡的SQL: Select * From Job Where empid =:emp and status =:statusid <這樣對嗎?!!> 最後delphi的程式: ParambyName('emp').values:=empid; ParambyName('statusid').values:=status; 拜託可以幫我看一下這樣寫法是否正確,或是哪裡需要更正的!!!!感謝你們~~~ 編輯記錄
hanniannie 重新編輯於 2011-08-07 04:46:32, 註解 無‧
|
inungh
初階會員 發表:0 回覆:27 積分:25 註冊:2011-06-19 發送簡訊給我 |
Do you use MS SQL server as backend?
If you do, I recommand that you have 3 tables like following: tblEmloyee, tblStatus tblAttendance In the stored procedure, you can have tbale join like following for details report, Create Procedure as GetAttendanceDetails @MyStatus as tinyint, @StartDate as DateTime, @EndDate as Datetime Begin Select EmployeeID, EmployeeName from tblEmployee join tblAttendance on tblEmployeeID = tblAttendance.EmployeeID join tblStatus on tblStatus.StatusID = tblAttendance.Status where tblStatus.StatusID = @MyStatus and tblAttendance.ActivityDate = between @StartDate and @EndDate End The stored procedure will give you the status and start date and end date attendance employee list. If you need further assistance or questions please feel free let me know without hesitations, Inung
------
Inung Huang |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
依您的例子,應不必要使用到 Stored Procedure,直接於 TQuery.SQL
寫 SELECT * From Job Where empid = :emp 等,並於 TQuery.Params 設定好其 DataType 與 ParamaType, 而於 TQuery.Open() 前填好各 Paramas 的值(如您文末所寫)即可。 TStoredProc 主要用於傳參數給資料庫預先寫好的 Stored Procedure 處理『非人機介面要顯示的作業』, 例如:過帳、運算、複雜的檢查流程等,用法就如您所寫的方式。 另外,也有『人機介面要顯示的資料』的用法,例如:由 Stored Procedure 將多個檔 Join、運算、排序後, 或製作成一個臨時 Table 後,再顯示於前端或供列印報表。
編輯記錄
herbert2 重新編輯於 2011-08-07 17:18:34, 註解 無‧
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
小弟略懂一點來龍去賣~
1.關於 PROC 的用法,這邊跟Delphi 裡面的程式碼撰寫毫無關係~ Create proc ABC_proc @string_1 char(100) , @INT_1 int //表示建立一個 ABC_proc 的 預存程序 其參數有二分別為 @string_1 形態是 char 長度 100 跟 @INT_1 形態是數字 as //這裡面可以寫很多的 TSQL 任何的語法都能使用!! // ex: 可以下 delect from table1 // ex: 可以下 update XX set OO where XYZ // ex: 也可以用 回圈 while ... do // ex: 也有除了外遞參數(@string_1,@INT_1)之外,自己還能指(設)定參數 // declare 相當於 Delphi 裡面的 var // ex:參數設定 declare @rec int , @proc_row int //直接指定參數值 ex: select @rec=0,@proc_row=0 //也可以用 set @rec=100 //由TSQL語法搜尋後取得值 select @rec=type1 from emp_table where empid=@string_1 select @proc_row=@@rowcount //上述@@rowcount 是SQL SERVER的內定參數,此類參數還有很多,這裡是指上一個查詢的資料筆數 / go 2.從Delphi 使用Proc 從 Qry1:TQuery 中必須用 Qry1.Sql.Add(exec ABC_proc '參數1',‘參數2’) 而且要用 Qry1.Open(); 若還有不懂可以自己在找一下google或再上來問個明白 歡迎再來龍燒賣!
------
====================== 昏睡~ 不昏睡~ 不由昏睡~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |