華琳 夏翃 劉衛(wèi) 郭永青
摘要:本文基于醫(yī)學生的數(shù)據(jù)庫語言教學要求,探討了基于Access語言的課程任務設計與實現(xiàn)。
關鍵詞:數(shù)據(jù)庫語言教學;Access
中圖分類號:G434 文獻標識碼:A 論文編號:1674-2117(2015)21-0128-04
隨著計算機技術的不斷發(fā)展及普及,計算機已經成為人們工作中不可缺少的工具,與此同時,信息技術在醫(yī)院也被全面應用,醫(yī)院信息化管理為醫(yī)院的各項業(yè)務管理帶來了極大的方便。在醫(yī)學領域,醫(yī)院信息管理系統(tǒng)、醫(yī)學專家系統(tǒng)、數(shù)字人體分析以及大量醫(yī)學數(shù)據(jù)分析管理等都毫不例外地是以數(shù)據(jù)庫技術為基礎的。
數(shù)據(jù)庫語言是高校非計算機專業(yè)計算機教學普遍開設的課程,在醫(yī)學院校開設數(shù)據(jù)庫語言是醫(yī)學生掌握計算機知識、熟悉數(shù)據(jù)庫操作最切實可行的途徑。數(shù)據(jù)庫語言Access是功能較強、易于掌握的數(shù)據(jù)庫管理軟件,也是醫(yī)學生今后工作和科研所必須掌握的一門計算機編程語言。該課程的學習以培養(yǎng)醫(yī)學生面向對象程序設計的理念為宗旨,通過教學,從基礎到實踐,使學生掌握數(shù)據(jù)庫語言Access的基本功能,培養(yǎng)初步開發(fā)信息系統(tǒng)的能力,基本具備解決實際應用問題的能力,更為培養(yǎng)醫(yī)學生具有數(shù)字技術與醫(yī)學結合的思維方式打下良好的基礎。
Microsoft公司開發(fā)的數(shù)據(jù)庫管理系統(tǒng)軟件Access作為Office的重要組件之一,是一個面向對象的、采用事件驅動的關系型數(shù)據(jù)庫環(huán)境。Access在關系數(shù)據(jù)模型的理論基礎上結合了先進的面向對象思想,同時提供了大量適用于面向對象開發(fā)思想和方法的各種軟件工具,為用戶開發(fā)基于Windows環(huán)境的數(shù)據(jù)庫應用軟件系統(tǒng)創(chuàng)造了條件。本課程所采用的數(shù)據(jù)庫系統(tǒng)是Access2010。
系統(tǒng)結構與設計
教育模式是“做中學”和“基于項目教育和學習”的集中概括和抽象表達,按照學科交叉滲透、理論結合實踐的教學理念,按照“基礎知識—應用提高—能力創(chuàng)新”三個階段來改善學生的學習效果,提高學生的學習能力。所以,我們采用項目開發(fā)為任務,具體實現(xiàn)要手段的方式來綜合學習Access。
1.確定所需要的表
本系統(tǒng)有4個實體,即醫(yī)生、患者、床位和住院管理信息。系統(tǒng)的維護需要明確使用者的身份,因此,在系統(tǒng)登錄時對使用者要進行身份的確認,通過一個表來存儲系統(tǒng)所有的用戶名及密碼。
2.確定表的結構及主鍵
關系模型如下:①醫(yī)生(編號、姓名、性別、出生日期、職稱、所屬科室、擅長診斷、個人簡介),見表1。②患者(病歷號、姓名、性別、出生日期、身份證號、聯(lián)系方式、病史),見下頁表2。③床位(床位號、類別、所屬科室名、說明),見下頁表3。④出入院信息(編號、主管醫(yī)生編號、患者病歷號、床位號、住院日期、出院日期、病由),見下頁表4。
3. 轉換并規(guī)范
將E-R圖轉換成關系模型并對關系模式進行規(guī)范化,至少達到3NF。醫(yī)院住院管理信息系統(tǒng)E-R圖如圖1所示。
4.功能模塊
根據(jù)需求分析,系統(tǒng)功能設計包括以下特點,即分層管理、業(yè)務功能模塊化管理、業(yè)務流程嚴格控制等。
住院管理信息系統(tǒng)主要由兩大功能模塊構成。一類功能模塊是基于基本信息管理,包括醫(yī)生基本信息管理模塊、患者基本信息管理模塊和床位基本信息管理模塊,另一類是基于出入院登記管理,包括入院登記管理、出院登記管理和住院情況統(tǒng)計。系統(tǒng)功能模塊如圖2所示。
關鍵技術舉例
雖然Access的六大對象為表、窗體、查詢、報表、宏和模塊(VBA編程),有些簡單的功能可以通過向導直接完成,但是有些數(shù)據(jù)關聯(lián)著比較復雜的功能,就需要借助VBA代碼實現(xiàn)。本文以“入院登記”窗體實現(xiàn)為例。
“入院登記”窗體的操作過程是:打開窗體后可看到患者的信息,通過“患者信息區(qū)域”的記錄選擇器可以查看第一條/上一條/下一條/最后一條記錄,通過“查找患者”可以找到相應的患者。找到患者后最下面的“住院信息”子窗體中會顯示該患者以往的住院記錄,如“住院日期”有值,而“出院日期”沒有值,則說明該患者已住院,不能再辦理入院手續(xù)了。
如患者沒有正在住院,在“1.選擇科室”的列表中選擇科室后,系統(tǒng)就會將該科室的出診醫(yī)生和空閑床位分別顯示在對應的列表框中。單擊選擇醫(yī)生和空閑床位后,這時“生成入院信息”的按鈕才被激活。填寫“住院病由”后,單擊“生成入院信息”按鈕,則可以辦理該患者的住院手續(xù),下方的“住院信息”子窗體里會顯示當前加入的住院記錄,此時“住院日期”為當前日期及時間,而“出院日期”為空。“入院登記”的運行界面如圖3所示。
1.技術要點分析
(1)選擇科室后,要自動顯示“醫(yī)生”和“空床位”列表信息。建立自動關聯(lián)是一技術要點。
(2)“醫(yī)生”和“空床位”兩個列表信息,采用了多列方式來展示相關信息。多列的列表的賦值和讀取是一難點。
(3)只有“醫(yī)生”和“空床位”兩個列表都進行了選擇后,“生成入院信息”的按鈕才被激活。要記錄這兩個列表的選擇狀態(tài),就要采用全局變量來做標志。
(4)從界面上獲取患者的HID、醫(yī)生的DID、床位的CID和病由后,將相關信息添加到“住院”表中,并刷新界面,從而最終完成入院登記。
(5)數(shù)據(jù)庫操作前,先要進行連接,操作完成后要釋放數(shù)據(jù)庫連接。
2.關鍵技術的VBA代碼實現(xiàn)
(1)“查看信息”按鈕單擊事件中的VBA代碼。
Private Sub ckxx_Click()
'--進行列表框初始化--
Me.ys.ColumnCount = 3
Me.cw.ColumnCount = 2
For i = 0 To Me.ys.ListCount - 1
Me.ys.RemoveItem (0)
Next i
For i = 0 To Me.cw.ListCount - 1
Me.cw.RemoveItem (0)
Next i
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim fiel As ADODB.Field
Dim strsql, a, b, c, d As String
'--建立數(shù)據(jù)庫連接--
Set con = CurrentProject.Connection
Set rs = New ADODB.Recordset
'-- 將符合條件的醫(yī)生信息加入列表框 --
strsql = "select * from 醫(yī)生 where 所屬科室='" & Me.keshi & "' "
rs.Open strsql, CurrentProject.AccessConnection, adOpenKeyset
If rs.EOF Then
MsgBox "此類型號源已用完"
Me.keshi.SetFocus
Else
rs.MoveFirst
Do While Not rs.EOF
a = rs("DID")
b = rs("姓名")
c = rs("職稱")
d = a & ", " & b & ", " & c '將符合條件的醫(yī)生姓名加入列表框
ys.AddItem d
rs.MoveNext
Loop
End If
'-- 將符合條件的空床位名加入列表框 --
rs.Close
Set rs = Nothing
strsql = "(SELECT 床位.CID, 類別 FROM 床位, 住院 WHERE 床位.CID=住院.CID and 出院日期<=now() and 所屬科室='" & Me.keshi & "' ) UNION (SELECT CID, 類別 FROM 床位 WHERE 所屬科室='" & Me.keshi & "' and CID not in (select CID from 住院)) "
'MsgBox ("strsql=") & strsql
rs.Open strsql, CurrentProject.AccessConnection, adOpenKeyset
If rs.EOF Then
MsgBox "無空床位"
Me.keshi.SetFocus
Else
rs.MoveFirst
Do While Not rs.EOF
a = rs("CID")
b = rs("類別")
d = a & ", " & b '將符合條件的醫(yī)生姓名加入列表框
cw.AddItem d
rs.MoveNext
Loop
End If
'--關閉數(shù)據(jù)庫連接--
rs.Close
con.Close
Set rs = Nothing
Set con = Nothing
End Sub
(2)“生成入院信息”按鈕單擊事件中的VBA代碼。
Private Sub ruyuan_Click()
If IsNull(Me.bingyou) Or Me.bingyou = "" Then
DoCmd.Beep
MsgBox "請輸入入院病由!"
Me.bingyou.SetFocus
Exit Sub
End If
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
'--建立數(shù)據(jù)庫連接--
Set con = CurrentProject.Connection
Set rs = New ADODB.Recordset
Dim strsql As String
strsql = "select * from 住院"
rs.Open strsql, CurrentProject.AccessConnection, adOpenKeyset, adLockOptimistic, adCmdText
'--添加新記錄--
rs.AddNew '準備添加新記錄
rs("HID") = Me.HID
rs("DID") = Me.ys.ItemData(Me.ys.ListIndex)
rs("CID") = Me.cw.Column(0)
rs("住院日期") = Now
rs("病由") = Me.bingyou
rs.Update '記錄集更新
Me.Refresh '--刷新窗體--
rs.Close '--關閉數(shù)據(jù)庫連接--
con.Close
Set rs = Nothing
Set con = Nothing
End Sub
結論
數(shù)據(jù)庫在現(xiàn)今各領域中都是必不可少的基礎工具,數(shù)據(jù)庫的高效便捷也是管理龐大數(shù)據(jù)的一大優(yōu)勢。數(shù)據(jù)庫的學習與建立在一定程度上讓醫(yī)學生掌握了基本的數(shù)據(jù)庫設計與實現(xiàn)的具體方法,為將來在醫(yī)療衛(wèi)生崗位上的工作打下了堅實的基礎。