第六章 系統製作
6.2 前端之應用程式製作 前端
7.mno 預存程序
CREATE PROCEDURE mno
@num datetime, @num1 varchar(10), @num2 varchar(10), @num3 integer
AS
select m_no from painting
where( @num = see_date ) and (@num1 = dep_name) and (@num2 = doctor_name) and (@num3 = paint_no)
GO
此預存程序從 painting 資了表中找出某一病人的藥單編號。
8.register 預存程序
CREATE PROCEDURE register
@num datetime, @num1 varchar(6), @num2 varchar(10), @num3 integer output
AS
select @num3 = max(see_no) from take
where (see_date = @num) and (block_time = @num1) and (dep_name =
@num2)
建立新專案
圖 6-3 建立新專案
如上圖所示,首先我們先要建立一個新專案,順序為開始→程式 集→Microsoft Visual Basic 6.0→Microsoft Visual Basic 6.0→選擇 Data Environment 專案。
建立主選單
圖 6-4 系統功能階層圖
圖 6-4 為系統功能階層圖,根據此圖來建立主選單,在專案視窗中→
選擇工具→選擇功能表編輯器,結果如圖 6-5:
圖 6-5 功能編輯器
標題鍵入掛號作業,名稱隨自己命名的方式,在此取名為 cust,按照 此原則依序建立診斷治療作業、員工管理、報表列印、系統維護,所 的結果如圖 6-6:
圖 6-6 編輯結果 建立 Form
根據系統功能階層圖,有掛號作業(病患資料管理、掛號)、診
斷治療作業(診斷資料維護)、員工管理(門診時間表管理、員工資 料維護)、報表列印(病患名冊、掛號清單)、系統維護,每一個功 能就是一個 Form,也就是一個視窗。
在系統設計階段提過使用者介面控制項,現在建立 Form 時正好 派上用場,使用的控制項有 textbox、 label、 combobox、datagrid 、 listbox、command button、option button。
1.門診時間表管理 Form,如圖 6-7:
圖 6-7 門診時間表管理 Form 2.員工資料維護 Form,如圖 6-8:
圖 6-8 員工資料維護 Form 3.掛號 Form,如圖 6-9:
圖 6-9 掛號 Form 4. 診斷治療 Form,如圖 6-10:
圖 6-10 診斷治療 Form 與資料庫中各資料表相連
在專案總管視窗中,點選設計師→點選 DataEnvironment1
圖 6-11 專案總管視窗
圖 6-12 點選 DataEnvironment1 之後畫面
圖 6-12 為點選之後出現的畫面,游標停在 connection1 按下滑屬右鍵
→屬性,如圖 6-13 所示:
圖 6-13 選擇資料庫引擎
提供者選擇 Microsoft OLE DB Provider for SQL Server,因為資料庫系 統是用 SQL Server,按下一步,出現如圖 6-14:
圖 6-14 選擇資料庫
此時鍵入資料庫伺服器名稱,再選擇所要連線的資料庫,按下測試連 線,沒問題則會顯示連線成功。
接 著 在 connection1 按下滑鼠右鍵→ 新增指令,此時會出現 command1,游標移至 command1 按下滑屬右鍵→屬性,出現如圖 6-15
所示:
Dim cn As New ADODB.Connection Dim rs1 As New ADODB.Recordset
Set cn = DataEnvironment1.Connection1 Set rs1 = DataEnvironment1.rsCommand1
rs1.Open "select * from take" , cn, adOpenDynamic, adLockOptimistic 第一行宣告 cn 是一個 connection 物件,第二行宣告 rs1 為 recordset
一個資料集。
第三行把 connection 物件指定為 cn,第四行 rsCommand1 即整個 take 資料表集指定為 rs1。
第五行使用 open 方法來開啟 recordset 資料表,其中 select * from take 是 SQL 語法,用" "包住這就是前面所說把 SQL 語法嵌入到應用程式 中。
adOpenDynamic 這是設定游標的型態(cursor type),可使 recordset 新增、修改、移動,cursor 是指向第幾筆資料。adLockOptimistic 主 要是預防多人同時做相同的動作如新增、修改、刪除時,必須要鎖定,
cn.BeginTrans
DataEnvironment1.rsCommand1.AddNew :
:
DataEnvironment1.rsCommand1.Update cn.CommitTrans
rs1.AddNew 表示新增一筆資料,BeginTrans 表示異動開始但暫不寫 入資料庫,直到 CommitTrans 才更新資料庫。
rs1.Update 表示修改資料表 cn.BeginTrans
DataEnvironment1.rsCommand1.Delete :
:
cn.CommitTrans
rs.Delete 表示刪除一筆記錄。
如何呼叫預存程序
在前端的應用程式中要如何呼叫後端的預存程序,這點滿重要 的,下面為 register 預存程序:
CREATE PROCEDURE register
@num datetime, @num1 varchar(6), @num2 varchar(10), @num3 integer output
AS
select @num3 = max(see_no) from take
where (see_date = @num) and (block_time = @num1) and (dep_name =
@num2) GO
前端應用程式呼叫預存程序 register 程式碼:
Dim cn As New ADODB.Connection
Dim cmd1 As ADODB.Command Dim param1 As ADODB.Parameter Set cmd1 = New ADODB.Command With cmd1
cmd1.CommandText = "register"
cmd1.CommandType = adCmdStoredProc
cmd1.ActiveConnection = DataEnvironment2.Connection1 Set param1 = New ADODB.Parameter
param1.Name = "@num"
param1.Type = adDate
param1.Value = DateSerial(Year(Date), Text1(3), Text1(4)) param1.Direction = adParamInput
cmd1.Parameters.Append param1 Set param1 = New ADODB.Parameter param1.Name = "@num1"
param1.Type = adVarChar param1.Size = 6
param1.Value = DataCombo1(1).Text param1.Direction = adParamInput cmd1.Parameters.Append param1 Set param1 = New ADODB.Parameter param1.Name = "@num2"
param1.Type = adVarChar param1.Size = 10
param1.Value = DataCombo1(0).Text param1.Direction = adParamInput cmd1.Parameters.Append param1 Set param1 = New ADODB.Parameter param1.Name = "@num3"
param1.Type = adInteger
param1.Direction = adParamOutput cmd1.Parameters.Append param1
cmd1.Execute
最前面三行宣告 cn為 connection物件,cmd1 為 command 物件,param1 是一個參數。
第四行把 command 物件指定給 cmd1
第 六 行 cmd1.CommandText = "register" 呼 叫 預 存 程 序 的 名 稱 為 register , 第 七 行 cmd1.CommandType = adCmdStoredProc 說 明 command 物件型態為一預存程序,第八行 cmd1.ActiveConnection = DataEnvironment2.Connection1 只連線的方式。
第九行 Set param1 = New ADODB.Parameter 把參數指定為 param1 第 十 行 param1.Name = "@num" 第 一 個 參 數 的 名 稱 , 第 十 一 行 param1.Type = adDate 只 參 數 的 資 料 型 態 為 一 日 期 , 第 十 二 行 param1.Value = DateSerial(Year(Date), Text1(3), Text1(4))所要傳入的 參數值,第十三行 param1.Direction = adParamInput 只這個參數為輸 入值。以此方式,後面幾個參數的寫法也是按照這種格式依樣畫葫蘆。