张未未
Access数据库实现对象间数据“流动”的方法
张未未
摘 要:目前,Access课程的讲授大多采取案例式或项目驱动式教学法。但在学生课后所完成的课程项目中,多数项目并不能真正实现数据库应用系统功能,依然是Access软件中各种对象的罗列与展示,而不能将不同对象依据业务逻辑关系有机的组织起来。针对此问题,总结出了在Access对象间实现数据关联与流动的方法。这些方法相对简单,易于掌握,可以更好地帮助学生理解Access各对象的基本功能和相互关系,从而设计并实现出更具逻辑性、功能性和完整性的数据库应用系统,达到进一步提高案例式和项目驱动式教学法教学效果的目的。
关键词:数据关联;数据流动;Access;中医;案例设计;教学方法
ACCESS是一种关系型桌面数据库管理系统,由于其功能强大、操作简单的特点,受到了广大非计算机专业人士和数据库初学者的青睐[1]。因此,许多高校都在非计算机专业的计算机基础课程中加入了Access数据库的教学内容部分,以助于提高学生对于计算机化数据的认知能力,增强学生对于现实数据进行计算机化分解、保存和处理的应用能力,为学生将来的专业发展提供帮助[2]。
由于Access软件包含了表、查询、窗体、报表、宏和模块等众多数据库功能对象,不仅可以实现数据的保存和管理等数据库基本功能,还可以实现界面开发、报表打印和逻辑程序设计等应用系统的开发功能。因此在教学过程中,不但要求教师讲清各数据库对象的基本功能,还要将他们放置在一个完整的数据库应用系统案例背景下,讲清不同对象在应用系统中的地位和作用,更重要的是讲清各对象之间相互配合的使用方法[3],这样才能使学生对Access软件功能及数据库系统有更深入的理解与认识,并且在数据库各对象功能的分与合之间掌握应用系统的基本开发方法及应用技能。本文以教学中所使用的Access中医门诊数据库应用系统为例,总结了以业务逻辑数据的“流动”方式来串联各数据库对象的几种常用方法,并通过不同方法的使用,实现不同的系统应用功能,以使Access教学案例的设计与实现更具逻辑性、功能性和完整性。
数据“流动”是一种形象的说法,是指Access数据库各对象数据之间的相互引用而引起的数据逻辑走向。数据流动是以业务逻辑实现为导向的,是串联Access数据库各对象并使之相互配合使用的主线。例如:在Access中,表可以作为窗体的数据源,而窗体又可以作为表中数据显示、添加和编辑的界面,在这其中通过数据将表和窗体两种不同的数据库对象串联起来,数据在表和窗体间进行流动,从而使表和窗体达到相互配合使用的目的。类似的例子还有表和查询之间,查询和窗体之间,以及表和报表之间,查询和报表之间等[4]。这些例子所反映的都是Access数据库中对象间最基本的数据流动方法,体现的是表和查询作为窗体和报表数据源的基本功能。与之相比较,还有一些更为复杂的实现数据在不同对象间流动的方法,例如,窗体和窗体间数据的引用,窗体和宏对象间的数据引用等,这些方法更能体现数据流动的业务逻辑性,更能使应用系统具有完整的业务逻辑功能,也是利用Access软件开发数据库应用系统的优势与关键所在。本文将对这些方法通过几个典型实例进行重点阐述。
本文选取《Access2010中医药数据库实例教程》一书中所使用的中医门诊数据库作为示例数据库,进行了中医门诊应用系统部分主要功能的案例设计与实现,用以在教学中讲述实现各对象间数据“流动”的主要方法。该数据库所包含的表对象及表间关系如图1所示[5]:
图1 中医门诊数据库表结构及表间关系
从数据库结构中不难看出,该数据库包含了患者在中医门诊就诊过程中涉及到的主要业务数据,从不同数据表所代表的实体之间相互关系可以总结出就诊的主要流程,如图2所示:
图2 中医门诊数据库所表示的就诊流程
利用该数据库可以实现患者管理、医生管理、药品管理、挂号管理、诊治诊断和处方开具等门诊应用系统的主要业务功能。除此之外,由于数据库中还包含了“Tbl密码”表和“Tbl登录日志”表,因此可以实现简单的身份验证及安全性保护功能。由此设计实现的“中医门诊数据库应用系统”教学案例结构如图3所示:
图3 中医门诊数据库应用系统结构图
下面将以挂号管理系统和登录验证系统为例阐述实现不同对象间数据“流动”的3种方法。
3.1 利用窗体控件值的引用实现数据流动
窗体中某一控件值的引用根据不同的应用环境有不同的书写方法,具体可分为3种:
①引用当前窗体中普通控件的值:“[控件名]”。
②引用当前窗体的子窗体中的普通控件的值:“[子窗体名].[Form]![控件名]”。
③引用其他窗体(不具有主子窗体关系的独立窗体)中控件的值:“[Forms]![窗体名]![控件名]”[6]。
而方法②和③都可以用来实现数据在不同对象间的流动。这里以“挂号管理系统”的实现为例,如图4所示:
图4 “挂号管理系统”操作界面
为挂号管理系统的操作界面,分为“挂号管理窗体”和“挂号确认窗体”,其中“挂号管理窗体”为主/子窗体类型。
(1)就诊次数的计算
对于某一患者的就诊次数可以根据该患者的挂号次数来进行统计,利用计算机型文本框通过公式“=count([挂号ID])”便可得到相应数据。但如果在“挂号管理窗体”的主窗体“就诊次数”文本框中直接写入该公式,则会出现“#错误”的错误提示。这主要是因为主窗体的数据源并不包括挂号信息数据,从而导致公式中引用的“[挂号ID]”数据无法找到。而解决此问题的方法如图5所示:
图5 主/子窗体控件数据的引用
在子窗体的窗体页脚中添加计算型文本框,完成挂号次数的统计,然后将计算的结果引用到主窗体中进行显示,引用公式为“=[挂号子窗体].[Form]![就诊次数]”,从而实现子窗体数据向主窗体数据的流动。
(2)挂号过程的实现
当在“挂号管理窗体”中完成患者选择以及科室选择时,便可以单击“挂号”按钮打开“挂号确认窗体”开始进行挂号操作。完成挂号的过程就是将“挂号ID”、“就诊日期”、“患者ID”和“医生ID”数据通过“挂号确认窗体”写入“Tbl挂号”表的过程,因此“挂号确认窗体”是以“Tbl挂号”表为记录源的,而窗体中4个文本框分别与“Tbl挂号”表中对应字段相绑定。其中“挂号ID”在“Tbl挂号”表中被定义为自动编号数据类型,因此在挂号过程中会由系统自动分配,无需人为干预;“就诊日期”则可采用文本框的默认值(即当前日期),也可选择新的日期。但对于患者ID和医生ID的选择就不是随意的了。其中患者ID的选择必须是“挂号管理窗体”中所指定的患者,这就涉及到两个独立窗体间控件数据的引用问题。如图6所示:
图6 独立窗体间控件数据的引用
引用的方式是在“挂号确认窗体”中,将“患者ID”文本框的默认值属性设置为“=[Forms]![挂号管理]![患者ID]”,即引用“挂号管理窗体”中“患者ID”文本框的值,从而实现数据在两个独立窗体之间的流动,而这种数据的引用是符合业务逻辑的。
3.2 利用参数查询实现数据流动
如3.1节所述,依据窗体间关系的不同可以选择不同的控件值引用方式来实现数据在不同窗体间的流动。但有些数据的流动是要符合一些复杂的业务逻辑需求的,并不是简单的值的引用。例如在“挂号确认窗体”中“医生ID”的选择就要受到“挂号管理窗体”中所选科室的限制,即通过所选择的科室需要先找到科室下对应的所有医生,而这些医生才是可以选取的范围。由于涉及到查询问题,自然而然会想到利用查询对象来完成医生范围的查找。
如图7所示:
图7 查询实现窗体间数据的传递
“科室医生查询”作为参数查询其参数值来自于“挂号管理窗体”的“科室”组合框,查询中对于窗体控件值的引用方法为“[Forms]![窗体名]![控件名]”,与独立窗体间控制值引用方法相同,这样的引用实现了数据由窗体向查询的流动。而查询得到的结果将作为“挂号确认窗体”中“医生ID”组合框的数据来源,从而完成查询数据向窗体的流动。这样就通过一个中间的查询过程,为两个窗体之间的数据传递架起了一座桥梁,在数据流动的基础上完成了业务逻辑的功能要求[7]。
在这个案例中,挂号单的打印也是利用参数查询来实现数据由窗体向报表的传递的。如图8所示:
图8 查询实现窗体与报表间数据的传递
当前“挂号ID”由“挂号确认窗体”传递给“挂号单查询”,而该查询的结果将作为“挂号单报表”的数据源被打印出来,即当前“挂号ID”所对应的挂号单,而不会打印出所有的挂号单。
3.3 利用宏实现数据流动
宏是Access中除模块对象外功能最灵活的一种对象,特别是对于并不掌握任何程序设计语言的使用者来说,它可以在不编写代码的情况下,实现一些编程语言的复杂功能。而且宏可以对表、查询、窗体和报表对象进行控制与交互,从而将这些对象按照业务逻辑有效地组织起来。因此利用宏对象中所提供的丰富操作命令,也是实现Access不同对象间数据流动的重要方法。
以“登录验证系统”为例,如图9所示:
图9 “登录验证系统”操作界面
可以利用宏来完成“用户名”和“密码”的合法性与正确性验证功能。
具体实现时,可以为“登录”按钮添加嵌入宏,也可以新建独立的带有条件判断的宏对象,然后与“登录”按钮的单击事件进行绑定[8]。宏代码如图10所示:
图10 登录验证过程宏代码
注释(1):正确的登录用户名和密码已保存在“Tbl密码”表的“医生ID”字段和“密码”字段中。因此验证的过程就是通过“Tbl密码”表进行比对的过程。
注释(2):“DLookUp”函数的功能是从指定记录集中获取符合条件的特定字段的值,类似于SQL语言中Select语句所实现的功能。“Forms![登录验证]![用户名]”和“[Forms]![登录验证]![密码]”表示从“登录验证”窗体的“用户名”文本框和“密码”文本框中获取所输入的值。如果用户名或密码验证错误后,都会通过“MessageBox”操作命令弹出错误提示对话框。
注释(3):当用户名和密码验证正确后,将关闭“登录验证”窗体,打开“功能选择”窗体从而进入系统,以及完成登录日志写入和权限分配等功能。
从宏代码中不难看出,验证过程就是通过宏分别对表和窗体对象中的数据进行取用,并进行对比的过程。因此宏实现了不同对象间数据的关联功能,达到了数据流动的目的。
3.4 各方法小结比较
上述介绍了3种实现数据在不同对象间“流动”的方法,比较而言,第一种方法更适合在窗体与窗体之间、窗体与查询之间以及报表与窗体之间通过引用的方式达到数据流动的目的,实现起来最为简单;第二种方法,以查询结果作为不同对象之间数据传递的工具,通常会涉及3个或3个以上对象间的数据流动,这种方法实现的关键在于参数查询的设计;第三种方法,以宏操作来控制多个对象间数据的相互关联,并利用条件宏使数据流动具有更多的分支选择,从而实现更为丰富的业务逻辑功能。除了以上3种方法之外,更为复杂的数据关联功能就需要通过VBA以及ADO编程来实现了[9],但这种方法对于非计算机专业的学生来说掌握起来难度较大,这里不再讨论。
目前,各院校Access课程的讲授大多采取案例式或项目驱动式教学法[10],目的是在教学过程中能理论联系实际,突出课程的应用性和实用性,同时使学生基本掌握利用Access软件开发小型数据库应用系统的能力。笔者在综合分析了许多学生所完成的课程项目后发现,能真正实现数据库应用系统功能的项目并不多。大多数项目依然是Access软件中各种功能对象的罗列与展示,而不能将不同对象依据业务逻辑有机的组织起来。而究其原因主要是因为学生没有很好地掌握不同对象间依靠数据相互关联,实现数据流动的方法。因此,本文通过列举中医门诊应用系统中部分功能的实现过程,总结了Access对象间实现数据流动常用的3种方法。这3种方法相对简单,易于掌握,比较适合非计算机专业学生学习。同时,也可以用来帮助Access初学者设计并实现更具逻辑性、功能性和完整性的数据库应用系统。
参考文献
[1] 梁华,陈振,张波.案例驱动的ACCESS程序设计教学改革[J].计算机教育,2011,(6):26-29.
[2] 王苹,翟兴.面向计算思维的中医院校计算机基础课程的教学改革探索[J].中国医药导报,2015, 12(16):69-72.
[3] 王娟.Access数据库教学中任务的设计[J].信息技术,2010,(7):168-170.
[4] 朱名勋.ACCESS数据库案例开发教学改革研究[J].科技视界,2014,(20):73-74.
[5] 马星光,刘仁权.Access2010中医药数据库实例教程[M].北京:中国中医药出版社,2012.
[6] 敖培,李延强,赵四方,等.面向计算机等级考试的ACCESS数据库综合教学案例设计[J].生物技术世界,2015,(1):160-161.
[7] 邢为民,董卫军,索琦.数据库原理与实践(Access 2013)[M].第2版.北京:电子工业出版社,2015:250-252.
[8] 张未未,郭凤英,韩爱庆.基于多种类型宏的Access数据库登录身份验证系统[J].计算机与现代化,2015,(5):121-126.
[9] 陶佳琦,翁正新.VB访问Access数据库的研究[J].微型电脑应用,2014,30(10):14-16.
[10] 陈坤健,李海燕.“计算机基础”项目化教学模式探索[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-),男,北京中医药大学,信息中心,讲师,硕士,研究方向:数据库应用技术、办公自动化、计算机教育,北京,100029
文章编号:1007-757X(2016)01-0073-04
中图分类号:G642
文献标志码:A