華琳 夏翃 劉衛(wèi) 郭永青
摘要:本文基于醫(yī)學(xué)生的數(shù)據(jù)庫語言教學(xué)要求,探討了基于Access語言的課程任務(wù)設(shè)計與實現(xiàn)。
關(guān)鍵詞:數(shù)據(jù)庫語言教學(xué);Access
中圖分類號:G434 文獻(xiàn)標(biāo)識碼:A 論文編號:1674-2117(2015)21-0128-04
隨著計算機技術(shù)的不斷發(fā)展及普及,計算機已經(jīng)成為人們工作中不可缺少的工具,與此同時,信息技術(shù)在醫(yī)院也被全面應(yīng)用,醫(yī)院信息化管理為醫(yī)院的各項業(yè)務(wù)管理帶來了極大的方便。在醫(yī)學(xué)領(lǐng)域,醫(yī)院信息管理系統(tǒng)、醫(yī)學(xué)專家系統(tǒng)、數(shù)字人體分析以及大量醫(yī)學(xué)數(shù)據(jù)分析管理等都毫不例外地是以數(shù)據(jù)庫技術(shù)為基礎(chǔ)的。
數(shù)據(jù)庫語言是高校非計算機專業(yè)計算機教學(xué)普遍開設(shè)的課程,在醫(yī)學(xué)院校開設(shè)數(shù)據(jù)庫語言是醫(yī)學(xué)生掌握計算機知識、熟悉數(shù)據(jù)庫操作最切實可行的途徑。數(shù)據(jù)庫語言Access是功能較強、易于掌握的數(shù)據(jù)庫管理軟件,也是醫(yī)學(xué)生今后工作和科研所必須掌握的一門計算機編程語言。該課程的學(xué)習(xí)以培養(yǎng)醫(yī)學(xué)生面向?qū)ο蟪绦蛟O(shè)計的理念為宗旨,通過教學(xué),從基礎(chǔ)到實踐,使學(xué)生掌握數(shù)據(jù)庫語言Access的基本功能,培養(yǎng)初步開發(fā)信息系統(tǒng)的能力,基本具備解決實際應(yīng)用問題的能力,更為培養(yǎng)醫(yī)學(xué)生具有數(shù)字技術(shù)與醫(yī)學(xué)結(jié)合的思維方式打下良好的基礎(chǔ)。
Microsoft公司開發(fā)的數(shù)據(jù)庫管理系統(tǒng)軟件Access作為Office的重要組件之一,是一個面向?qū)ο蟮摹⒉捎檬录?qū)動的關(guān)系型數(shù)據(jù)庫環(huán)境。Access在關(guān)系數(shù)據(jù)模型的理論基礎(chǔ)上結(jié)合了先進(jìn)的面向?qū)ο笏枷?,同時提供了大量適用于面向?qū)ο箝_發(fā)思想和方法的各種軟件工具,為用戶開發(fā)基于Windows環(huán)境的數(shù)據(jù)庫應(yīng)用軟件系統(tǒng)創(chuàng)造了條件。本課程所采用的數(shù)據(jù)庫系統(tǒng)是Access2010。
系統(tǒng)結(jié)構(gòu)與設(shè)計
教育模式是“做中學(xué)”和“基于項目教育和學(xué)習(xí)”的集中概括和抽象表達(dá),按照學(xué)科交叉滲透、理論結(jié)合實踐的教學(xué)理念,按照“基礎(chǔ)知識—應(yīng)用提高—能力創(chuàng)新”三個階段來改善學(xué)生的學(xué)習(xí)效果,提高學(xué)生的學(xué)習(xí)能力。所以,我們采用項目開發(fā)為任務(wù),具體實現(xiàn)要手段的方式來綜合學(xué)習(xí)Access。
1.確定所需要的表
本系統(tǒng)有4個實體,即醫(yī)生、患者、床位和住院管理信息。系統(tǒng)的維護(hù)需要明確使用者的身份,因此,在系統(tǒng)登錄時對使用者要進(jìn)行身份的確認(rèn),通過一個表來存儲系統(tǒng)所有的用戶名及密碼。
2.確定表的結(jié)構(gòu)及主鍵
關(guān)系模型如下:①醫(yī)生(編號、姓名、性別、出生日期、職稱、所屬科室、擅長診斷、個人簡介),見表1。②患者(病歷號、姓名、性別、出生日期、身份證號、聯(lián)系方式、病史),見下頁表2。③床位(床位號、類別、所屬科室名、說明),見下頁表3。④出入院信息(編號、主管醫(yī)生編號、患者病歷號、床位號、住院日期、出院日期、病由),見下頁表4。
3. 轉(zhuǎn)換并規(guī)范
將E-R圖轉(zhuǎn)換成關(guān)系模型并對關(guān)系模式進(jìn)行規(guī)范化,至少達(dá)到3NF。醫(yī)院住院管理信息系統(tǒng)E-R圖如圖1所示。
4.功能模塊
根據(jù)需求分析,系統(tǒng)功能設(shè)計包括以下特點,即分層管理、業(yè)務(wù)功能模塊化管理、業(yè)務(wù)流程嚴(yán)格控制等。
住院管理信息系統(tǒng)主要由兩大功能模塊構(gòu)成。一類功能模塊是基于基本信息管理,包括醫(yī)生基本信息管理模塊、患者基本信息管理模塊和床位基本信息管理模塊,另一類是基于出入院登記管理,包括入院登記管理、出院登記管理和住院情況統(tǒng)計。系統(tǒng)功能模塊如圖2所示。
關(guān)鍵技術(shù)舉例
雖然Access的六大對象為表、窗體、查詢、報表、宏和模塊(VBA編程),有些簡單的功能可以通過向?qū)е苯油瓿?,但是有些?shù)據(jù)關(guān)聯(lián)著比較復(fù)雜的功能,就需要借助VBA代碼實現(xiàn)。本文以“入院登記”窗體實現(xiàn)為例。
“入院登記”窗體的操作過程是:打開窗體后可看到患者的信息,通過“患者信息區(qū)域”的記錄選擇器可以查看第一條/上一條/下一條/最后一條記錄,通過“查找患者”可以找到相應(yīng)的患者。找到患者后最下面的“住院信息”子窗體中會顯示該患者以往的住院記錄,如“住院日期”有值,而“出院日期”沒有值,則說明該患者已住院,不能再辦理入院手續(xù)了。
如患者沒有正在住院,在“1.選擇科室”的列表中選擇科室后,系統(tǒng)就會將該科室的出診醫(yī)生和空閑床位分別顯示在對應(yīng)的列表框中。單擊選擇醫(yī)生和空閑床位后,這時“生成入院信息”的按鈕才被激活。填寫“住院病由”后,單擊“生成入院信息”按鈕,則可以辦理該患者的住院手續(xù),下方的“住院信息”子窗體里會顯示當(dāng)前加入的住院記錄,此時“住院日期”為當(dāng)前日期及時間,而“出院日期”為空?!叭朐旱怯洝钡倪\行界面如圖3所示。
1.技術(shù)要點分析
(1)選擇科室后,要自動顯示“醫(yī)生”和“空床位”列表信息。建立自動關(guān)聯(lián)是一技術(shù)要點。
(2)“醫(yī)生”和“空床位”兩個列表信息,采用了多列方式來展示相關(guān)信息。多列的列表的賦值和讀取是一難點。
(3)只有“醫(yī)生”和“空床位”兩個列表都進(jìn)行了選擇后,“生成入院信息”的按鈕才被激活。要記錄這兩個列表的選擇狀態(tài),就要采用全局變量來做標(biāo)志。
(4)從界面上獲取患者的HID、醫(yī)生的DID、床位的CID和病由后,將相關(guān)信息添加到“住院”表中,并刷新界面,從而最終完成入院登記。
(5)數(shù)據(jù)庫操作前,先要進(jìn)行連接,操作完成后要釋放數(shù)據(jù)庫連接。
2.關(guān)鍵技術(shù)的VBA代碼實現(xiàn)
(1)“查看信息”按鈕單擊事件中的VBA代碼。
Private Sub ckxx_Click()
'--進(jìn)行列表框初始化--
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
'--關(guān)閉數(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 '準(zhǔn)備添加新記錄
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 '--關(guān)閉數(shù)據(jù)庫連接--
con.Close
Set rs = Nothing
Set con = Nothing
End Sub
結(jié)論
數(shù)據(jù)庫在現(xiàn)今各領(lǐng)域中都是必不可少的基礎(chǔ)工具,數(shù)據(jù)庫的高效便捷也是管理龐大數(shù)據(jù)的一大優(yōu)勢。數(shù)據(jù)庫的學(xué)習(xí)與建立在一定程度上讓醫(yī)學(xué)生掌握了基本的數(shù)據(jù)庫設(shè)計與實現(xiàn)的具體方法,為將來在醫(yī)療衛(wèi)生崗位上的工作打下了堅實的基礎(chǔ)。