張未未
?
Access數(shù)據(jù)庫實(shí)現(xiàn)對象間數(shù)據(jù)“流動”的方法
張未未
摘 要:目前,Access課程的講授大多采取案例式或項(xiàng)目驅(qū)動式教學(xué)法。但在學(xué)生課后所完成的課程項(xiàng)目中,多數(shù)項(xiàng)目并不能真正實(shí)現(xiàn)數(shù)據(jù)庫應(yīng)用系統(tǒng)功能,依然是Access軟件中各種對象的羅列與展示,而不能將不同對象依據(jù)業(yè)務(wù)邏輯關(guān)系有機(jī)的組織起來。針對此問題,總結(jié)出了在Access對象間實(shí)現(xiàn)數(shù)據(jù)關(guān)聯(lián)與流動的方法。這些方法相對簡單,易于掌握,可以更好地幫助學(xué)生理解Access各對象的基本功能和相互關(guān)系,從而設(shè)計(jì)并實(shí)現(xiàn)出更具邏輯性、功能性和完整性的數(shù)據(jù)庫應(yīng)用系統(tǒng),達(dá)到進(jìn)一步提高案例式和項(xiàng)目驅(qū)動式教學(xué)法教學(xué)效果的目的。
關(guān)鍵詞:數(shù)據(jù)關(guān)聯(lián);數(shù)據(jù)流動;Access;中醫(yī);案例設(shè)計(jì);教學(xué)方法
ACCESS是一種關(guān)系型桌面數(shù)據(jù)庫管理系統(tǒng),由于其功能強(qiáng)大、操作簡單的特點(diǎn),受到了廣大非計(jì)算機(jī)專業(yè)人士和數(shù)據(jù)庫初學(xué)者的青睞[1]。因此,許多高校都在非計(jì)算機(jī)專業(yè)的計(jì)算機(jī)基礎(chǔ)課程中加入了Access數(shù)據(jù)庫的教學(xué)內(nèi)容部分,以助于提高學(xué)生對于計(jì)算機(jī)化數(shù)據(jù)的認(rèn)知能力,增強(qiáng)學(xué)生對于現(xiàn)實(shí)數(shù)據(jù)進(jìn)行計(jì)算機(jī)化分解、保存和處理的應(yīng)用能力,為學(xué)生將來的專業(yè)發(fā)展提供幫助[2]。
由于Access軟件包含了表、查詢、窗體、報表、宏和模塊等眾多數(shù)據(jù)庫功能對象,不僅可以實(shí)現(xiàn)數(shù)據(jù)的保存和管理等數(shù)據(jù)庫基本功能,還可以實(shí)現(xiàn)界面開發(fā)、報表打印和邏輯程序設(shè)計(jì)等應(yīng)用系統(tǒng)的開發(fā)功能。因此在教學(xué)過程中,不但要求教師講清各數(shù)據(jù)庫對象的基本功能,還要將他們放置在一個完整的數(shù)據(jù)庫應(yīng)用系統(tǒng)案例背景下,講清不同對象在應(yīng)用系統(tǒng)中的地位和作用,更重要的是講清各對象之間相互配合的使用方法[3],這樣才能使學(xué)生對Access軟件功能及數(shù)據(jù)庫系統(tǒng)有更深入的理解與認(rèn)識,并且在數(shù)據(jù)庫各對象功能的分與合之間掌握應(yīng)用系統(tǒng)的基本開發(fā)方法及應(yīng)用技能。本文以教學(xué)中所使用的Access中醫(yī)門診數(shù)據(jù)庫應(yīng)用系統(tǒng)為例,總結(jié)了以業(yè)務(wù)邏輯數(shù)據(jù)的“流動”方式來串聯(lián)各數(shù)據(jù)庫對象的幾種常用方法,并通過不同方法的使用,實(shí)現(xiàn)不同的系統(tǒng)應(yīng)用功能,以使Access教學(xué)案例的設(shè)計(jì)與實(shí)現(xiàn)更具邏輯性、功能性和完整性。
數(shù)據(jù)“流動”是一種形象的說法,是指Access數(shù)據(jù)庫各對象數(shù)據(jù)之間的相互引用而引起的數(shù)據(jù)邏輯走向。數(shù)據(jù)流動是以業(yè)務(wù)邏輯實(shí)現(xiàn)為導(dǎo)向的,是串聯(lián)Access數(shù)據(jù)庫各對象并使之相互配合使用的主線。例如:在Access中,表可以作為窗體的數(shù)據(jù)源,而窗體又可以作為表中數(shù)據(jù)顯示、添加和編輯的界面,在這其中通過數(shù)據(jù)將表和窗體兩種不同的數(shù)據(jù)庫對象串聯(lián)起來,數(shù)據(jù)在表和窗體間進(jìn)行流動,從而使表和窗體達(dá)到相互配合使用的目的。類似的例子還有表和查詢之間,查詢和窗體之間,以及表和報表之間,查詢和報表之間等[4]。這些例子所反映的都是Access數(shù)據(jù)庫中對象間最基本的數(shù)據(jù)流動方法,體現(xiàn)的是表和查詢作為窗體和報表數(shù)據(jù)源的基本功能。與之相比較,還有一些更為復(fù)雜的實(shí)現(xiàn)數(shù)據(jù)在不同對象間流動的方法,例如,窗體和窗體間數(shù)據(jù)的引用,窗體和宏對象間的數(shù)據(jù)引用等,這些方法更能體現(xiàn)數(shù)據(jù)流動的業(yè)務(wù)邏輯性,更能使應(yīng)用系統(tǒng)具有完整的業(yè)務(wù)邏輯功能,也是利用Access軟件開發(fā)數(shù)據(jù)庫應(yīng)用系統(tǒng)的優(yōu)勢與關(guān)鍵所在。本文將對這些方法通過幾個典型實(shí)例進(jìn)行重點(diǎn)闡述。
本文選取《Access2010中醫(yī)藥數(shù)據(jù)庫實(shí)例教程》一書中所使用的中醫(yī)門診數(shù)據(jù)庫作為示例數(shù)據(jù)庫,進(jìn)行了中醫(yī)門診應(yīng)用系統(tǒng)部分主要功能的案例設(shè)計(jì)與實(shí)現(xiàn),用以在教學(xué)中講述實(shí)現(xiàn)各對象間數(shù)據(jù)“流動”的主要方法。該數(shù)據(jù)庫所包含的表對象及表間關(guān)系如圖1所示[5]:

