張未未,馬星光
(北京中醫(yī)藥大學(xué)信息中心,北京 100029)
配伍是中醫(yī)用藥的特點(diǎn)?!侗窘?jīng)》提出的“七情”為中藥配伍理論的總綱,指中藥配伍關(guān)系的7 個(gè)方面,包括單行、相須、相使、相殺、相惡、相反、相畏[1]?!跋喾础敝饕杆幮灾卓梗? 種藥物合用后,會(huì)產(chǎn)生毒性反應(yīng)或強(qiáng)烈的副作用,被視為配伍禁忌,如:半夏、法半夏、川貝母、湖北貝母、浙貝母、伊貝母、平貝母、瓜蔞、瓜蔞子、炒瓜蔞子、瓜蔞皮、天花粉、白及、白蘞、不宜與烏頭類藥材同用;“相畏”最初的含義是毒性被制約,與“相殺”并提,后發(fā)生衍變,常與“相惡”并提,含有性能被制約之意,亦常作為禁忌,如人參與五靈脂不宜配伍使用。此后,中藥配伍禁忌歸納為“十八反”、“十九畏”,并編成歌訣而廣為流傳[2]。
“十八反”在理論上雖屬于配伍禁忌,但從古到今的臨床實(shí)踐中,都有破禁的復(fù)方記載和使用,用于治療疑難雜?。?]。雖然現(xiàn)代臨床實(shí)踐的破禁運(yùn)用不在少數(shù),但臨床工作人員還是盡量避免應(yīng)用。這主要是因?yàn)椤笆朔础睓C(jī)理不清,缺少理論上、法律上的支持。若想在臨床中應(yīng)用相反藥對(duì)配伍,則醫(yī)生須簽字蓋章,負(fù)完全責(zé)任。本文通過(guò)Access 數(shù)據(jù)宏的使用,實(shí)現(xiàn)在中藥組方過(guò)程中“相反”、“相畏”藥物的自動(dòng)甄別,以提示醫(yī)生注意相關(guān)藥物的配伍使用。由于存在“相反”、“相畏”的藥對(duì)并不絕對(duì)禁止使用,因此本應(yīng)用不會(huì)限制醫(yī)生進(jìn)行相關(guān)配伍。
由于數(shù)據(jù)宏是由表事件觸發(fā)而執(zhí)行的,因此也可以稱之為“事件驅(qū)動(dòng)的數(shù)據(jù)宏”,其功能類似于大型數(shù)據(jù)庫(kù)中的DML 觸發(fā)器[4-5]。每當(dāng)在表中添加、更新或刪除數(shù)據(jù)時(shí),都會(huì)發(fā)生對(duì)應(yīng)的表事件,數(shù)據(jù)宏可以在發(fā)生這3 種事件中的任何一種事件之后,或在發(fā)生刪除或更改事件之前運(yùn)行。數(shù)據(jù)宏是自Access 2010以來(lái)的后續(xù)版本中添加的新功能,是對(duì)Access 數(shù)據(jù)庫(kù)在功能上的重大完善。
Access 中,數(shù)據(jù)宏按照被激活的時(shí)機(jī)不同,分為前期事件數(shù)據(jù)宏和后期事件數(shù)據(jù)宏。如圖1 所示是在Access 2013 中數(shù)據(jù)宏的添加位置。
圖1 數(shù)據(jù)宏的分類
前期事件數(shù)據(jù)宏中宏操作在數(shù)據(jù)修改事件發(fā)生、但還未保存之前被觸發(fā)執(zhí)行,用以實(shí)現(xiàn)數(shù)據(jù)修改的完整性邏輯驗(yàn)證[6]。前期事件數(shù)據(jù)宏中可以決定數(shù)據(jù)是否允許被真正修改,還是顯示錯(cuò)誤以停止修改。
前期事件數(shù)據(jù)宏根據(jù)觸發(fā)的事件不同又可以分為更改(Update)前數(shù)據(jù)宏和刪除(Delete)前數(shù)據(jù)宏。
1)更改前數(shù)據(jù)宏。
更改前數(shù)據(jù)宏在記錄更改動(dòng)作發(fā)生且保存記錄之前運(yùn)行,通常用來(lái)進(jìn)行邏輯驗(yàn)證,以決定記錄是否允許被修改或顯示錯(cuò)誤以停止修改。
2)刪除前數(shù)據(jù)宏。
刪除前數(shù)據(jù)宏在記錄刪除動(dòng)作發(fā)生且記錄被真正刪除之前運(yùn)行,通常用來(lái)進(jìn)行邏輯驗(yàn)證,以決定記錄是否允許被刪除或顯示錯(cuò)誤以停止刪除。
后期事件數(shù)據(jù)宏中宏操作在數(shù)據(jù)修改事件發(fā)生,且修改已保存之后被觸發(fā)執(zhí)行,用以實(shí)現(xiàn)數(shù)據(jù)表中不同字段以及不同數(shù)據(jù)表間數(shù)據(jù)的連動(dòng)更新[7]。
后期事件數(shù)據(jù)宏根據(jù)觸發(fā)的事件不同又可以分為插入(Insert)后數(shù)據(jù)宏、更新(Update)后數(shù)據(jù)宏和刪除(Delete)后數(shù)據(jù)宏[8]。
1)插入后數(shù)據(jù)宏。
插入后數(shù)據(jù)宏是指在新記錄被添加到表后所運(yùn)行的邏輯。
2)更新后數(shù)據(jù)宏。
更新后數(shù)據(jù)宏是指在現(xiàn)有記錄被更改后所運(yùn)行的邏輯。
3)刪除后數(shù)據(jù)宏。
刪除后數(shù)據(jù)宏是指在記錄被刪除后所運(yùn)行的邏輯。
[舊]或[Old]記錄集:該記錄集用于臨時(shí)保存表中被更改或刪除的記錄在更改或刪除前的值。可以通過(guò)[舊].[FieldName]來(lái)獲取該記錄不同字段的“舊”值。該對(duì)象通常用于更新后數(shù)據(jù)宏和刪除后數(shù)據(jù)宏[9]。
Updated(“Field Name”)函數(shù)用來(lái)判斷某個(gè)字段的值是否已更改。該函數(shù)通常用于更新后數(shù)據(jù)宏,可用于區(qū)分在不同字段值被更新后選擇執(zhí)行不同的宏操作[10]。
表1 為數(shù)據(jù)宏常用操作[11-13]。
表1 數(shù)據(jù)宏常用操作
如圖2 所示,為Access 數(shù)據(jù)庫(kù)中用于存放處方的數(shù)據(jù)表,表名“Tbl 處方組成”(注:表中處方并不具有真實(shí)性,請(qǐng)勿使用)。該表中以不同掛號(hào)ID 來(lái)區(qū)分不同的藥方,同一掛號(hào)ID 下的不同記錄代表同一處方的不同中藥組成。
圖2 “Tbl 處方組成”表
當(dāng)在某一處方中添加藥物時(shí),會(huì)自動(dòng)將該中藥與藥方中已有中藥進(jìn)行對(duì)比,找出與新加入藥物存在“相反”或“相畏”的藥物,并將相應(yīng)信息添加在表中的“藥方中的反藥畏藥”字段中。如圖3 所示,當(dāng)添加“附子”后,“藥方中的反藥畏藥”字段會(huì)自動(dòng)添加“浙貝母(反)半夏(反)”數(shù)據(jù),這是由數(shù)據(jù)宏自動(dòng)甄別而完成的數(shù)據(jù)操作。
圖3 “相反”或“相畏”藥對(duì)自動(dòng)甄別后的效果
另外,醫(yī)生在組方的過(guò)程中,難免會(huì)對(duì)已開(kāi)具藥物進(jìn)行調(diào)換或刪除。因此當(dāng)對(duì)藥物進(jìn)行更新或刪除的操作時(shí),數(shù)據(jù)宏也會(huì)完成相應(yīng)的甄別工作,來(lái)完成表中“藥方中的反藥畏藥”字段的數(shù)據(jù)修改。要實(shí)現(xiàn)以上效果,需為“Tbl 處方組成”表添加“插入后”、“更新后”和“刪除后”3 個(gè)數(shù)據(jù)宏。之所以選擇后期事件數(shù)據(jù)宏,是因?yàn)樵趯?duì)藥對(duì)進(jìn)行相反或相畏甄別后,并不禁止醫(yī)生開(kāi)具相應(yīng)藥物,只是以說(shuō)明的形式進(jìn)行備注以示提醒。
如圖4 所示,列出了數(shù)據(jù)庫(kù)中主要數(shù)據(jù)表之間的關(guān)系。
圖4 數(shù)據(jù)庫(kù)中主要數(shù)據(jù)表間關(guān)系圖
各數(shù)據(jù)表功能如表2 所示。
表2 數(shù)據(jù)庫(kù)中主要數(shù)據(jù)表功能描述
“Tbl 十八反十九畏”表中示例數(shù)據(jù)如圖5 所示。當(dāng)處方中新的藥物被開(kāi)具后,可根據(jù)該表所保存反藥或畏藥藥對(duì)信息來(lái)甄別同一處方中是否出現(xiàn)相反或相畏的藥物。該表可以根據(jù)使用者經(jīng)驗(yàn)進(jìn)行藥對(duì)的添加或刪減。
圖5 “Tbl 十八反十九畏”表數(shù)據(jù)示例
插入后數(shù)據(jù)宏負(fù)責(zé)完成在處方中添加新藥時(shí)對(duì)可能出現(xiàn)的“相反”或“相畏”藥對(duì)的甄別。Access 2013 中所添加的宏操作代碼如圖6 所示。
圖6 插入后數(shù)據(jù)宏代碼
1)圖6 中變量“medicine”用于保存藥方中與當(dāng)前所添加的新藥存在“相反”或“相畏”關(guān)系的已經(jīng)開(kāi)具的藥物名稱;變量“Insertmedicine”用于保存當(dāng)前所添加新藥的中藥ID;變量“CurrentID”用于保存當(dāng)前處方所屬的掛號(hào)ID。
2)代碼中的“對(duì)于所選對(duì)象中的每個(gè)記錄”對(duì)應(yīng)于常用數(shù)據(jù)宏操作中的“ForEachRecord”命令;“查找所選對(duì)象中的記錄”對(duì)應(yīng)于“LookupRecord”命令。在Access 2013 中文版中這2 個(gè)命令會(huì)以中文形式表述[14]。
圖6 所示代碼實(shí)現(xiàn)思路為:在對(duì)添加新藥的處方中依次遍歷每味已開(kāi)具的中藥,將遍歷到的中藥放到“Tbl 十八反十九畏”數(shù)據(jù)表中查看是否與所添加新藥存在“相反”或“相畏”的關(guān)系。如果存在則將該中藥保存在“medicine”變量中。當(dāng)遍歷結(jié)束后,“medicine”變量中將保存所有與添加新藥存在“相反”或“相畏”關(guān)系的中藥藥名,并將“medicine”變量的值保存入新藥記錄的“藥方中的反藥畏藥”字段中。
更新后數(shù)據(jù)宏負(fù)責(zé)完成在處方中藥物進(jìn)行更改時(shí)可能出現(xiàn)的“相反”或“相畏”藥對(duì)的甄別。具體過(guò)程分為2 步:
1)對(duì)更新后的新藥在藥方中尋找具有“相反”或“相畏”關(guān)系的藥對(duì)。宏操作代碼如圖7 所示,實(shí)現(xiàn)思路類似于4.3 節(jié)圖6 所示代碼,不再贅述。
圖7 更新后數(shù)據(jù)宏代碼部分—1
圖7 中使用Updated(“中藥ID”)操作用于判斷是否是中藥ID 字段被更新。如果是其他字段更新則該數(shù)據(jù)宏將不會(huì)繼續(xù)執(zhí)行。
2)將更改前的藥物已建立的“相反”或“相畏”關(guān)系的藥對(duì)信息從處方中相關(guān)藥物的“藥方中的反藥畏藥”字段中進(jìn)行刪除。宏操作代碼如圖8 所示。
圖8 更新后數(shù)據(jù)宏代碼部分—2
圖8 中,公式(1)表示:
值=Left([處方組成].[藥方中的反藥畏藥],InStr([處方組成].[藥方中的反藥畏藥],[Delmedicine])-1)& Right([處方組成].[藥方中的反藥畏藥],Len([處方組成].[藥方中的反藥畏藥])-(InStr([處方組成].[藥方中的反藥畏藥],[Delmedicine])+Len([Delmedicine])+3))(1)
[舊].[中藥ID]用以獲得更改前的中藥ID,并將由此中藥ID 所對(duì)應(yīng)的藥名保存在“Delmedicine”變量中。
圖8 所示代碼實(shí)現(xiàn)思路為:遍歷所操作處方中其他未更改藥物,若發(fā)現(xiàn)有藥物的“藥方中的反藥畏藥”字段中存在“Delmedicine”變量所存藥名,則將該藥名從字段中刪除。
刪除后數(shù)據(jù)宏負(fù)責(zé)完成在刪除處方中某味中藥時(shí),更改其他藥物與該中藥之前所建立的“相反”或“相畏”關(guān)系信息。所添加的宏操作代碼如圖9 所示。
圖9 刪除后數(shù)據(jù)宏代碼
圖9 所示代碼與4.4 節(jié)圖8 所示代碼實(shí)現(xiàn)思路類似,不再贅述。
在數(shù)據(jù)宏功能出現(xiàn)之前,要實(shí)現(xiàn)本文所介紹的“相反”或“相畏”藥物的自動(dòng)甄別功能,通常會(huì)以添加Access 窗體對(duì)象或以第三方開(kāi)發(fā)語(yǔ)言建立操作界面的方式,通過(guò)窗體或窗體控件事件的觸發(fā)來(lái)執(zhí)行藥對(duì)間判別以及數(shù)據(jù)寫(xiě)入的VBA 代碼或第三方開(kāi)發(fā)語(yǔ)言代碼。這種方法需要對(duì)程序設(shè)計(jì)語(yǔ)言具有一定程度的掌握,而且往往會(huì)涉及ADO(ActiveX Data Objects)編程,因此實(shí)現(xiàn)起來(lái)較為復(fù)雜[15]。由于存在窗體(前端)與數(shù)據(jù)庫(kù)(后臺(tái))中不同數(shù)據(jù)表之間的頻繁數(shù)據(jù)交換,從而導(dǎo)致執(zhí)行效率不高。
由于數(shù)據(jù)宏類似于大型數(shù)據(jù)庫(kù)中的觸發(fā)器,因此采用數(shù)據(jù)宏的實(shí)現(xiàn)方法,對(duì)于表操作事件的觸發(fā)及宏操作的執(zhí)行始終處于數(shù)據(jù)庫(kù)(后臺(tái))層中運(yùn)行,從而省去了與前端窗體的數(shù)據(jù)交換過(guò)程,執(zhí)行效率更高[16]。而且數(shù)據(jù)宏中的基本操作書(shū)寫(xiě)較程序設(shè)計(jì)語(yǔ)言簡(jiǎn)單,易于學(xué)習(xí),比較適合Access 數(shù)據(jù)庫(kù)初中級(jí)使用者掌握。本文之所以選取Access 數(shù)據(jù)庫(kù),正是因?yàn)樵摦a(chǎn)品簡(jiǎn)單易用的特性使其在非計(jì)算機(jī)專業(yè)人員特別是醫(yī)務(wù)工作者中具有廣泛的使用人群。而數(shù)據(jù)宏功能的出現(xiàn)極大地豐富了Access 數(shù)據(jù)庫(kù)軟件的功能,從某種程度來(lái)講,可以比肩專業(yè)的數(shù)據(jù)庫(kù)工具。
本文介紹了將Access 數(shù)據(jù)宏用于中藥組方中對(duì)于“相反”或“相畏”藥對(duì)的自動(dòng)甄別的實(shí)現(xiàn)方法。數(shù)據(jù)宏是自Access 2010 版本后新增的宏對(duì)象類型,其功能類似于大型數(shù)據(jù)庫(kù)中的觸發(fā)器,是對(duì)Access 數(shù)據(jù)庫(kù)特別是表對(duì)象功能的極大補(bǔ)充,彌補(bǔ)了表對(duì)象在過(guò)程型數(shù)據(jù)完整性約束功能實(shí)現(xiàn)上的不足[17]。但目前介紹數(shù)據(jù)宏實(shí)際應(yīng)用的文獻(xiàn)還比較少,本文所介紹的方法也為在Access 數(shù)據(jù)庫(kù)中相似問(wèn)題的解決提供了一定的思路及實(shí)現(xiàn)途徑。
[1]唐于平,吳起成,丁安偉,等.對(duì)中藥“十八反”、“十九畏”的現(xiàn)狀認(rèn)識(shí)[J].中國(guó)實(shí)驗(yàn)方劑學(xué)雜志,2009,15(6):79-81.
[2]范欣生,段金廒,王中越,等.“十八反”結(jié)構(gòu)形式上的中藥配伍禁忌研究[J].中醫(yī)雜志,2012,53(16):1360-1364.
[3]左艇,范欣生,蔣辰雪,等.基于數(shù)據(jù)挖掘?qū)Α笆朔础彼幬锱R床應(yīng)用的調(diào)查研究[J].中華中醫(yī)藥雜志,2015,30(5):1601-1603.
[4]王珊,薩師煊.數(shù)據(jù)庫(kù)系統(tǒng)概論[M].4 版.北京:高等教育出版社,2008.
[5]褚龍現(xiàn).DML 觸發(fā)器保持?jǐn)?shù)據(jù)庫(kù)完整性應(yīng)用研究[J].計(jì)算機(jī)與現(xiàn)代化,2013(4):57-59.
[6]胡鶴年.SQL Server 觸發(fā)器在數(shù)據(jù)庫(kù)設(shè)計(jì)中的應(yīng)用[J].數(shù)據(jù)庫(kù)與信息管理,2012(8):37-38,83.
[7]劉維學(xué).對(duì)SQL Server 數(shù)據(jù)庫(kù)觸發(fā)器的深入研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013,23(10):48-51.
[8]邢為民,董衛(wèi)軍,索琦.數(shù)據(jù)庫(kù)原理與實(shí)踐(Access 2013)[M].2 版.北京:電子工業(yè)出版社,2015.
[9]Ken Getz.在Access 2010 應(yīng)用程序中使用數(shù)據(jù)宏為數(shù)據(jù)附加邏輯[EB/OL].http://msdn.microsoft.com/zhcn/library/ff973807(v=office.14).aspx,2015-03-09.
[10]張未未,郭鳳英,韓愛(ài)慶.基于多種類型宏的Access 數(shù)據(jù)庫(kù)登錄身份驗(yàn)證系統(tǒng)[J].計(jì)算機(jī)與現(xiàn)代化,2015(5):121-126.
[11]馬星光,劉仁權(quán).Access 2010 中醫(yī)藥數(shù)據(jù)庫(kù)實(shí)例教程[M].北京:中國(guó)中醫(yī)藥出版社,2012.
[12]科教工作室.Access 2010 數(shù)據(jù)庫(kù)應(yīng)用[M].2 版.北京:清華大學(xué)出版社,2011:137-138.
[13]于繁華,李民.Access 基礎(chǔ)教程[M].4 版.北京:中國(guó)水利水電出版社,2013:185-186.
[14]易葉青,闕清賢.Access 2010 數(shù)據(jù)庫(kù)應(yīng)用技術(shù)[M].北京:中國(guó)水利水電出版社,2014:55-76.
[15]汪星輝.基于Access 的教務(wù)管理系統(tǒng)的設(shè)計(jì)與應(yīng)用[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2013(20):282-284.
[16]徐寶中.基于Access 和SQL Server 數(shù)據(jù)庫(kù)的項(xiàng)目成本管理系統(tǒng)[J].電腦開(kāi)發(fā)與應(yīng)用,2014,27(6):71-74.
[17]王莉.Access 數(shù)據(jù)庫(kù)中數(shù)據(jù)完整性的實(shí)現(xiàn)[J].中國(guó)科技創(chuàng)新導(dǎo)刊,2013(1):181.