APP下载

Access 数据宏在中药组方配伍中的应用

2015-11-25张未未马星光

计算机与现代化 2015年12期
关键词:药方字段数据表

张未未,马星光

(北京中医药大学信息中心,北京 100029)

0 引言

配伍是中医用药的特点。《本经》提出的“七情”为中药配伍理论的总纲,指中药配伍关系的7 个方面,包括单行、相须、相使、相杀、相恶、相反、相畏[1]。“相反”主要指药性之拮抗,2 种药物合用后,会产生毒性反应或强烈的副作用,被视为配伍禁忌,如:半夏、法半夏、川贝母、湖北贝母、浙贝母、伊贝母、平贝母、瓜蒌、瓜蒌子、炒瓜蒌子、瓜蒌皮、天花粉、白及、白蔹、不宜与乌头类药材同用;“相畏”最初的含义是毒性被制约,与“相杀”并提,后发生衍变,常与“相恶”并提,含有性能被制约之意,亦常作为禁忌,如人参与五灵脂不宜配伍使用。此后,中药配伍禁忌归纳为“十八反”、“十九畏”,并编成歌诀而广为流传[2]。

“十八反”在理论上虽属于配伍禁忌,但从古到今的临床实践中,都有破禁的复方记载和使用,用于治疗疑难杂病[3]。虽然现代临床实践的破禁运用不在少数,但临床工作人员还是尽量避免应用。这主要是因为“十八反”机理不清,缺少理论上、法律上的支持。若想在临床中应用相反药对配伍,则医生须签字盖章,负完全责任。本文通过Access 数据宏的使用,实现在中药组方过程中“相反”、“相畏”药物的自动甄别,以提示医生注意相关药物的配伍使用。由于存在“相反”、“相畏”的药对并不绝对禁止使用,因此本应用不会限制医生进行相关配伍。

1 数据宏的功能

由于数据宏是由表事件触发而执行的,因此也可以称之为“事件驱动的数据宏”,其功能类似于大型数据库中的DML 触发器[4-5]。每当在表中添加、更新或删除数据时,都会发生对应的表事件,数据宏可以在发生这3 种事件中的任何一种事件之后,或在发生删除或更改事件之前运行。数据宏是自Access 2010以来的后续版本中添加的新功能,是对Access 数据库在功能上的重大完善。

2 数据宏的分类

Access 中,数据宏按照被激活的时机不同,分为前期事件数据宏和后期事件数据宏。如图1 所示是在Access 2013 中数据宏的添加位置。

图1 数据宏的分类

2.1 前期事件数据宏

前期事件数据宏中宏操作在数据修改事件发生、但还未保存之前被触发执行,用以实现数据修改的完整性逻辑验证[6]。前期事件数据宏中可以决定数据是否允许被真正修改,还是显示错误以停止修改。

前期事件数据宏根据触发的事件不同又可以分为更改(Update)前数据宏和删除(Delete)前数据宏。

1)更改前数据宏。

更改前数据宏在记录更改动作发生且保存记录之前运行,通常用来进行逻辑验证,以决定记录是否允许被修改或显示错误以停止修改。

2)删除前数据宏。

删除前数据宏在记录删除动作发生且记录被真正删除之前运行,通常用来进行逻辑验证,以决定记录是否允许被删除或显示错误以停止删除。

2.2 后期事件数据宏

后期事件数据宏中宏操作在数据修改事件发生,且修改已保存之后被触发执行,用以实现数据表中不同字段以及不同数据表间数据的连动更新[7]。

后期事件数据宏根据触发的事件不同又可以分为插入(Insert)后数据宏、更新(Update)后数据宏和删除(Delete)后数据宏[8]。

1)插入后数据宏。

插入后数据宏是指在新记录被添加到表后所运行的逻辑。

2)更新后数据宏。

更新后数据宏是指在现有记录被更改后所运行的逻辑。

3)删除后数据宏。

删除后数据宏是指在记录被删除后所运行的逻辑。

3 数据宏中特殊的记录集、函数及常用操作

3.1 特殊记录集

[旧]或[Old]记录集:该记录集用于临时保存表中被更改或删除的记录在更改或删除前的值。可以通过[旧].[FieldName]来获取该记录不同字段的“旧”值。该对象通常用于更新后数据宏和删除后数据宏[9]。

3.2 特殊函数

Updated(“Field Name”)函数用来判断某个字段的值是否已更改。该函数通常用于更新后数据宏,可用于区分在不同字段值被更新后选择执行不同的宏操作[10]。

3.3 常用操作

表1 为数据宏常用操作[11-13]。

表1 数据宏常用操作

4 数据宏在中药配伍组方中的应用

4.1 实现效果