圖1 中醫(yī)門診數(shù)據(jù)庫表結(jié)構(gòu)及表間關(guān)系
從數(shù)據(jù)庫結(jié)構(gòu)中不難看出,該數(shù)據(jù)庫包含了患者在中醫(yī)門診就診過程中涉及到的主要業(yè)務(wù)數(shù)據(jù),從不同數(shù)據(jù)表所代表的實(shí)體之間相互關(guān)系可以總結(jié)出就診的主要流程,如圖2所示:

圖2 中醫(yī)門診數(shù)據(jù)庫所表示的就診流程
利用該數(shù)據(jù)庫可以實(shí)現(xiàn)患者管理、醫(yī)生管理、藥品管理、掛號管理、診治診斷和處方開具等門診應(yīng)用系統(tǒng)的主要業(yè)務(wù)功能。除此之外,由于數(shù)據(jù)庫中還包含了“Tbl密碼”表和“Tbl登錄日志”表,因此可以實(shí)現(xiàn)簡單的身份驗(yàn)證及安全性保護(hù)功能。由此設(shè)計(jì)實(shí)現(xiàn)的“中醫(yī)門診數(shù)據(jù)庫應(yīng)用系統(tǒng)”教學(xué)案例結(jié)構(gòu)如圖3所示:

圖3 中醫(yī)門診數(shù)據(jù)庫應(yīng)用系統(tǒng)結(jié)構(gòu)圖
下面將以掛號管理系統(tǒng)和登錄驗(yàn)證系統(tǒng)為例闡述實(shí)現(xiàn)不同對象間數(shù)據(jù)“流動”的3種方法。
3.1 利用窗體控件值的引用實(shí)現(xiàn)數(shù)據(jù)流動
窗體中某一控件值的引用根據(jù)不同的應(yīng)用環(huán)境有不同的書寫方法,具體可分為3種:
①引用當(dāng)前窗體中普通控件的值:“[控件名]”。
②引用當(dāng)前窗體的子窗體中的普通控件的值:“[子窗體名].[Form]![控件名]”。
③引用其他窗體(不具有主子窗體關(guān)系的獨(dú)立窗體)中控件的值:“[Forms]![窗體名]![控件名]”[6]。
而方法②和③都可以用來實(shí)現(xiàn)數(shù)據(jù)在不同對象間的流動。這里以“掛號管理系統(tǒng)”的實(shí)現(xiàn)為例,如圖4所示:

