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

各位Delphi高手,可以請問SQL server的Stored Procedure的撰寫嗎?

答題得分者是:ko
hanniannie
一般會員


發表:3
回覆:1
積分:0
註冊:2011-08-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-08-07 18:45:24 IP:175.181.xxx.xxx 訂閱
 不好意思...因為最近才開始學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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-08-08 05:03:49 IP:173.178.xxx.xxx 訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-08-08 07:17:43 IP:202.39.xxx.xxx 訂閱
依您的例子,應不必要使用到 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-08-10 10:38:40 IP:61.66.xxx.xxx 訂閱
小弟略懂一點來龍去賣~
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或再上來問個明白
歡迎再來龍燒賣!
------
======================
昏睡~
不昏睡~
不由昏睡~
系統時間:2024-04-19 21:25:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!