如图2 所示,为Access 数据库中用于存放处方的数据表,表名“Tbl 处方组成”(注:表中处方并不具有真实性,请勿使用)。该表中以不同挂号ID 来区分不同的药方,同一挂号ID 下的不同记录代表同一处方的不同中药组成。

图2 “Tbl 处方组成”表

当在某一处方中添加药物时,会自动将该中药与药方中已有中药进行对比,找出与新加入药物存在“相反”或“相畏”的药物,并将相应信息添加在表中的“药方中的反药畏药”字段中。如图3 所示,当添加“附子”后,“药方中的反药畏药”字段会自动添加“浙贝母(反)半夏(反)”数据,这是由数据宏自动甄别而完成的数据操作。

图3 “相反”或“相畏”药对自动甄别后的效果

另外,医生在组方的过程中,难免会对已开具药物进行调换或删除。因此当对药物进行更新或删除的操作时,数据宏也会完成相应的甄别工作,来完成表中“药方中的反药畏药”字段的数据修改。要实现以上效果,需为“Tbl 处方组成”表添加“插入后”、“更新后”和“删除后”3 个数据宏。之所以选择后期事件数据宏,是因为在对药对进行相反或相畏甄别后,并不禁止医生开具相应药物,只是以说明的形式进行备注以示提醒。

4.2 数据库结构分析

如图4 所示,列出了数据库中主要数据表之间的关系。

图4 数据库中主要数据表间关系图

各数据表功能如表2 所示。

表2 数据库中主要数据表功能描述

“Tbl 十八反十九畏”表中示例数据如图5 所示。当处方中新的药物被开具后,可根据该表所保存反药或畏药药对信息来甄别同一处方中是否出现相反或相畏的药物。该表可以根据使用者经验进行药对的添加或删减。

图5 “Tbl 十八反十九畏”表数据示例

4.3 插入后数据宏实现

插入后数据宏负责完成在处方中添加新药时对可能出现的“相反”或“相畏”药对的甄别。Access 2013 中所添加的宏操作代码如图6 所示。

图6 插入后数据宏代码

1)图6 中变量“medicine”用于保存药方中与当前所添加的新药存在“相反”或“相畏”关系的已经开具的药物名称;变量“Insertmedicine”用于保存当前所添加新药的中药ID;变量“CurrentID”用于保存当前处方所属的挂号ID。

2)代码中的“对于所选对象中的每个记录”对应于常用数据宏操作中的“ForEachRecord”命令;“查找所选对象中的记录”对应于“LookupRecord”命令。在Access 2013 中文版中这2 个命令会以中文形式表述[14]。

图6 所示代码实现思路为:在对添加新药的处方中依次遍历每味已开具的中药,将遍历到的中药放到“Tbl 十八反十九畏”数据表中查看是否与所添加新药存在“相反”或“相畏”的关系。如果存在则将该中药保存在“medicine”变量中。当遍历结束后,“medicine”变量中将保存所有与添加新药存在“相反”或“相畏”关系的中药药名,并将“medicine”变量的值保存入新药记录的“药方中的反药畏药”字段中。

4.4 更新后数据宏实现

更新后数据宏负责完成在处方中药物进行更改时可能出现的“相反”或“相畏”药对的甄别。具体过程分为2 步:

1)对更新后的新药在药方中寻找具有“相反”或“相畏”关系的药对。宏操作代码如图7 所示,实现思路类似于4.3 节图6 所示代码,不再赘述。

图7 更新后数据宏代码部分—1

图7 中使用Updated(“中药ID”)操作用于判断是否是中药ID 字段被更新。如果是其他字段更新则该数据宏将不会继续执行。

2)将更改前的药物已建立的“相反”或“相畏”关系的药对信息从处方中相关药物的“药方中的反药畏药”字段中进行删除。宏操作代码如图8 所示。

图8 更新后数据宏代码部分—2

图8 中,公式(1)表示:

值=Left([处方组成].[药方中的反药畏药],InStr([处方组成].[药方中的反药畏药],[Delmedicine])-1)& Right([处方组成].[药方中的反药畏药],Len([处方组成].[药方中的反药畏药])-(InStr([处方组成].[药方中的反药畏药],[Delmedicine])+Len([Delmedicine])+3))(1)

[旧].[中药ID]用以获得更改前的中药ID,并将由此中药ID 所对应的药名保存在“Delmedicine”变量中。

图8 所示代码实现思路为:遍历所操作处方中其他未更改药物,若发现有药物的“药方中的反药畏药”字段中存在“Delmedicine”变量所存药名,则将该药名从字段中删除。

4.5 删除后数据宏实现

删除后数据宏负责完成在删除处方中某味中药时,更改其他药物与该中药之前所建立的“相反”或“相畏”关系信息。所添加的宏操作代码如图9 所示。