圖4 “掛號管理系統(tǒng)”操作界面
為掛號管理系統(tǒng)的操作界面,分為“掛號管理窗體”和“掛號確認(rèn)窗體”,其中“掛號管理窗體”為主/子窗體類型。
(1)就診次數(shù)的計(jì)算
對于某一患者的就診次數(shù)可以根據(jù)該患者的掛號次數(shù)來進(jìn)行統(tǒng)計(jì),利用計(jì)算機(jī)型文本框通過公式“=count([掛號ID])”便可得到相應(yīng)數(shù)據(jù)。但如果在“掛號管理窗體”的主窗體“就診次數(shù)”文本框中直接寫入該公式,則會出現(xiàn)“#錯誤”的錯誤提示。這主要是因?yàn)橹鞔绑w的數(shù)據(jù)源并不包括掛號信息數(shù)據(jù),從而導(dǎo)致公式中引用的“[掛號ID]”數(shù)據(jù)無法找到。而解決此問題的方法如圖5所示:

圖5 主/子窗體控件數(shù)據(jù)的引用
在子窗體的窗體頁腳中添加計(jì)算型文本框,完成掛號次數(shù)的統(tǒng)計(jì),然后將計(jì)算的結(jié)果引用到主窗體中進(jìn)行顯示,引用公式為“=[掛號子窗體].[Form]![就診次數(shù)]”,從而實(shí)現(xiàn)子窗體數(shù)據(jù)向主窗體數(shù)據(jù)的流動。
(2)掛號過程的實(shí)現(xiàn)
當(dāng)在“掛號管理窗體”中完成患者選擇以及科室選擇時,便可以單擊“掛號”按鈕打開“掛號確認(rèn)窗體”開始進(jìn)行掛號操作。完成掛號的過程就是將“掛號ID”、“就診日期”、“患者ID”和“醫(yī)生ID”數(shù)據(jù)通過“掛號確認(rèn)窗體”寫入“Tbl掛號”表的過程,因此“掛號確認(rèn)窗體”是以“Tbl掛號”表為記錄源的,而窗體中4個文本框分別與“Tbl掛號”表中對應(yīng)字段相綁定。其中“掛號ID”在“Tbl掛號”表中被定義為自動編號數(shù)據(jù)類型,因此在掛號過程中會由系統(tǒng)自動分配,無需人為干預(yù);“就診日期”則可采用文本框的默認(rèn)值(即當(dāng)前日期),也可選擇新的日期。但對于患者ID和醫(yī)生ID的選擇就不是隨意的了。其中患者ID的選擇必須是“掛號管理窗體”中所指定的患者,這就涉及到兩個獨(dú)立窗體間控件數(shù)據(jù)的引用問題。如圖6所示:

圖6 獨(dú)立窗體間控件數(shù)據(jù)的引用
引用的方式是在“掛號確認(rèn)窗體”中,將“患者ID”文本框的默認(rèn)值屬性設(shè)置為“=[Forms]![掛號管理]![患者ID]”,即引用“掛號管理窗體”中“患者ID”文本框的值,從而實(shí)現(xiàn)數(shù)據(jù)在兩個獨(dú)立窗體之間的流動,而這種數(shù)據(jù)的引用是符合業(yè)務(wù)邏輯的。
3.2 利用參數(shù)查詢實(shí)現(xiàn)數(shù)據(jù)流動
如3.1節(jié)所述,依據(jù)窗體間關(guān)系的不同可以選擇不同的控件值引用方式來實(shí)現(xiàn)數(shù)據(jù)在不同窗體間的流動。但有些數(shù)據(jù)的流動是要符合一些復(fù)雜的業(yè)務(wù)邏輯需求的,并不是簡單的值的引用。例如在“掛號確認(rèn)窗體”中“醫(yī)生ID”的選擇就要受到“掛號管理窗體”中所選科室的限制,即通過所選擇的科室需要先找到科室下對應(yīng)的所有醫(yī)生,而這些醫(yī)生才是可以選取的范圍。由于涉及到查詢問題,自然而然會想到利用查詢對象來完成醫(yī)生范圍的查找。
如圖7所示:

圖7 查詢實(shí)現(xiàn)窗體間數(shù)據(jù)的傳遞
“科室醫(yī)生查詢”作為參數(shù)查詢其參數(shù)值來自于“掛號管理窗體”的“科室”組合框,查詢中對于窗體控件值的引用方法為“[Forms]![窗體名]![控件名]”,與獨(dú)立窗體間控制值引用方法相同,這樣的引用實(shí)現(xiàn)了數(shù)據(jù)由窗體向查詢的流動。而查詢得到的結(jié)果將作為“掛號確認(rèn)窗體”中“醫(yī)生ID”組合框的數(shù)據(jù)來源,從而完成查詢數(shù)據(jù)向窗體的流動。這樣就通過一個中間的查詢過程,為兩個窗體之間的數(shù)據(jù)傳遞架起了一座橋梁,在數(shù)據(jù)流動的基礎(chǔ)上完成了業(yè)務(wù)邏輯的功能要求[7]。
在這個案例中,掛號單的打印也是利用參數(shù)查詢來實(shí)現(xiàn)數(shù)據(jù)由窗體向報表的傳遞的。如圖8所示:

圖8 查詢實(shí)現(xiàn)窗體與報表間數(shù)據(jù)的傳遞
當(dāng)前“掛號ID”由“掛號確認(rèn)窗體”傳遞給“掛號單查詢”,而該查詢的結(jié)果將作為“掛號單報表”的數(shù)據(jù)源被打印出來,即當(dāng)前“掛號ID”所對應(yīng)的掛號單,而不會打印出所有的掛號單。
3.3 利用宏實(shí)現(xiàn)數(shù)據(jù)流動
宏是Access中除模塊對象外功能最靈活的一種對象,特別是對于并不掌握任何程序設(shè)計(jì)語言的使用者來說,它可以在不編寫代碼的情況下,實(shí)現(xiàn)一些編程語言的復(fù)雜功能。而且宏可以對表、查詢、窗體和報表對象進(jìn)行控制與交互,從而將這些對象按照業(yè)務(wù)邏輯有效地組織起來。因此利用宏對象中所提供的豐富操作命令,也是實(shí)現(xiàn)Access不同對象間數(shù)據(jù)流動的重要方法。
以“登錄驗(yàn)證系統(tǒng)”為例,如圖9所示:

圖9 “登錄驗(yàn)證系統(tǒng)”操作界面
可以利用宏來完成“用戶名”和“密碼”的合法性與正確性驗(yàn)證功能。
具體實(shí)現(xiàn)時,可以為“登錄”按鈕添加嵌入宏,也可以新建獨(dú)立的帶有條件判斷的宏對象,然后與“登錄”按鈕的單擊事件進(jìn)行綁定[8]。宏代碼如圖10所示:

圖10 登錄驗(yàn)證過程宏代碼
注釋(1):正確的登錄用戶名和密碼已保存在“Tbl密碼”表的“醫(yī)生ID”字段和“密碼”字段中。因此驗(yàn)證的過程就是通過“Tbl密碼”表進(jìn)行比對的過程。
注釋(2):“DLookUp”函數(shù)的功能是從指定記錄集中獲取符合條件的特定字段的值,類似于SQL語言中Select語句所實(shí)現(xiàn)的功能。“Forms![登錄驗(yàn)證]![用戶名]”和“[Forms]![登錄驗(yàn)證]![密碼]”表示從“登錄驗(yàn)證”窗體的“用戶名”文本框和“密碼”文本框中獲取所輸入的值。如果用戶名或密碼驗(yàn)證錯誤后,都會通過“MessageBox”操作命令彈出錯誤提示對話框。
注釋(3):當(dāng)用戶名和密碼驗(yàn)證正確后,將關(guān)閉“登錄驗(yàn)證”窗體,打開“功能選擇”窗體從而進(jìn)入系統(tǒng),以及完成登錄日志寫入和權(quán)限分配等功能。
從宏代碼中不難看出,驗(yàn)證過程就是通過宏分別對表和窗體對象中的數(shù)據(jù)進(jìn)行取用,并進(jìn)行對比的過程。因此宏實(shí)現(xiàn)了不同對象間數(shù)據(jù)的關(guān)聯(lián)功能,達(dá)到了數(shù)據(jù)流動的目的。
3.4 各方法小結(jié)比較
上述介紹了3種實(shí)現(xiàn)數(shù)據(jù)在不同對象間“流動”的方法,比較而言,第一種方法更適合在窗體與窗體之間、窗體與查詢之間以及報表與窗體之間通過引用的方式達(dá)到數(shù)據(jù)流動的目的,實(shí)現(xiàn)起來最為簡單;第二種方法,以查詢結(jié)果作為不同對象之間數(shù)據(jù)傳遞的工具,通常會涉及3個或3個以上對象間的數(shù)據(jù)流動,這種方法實(shí)現(xiàn)的關(guān)鍵在于參數(shù)查詢的設(shè)計(jì);第三種方法,以宏操作來控制多個對象間數(shù)據(jù)的相互關(guān)聯(lián),并利用條件宏使數(shù)據(jù)流動具有更多的分支選擇,從而實(shí)現(xiàn)更為豐富的業(yè)務(wù)邏輯功能。除了以上3種方法之外,更為復(fù)雜的數(shù)據(jù)關(guān)聯(lián)功能就需要通過VBA以及ADO編程來實(shí)現(xiàn)了[9],但這種方法對于非計(jì)算機(jī)專業(yè)的學(xué)生來說掌握起來難度較大,這里不再討論。
目前,各院校Access課程的講授大多采取案例式或項(xiàng)目驅(qū)動式教學(xué)法[10],目的是在教學(xué)過程中能理論聯(lián)系實(shí)際,突出課程的應(yīng)用性和實(shí)用性,同時使學(xué)生基本掌握利用Access軟件開發(fā)小型數(shù)據(jù)庫應(yīng)用系統(tǒng)的能力。筆者在綜合分析了許多學(xué)生所完成的課程項(xiàng)目后發(fā)現(xiàn),能真正實(shí)現(xiàn)數(shù)據(jù)庫應(yīng)用系統(tǒng)功能的項(xiàng)目并不多。大多數(shù)項(xiàng)目依然是Access軟件中各種功能對象的羅列與展示,而不能將不同對象依據(jù)業(yè)務(wù)邏輯有機(jī)的組織起來。而究其原因主要是因?yàn)閷W(xué)生沒有很好地掌握不同對象間依靠數(shù)據(jù)相互關(guān)聯(lián),實(shí)現(xiàn)數(shù)據(jù)流動的方法。因此,本文通過列舉中醫(yī)門診應(yīng)用系統(tǒng)中部分功能的實(shí)現(xiàn)過程,總結(jié)了Access對象間實(shí)現(xiàn)數(shù)據(jù)流動常用的3種方法。這3種方法相對簡單,易于掌握,比較適合非計(jì)算機(jī)專業(yè)學(xué)生學(xué)習(xí)。同時,也可以用來幫助Access初學(xué)者設(shè)計(jì)并實(shí)現(xiàn)更具邏輯性、功能性和完整性的數(shù)據(jù)庫應(yīng)用系統(tǒng)。
參考文獻(xiàn)
[1] 梁華,陳振,張波.案例驅(qū)動的ACCESS程序設(shè)計(jì)教學(xué)改革[J].計(jì)算機(jī)教育,2011,(6):26-29.
[2] 王蘋,翟興.面向計(jì)算思維的中醫(yī)院校計(jì)算機(jī)基礎(chǔ)課程的教學(xué)改革探索[J].中國醫(yī)藥導(dǎo)報,2015, 12(16):69-72.
[3] 王娟.Access數(shù)據(jù)庫教學(xué)中任務(wù)的設(shè)計(jì)[J].信息技術(shù),2010,(7):168-170.
[4] 朱名勛.ACCESS數(shù)據(jù)庫案例開發(fā)教學(xué)改革研究[J].科技視界,2014,(20):73-74.
[5] 馬星光,劉仁權(quán).Access2010中醫(yī)藥數(shù)據(jù)庫實(shí)例教程[M].北京:中國中醫(yī)藥出版社,2012.
[6] 敖培,李延強(qiáng),趙四方,等.面向計(jì)算機(jī)等級考試的ACCESS數(shù)據(jù)庫綜合教學(xué)案例設(shè)計(jì)[J].生物技術(shù)世界,2015,(1):160-161.
[7] 邢為民,董衛(wèi)軍,索琦.數(shù)據(jù)庫原理與實(shí)踐(Access 2013)[M].第2版.北京:電子工業(yè)出版社,2015:250-252.
[8] 張未未,郭鳳英,韓愛慶.基于多種類型宏的Access數(shù)據(jù)庫登錄身份驗(yàn)證系統(tǒng)[J].計(jì)算機(jī)與現(xiàn)代化,2015,(5):121-126.
[9] 陶佳琦,翁正新.VB訪問Access數(shù)據(jù)庫的研究[J].微型電腦應(yīng)用,2014,30(10):14-16.
[10] 陳坤健,李海燕.“計(jì)算機(jī)基礎(chǔ)”項(xiàng)目化教學(xué)模式探索[J].中國電化教育,2012, (3):116-119.
Realization Method of Data Flow Among Objects in Access Database
Zhang Weiwei
(Information Center, Beijing University of Chinese Medicine, Beijing 100029, China)
Abstract:At present, case or project driven teaching methods are mostly used for Access course. But most of the course projects that students accomplished after class cannot really realize database application system function. All kinds of objects are listed and displayed in Access software, not organized according to the business logic relationship. This paper concludes the methods to realize data relation and data flow among objects in Access for this problem. These methods are relatively simple and easy to master. It can better help students understand the basic functions and relationships of each object in Access, so as to design and implement more logical, functional and complete database application system, which can further improve the teaching effect of case and project driven teaching methods.
Key words:Data Relation; Data Flow; Access; Chinese Medicine; Case Designing; Teaching Method
收稿日期:(2015.09.10)
作者簡介:張未未(1979-),男,北京中醫(yī)藥大學(xué),信息中心,講師,碩士,研究方向:數(shù)據(jù)庫應(yīng)用技術(shù)、辦公自動化、計(jì)算機(jī)教育,北京,100029
文章編號:1007-757X(2016)01-0073-04
中圖分類號:G642
文獻(xiàn)標(biāo)志碼:A