图9 删除后数据宏代码

图9 所示代码与4.4 节图8 所示代码实现思路类似,不再赘述。

5 实现方法比较

在数据宏功能出现之前,要实现本文所介绍的“相反”或“相畏”药物的自动甄别功能,通常会以添加Access 窗体对象或以第三方开发语言建立操作界面的方式,通过窗体或窗体控件事件的触发来执行药对间判别以及数据写入的VBA 代码或第三方开发语言代码。这种方法需要对程序设计语言具有一定程度的掌握,而且往往会涉及ADO(ActiveX Data Objects)编程,因此实现起来较为复杂[15]。由于存在窗体(前端)与数据库(后台)中不同数据表之间的频繁数据交换,从而导致执行效率不高。

由于数据宏类似于大型数据库中的触发器,因此采用数据宏的实现方法,对于表操作事件的触发及宏操作的执行始终处于数据库(后台)层中运行,从而省去了与前端窗体的数据交换过程,执行效率更高[16]。而且数据宏中的基本操作书写较程序设计语言简单,易于学习,比较适合Access 数据库初中级使用者掌握。本文之所以选取Access 数据库,正是因为该产品简单易用的特性使其在非计算机专业人员特别是医务工作者中具有广泛的使用人群。而数据宏功能的出现极大地丰富了Access 数据库软件的功能,从某种程度来讲,可以比肩专业的数据库工具。

6 结束语

本文介绍了将Access 数据宏用于中药组方中对于“相反”或“相畏”药对的自动甄别的实现方法。数据宏是自Access 2010 版本后新增的宏对象类型,其功能类似于大型数据库中的触发器,是对Access 数据库特别是表对象功能的极大补充,弥补了表对象在过程型数据完整性约束功能实现上的不足[17]。但目前介绍数据宏实际应用的文献还比较少,本文所介绍的方法也为在Access 数据库中相似问题的解决提供了一定的思路及实现途径。

[1]唐于平,吴起成,丁安伟,等.对中药“十八反”、“十九畏”的现状认识[J].中国实验方剂学杂志,2009,15(6):79-81.

[2]范欣生,段金廒,王中越,等.“十八反”结构形式上的中药配伍禁忌研究[J].中医杂志,2012,53(16):1360-1364.

[3]左艇,范欣生,蒋辰雪,等.基于数据挖掘对“十八反”药物临床应用的调查研究[J].中华中医药杂志,2015,30(5):1601-1603.

[4]王珊,萨师煊.数据库系统概论[M].4 版.北京:高等教育出版社,2008.

[5]褚龙现.DML 触发器保持数据库完整性应用研究[J].计算机与现代化,2013(4):57-59.

[6]胡鹤年.SQL Server 触发器在数据库设计中的应用[J].数据库与信息管理,2012(8):37-38,83.

[7]刘维学.对SQL Server 数据库触发器的深入研究[J].计算机技术与发展,2013,23(10):48-51.

[8]邢为民,董卫军,索琦.数据库原理与实践(Access 2013)[M].2 版.北京:电子工业出版社,2015.

[9]Ken Getz.在Access 2010 应用程序中使用数据宏为数据附加逻辑[EB/OL].http://msdn.microsoft.com/zhcn/library/ff973807(v=office.14).aspx,2015-03-09.

[10]张未未,郭凤英,韩爱庆.基于多种类型宏的Access 数据库登录身份验证系统[J].计算机与现代化,2015(5):121-126.

[11]马星光,刘仁权.Access 2010 中医药数据库实例教程[M].北京:中国中医药出版社,2012.

[12]科教工作室.Access 2010 数据库应用[M].2 版.北京:清华大学出版社,2011:137-138.

[13]于繁华,李民.Access 基础教程[M].4 版.北京:中国水利水电出版社,2013:185-186.

[14]易叶青,阙清贤.Access 2010 数据库应用技术[M].北京:中国水利水电出版社,2014:55-76.

[15]汪星辉.基于Access 的教务管理系统的设计与应用[J].计算机光盘软件与应用,2013(20):282-284.

[16]徐宝中.基于Access 和SQL Server 数据库的项目成本管理系统[J].电脑开发与应用,2014,27(6):71-74.

[17]王莉.Access 数据库中数据完整性的实现[J].中国科技创新导刊,2013(1):181.

猜你喜欢

药方字段数据表
图书馆中文图书编目外包数据质量控制分析
张老师的“药方”
湖北省新冠肺炎疫情数据表
重楼:梁春宏的脱贫“药方”
基于列控工程数据表建立线路拓扑关系的研究
弩药方提取工艺的优化
CNMARC304字段和314字段责任附注方式解析
图表
无正题名文献著录方法评述
给企业家腐败现象开“药方”