大连轻工业学院学报第24卷第3期Vol.24,No.3
2005年9月Sept.2005JournalofDalianInstituteofLightIndustry
文章编号:100524014(2005)0320207204
在LabVIEW中利用ADO技术动态创建数据库
周 荣,丁金华,李明颖,周茂军
(大连轻工业学院机械工程与自动化学院,辽宁大连 116034)
3
关键词:数据库;数据表;LabVIEW;ADO
摘要::LabVIEW是当前开发虚拟仪器的主要工具之一,但没有提供与数据库直接连接的接口。
利用ADO技术较好地解决LabVIEW访问通用数据库的问题。本文介绍一种在LabVIEW编程环境下利用ADO技术动态创建数据库和数据表的方法。用该方法创建的数据库和数据表与用
Access2000所创建的数据库和数据表是同一类型的,可以在Access2000中直接打开。
中图分类号:TP311 文献标识码:A
UsingADOtechnologytofounddatabasedynamicallyinLabVIEW
ZHOURong,DINGJin2hua,LIMing2ying,ZHOUMao2jun
(SchoolofMachanicalEngineering&Automation,DalianInstituteofLightIndustry,Dalian116034,China)
Keywords:database;datasheet;LabVIEW;ADO
Abstract:LabVIEWisoneofthemajortoolsforvirtualinstrumentsdevelopment.But,thereisinwantofinterfacefordirectdatabaselinkage.Thispaperpresentsthemethodofaccessingthegeneral2purposedatabaseundertheLabVIEWbyusingADOtechnology.ThedatabaseanddatasheetfoundbythismethodisthesameasthosefoundintheAccess2000,andcanbeopenedupinit.
LabVIEW(LaboratoryVirtualInstrument
EngineeringWorkbench)是美国国家仪器公司推出的面向仪器与测控工程的基于G语言(Graph2icsLanguage,图形化编程语言)的一种虚拟仪器开发平台,主要用于数据采集分析,仪器和控制,测试测量及过程监控等领域[1,2]。
对被测目标进行全方位检测,多传感器网络协调应用,有利于获取对目标系统的全面认识,同时数据量也急剧增长。若对实时采集的数据存储和查询等有较高的要求,就必须采用数据库技术。因此以数据库为中心,以数据管理为重点,构建基于数据库管理数据的虚拟仪器系统是现代测试测量系统的发展趋势[3,4]。
LabVIEW本身并不具备数据库访问能力。通常采用以下几种方法来解决[3,5]:
(1)利用NI公司的附加工具包LabVIEWSQLToolkit进行数据库访问。但是,这个工具包比较昂贵,很多LabVIEW用户难以承受。
(2)利用其他语言如VC++编写动态连接
库DLL访问数据库,并在LabVIEW中调用此DLL与数据库连接,这种方法需要设计者熟悉多种语言,并且工作量较大。
(3)利用LabVIEW的ActiveX功能,调用MicrosoftADO控件,利用SQL语言实现数据库
访问。
现有LabVIEW用户开发了免费LabVIEW数据库访问工具包LabSQL,通过MicrosoftADO与SQL来完成数据库访问,可以访问任何类型的数据库,执行各种查询,对记录进行各种操作。
LabSQL易于理解,操作简单,是访问数据库较好的方法,但在使用前必须先使用数据库管理系统(例如:MicrosoftAccess)建立好数据库和数据表的结构,并在Winodows操作系统中的OD2BC数据源中创建DSN(DataSourceName,数据源名),才能在LabVIEW中通过LabSQL工具包与数据库中的表建立连接,执行各种操作,灵活性欠佳。本文提出一种在LabVIEW编程环境下利
3
收稿日期:2005206210作者简介:周 荣(1980~),女,硕士研究生.
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
208
大 连 轻 工 业 学 院 学 报 第24卷
(3)ADOMD(ActiveXDataObjectsMultidi2
mensional)。将ADO扩展为包括指定到数据的对象,并允许浏览模式、查询立方和检索结果。1.2 ADOX技术
ADOX是对ADO对象和编程模型的扩展,其对象模型主要包含了产生数据库模式的对象以及控制数据库内对象安全的对象,ADOX在标准的ADO对象里增加了9个对象:Catalog、Table、Column、Index、Key、Group、User、Procedure和View,其相互关系如图1所示,ADOX方法如表1所示。用于MicrosoftJetDatabaseEngine的MicrosoftOLEDBProvider完全支持ADOX。
用ADO技术动态创建数据库和数据表的方法,
以提高程序的灵活性。在程序运行过程中动态地建立自己所需的数据库和数据表,其本质就是用代码(或者说通过编程)来建立数据库和数据表。
1 ADO与ADOX
1.1 ADO技术
ADO(MicrosoftActiveXDataObjects)技术
是基于Microsoft为最新的数据访问接口技术———一致数据访问(UniversalDataAccess,UDA)设计的应用层接口。UDA技术包括OLEDB和ADO两层标准。OLEDB是系统级的编
程接口,是一致数据访问技术的核心,它建立了数据访问的标准接口。ADO位于OLEDB的上层,包括了OLEDB的许多功能函数,通过OLEDB提供的COM接口访问数据库,并可以处理各种OLEDB支持的数据源,包括Access、Oracle、SQLServer等数据库。其主要优点是易于使用、高速度、低内存支出和占用空间较少[2,6]。
ADO组件包括:
(1)ADO。使客户端应用程序能通过OLEDB提供者访问和操作数据库服务器中的数据。(2)ADOX(ActiveXDataObjectsExten2sionsforDDLandSecurity)。将ADO扩展为包
括创建、修改和删除的模式对象,如表格和过程,以及包括用于维护用户和组以及管理对象权限的安全对象。
表1 ADOX方法
方法
AppendCreateDeleteRefreshItemChangPasswordGetObjectOwnerGetPermissionsSetObjectOwnerSetPermissions
图1 ADOX对象及其相互关系
说明
包括Columns、Groups、Indexes、Keys、Procedures、
Tables、Users、Views,将新的对象添加到集合中去
创建新的目录
删除集合中的对象
更新集合中的对象,以反映针对提供者可用的和指定的对象
按名称或序号返回集合的指定成员
更换用户帐号的密码返回目录中对象的拥有者获得对象上组或用户的权限指定目录中对象的拥有者设置对象上组或用户的权限
ADOX常用属性有:ActiveConnection(指定目录所属的ADOConnection对象)、Command(指定可用于创建或执行过程的ADOCom2mand)、Name(指示对象的名称)、Precision(指示列中数据值的最高精度)、Type(包括Column、
Key和Table,指示对象的数据类型)等等。
2 利用ADO技术在LabVIEW中
动态创建数据库和数据表
ADO对象在LabVIEW中是以ActiveX对
象的形式提供的。LabVIEW提供了对ActiveX
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
第3期 周 荣等:在LabVIEW中利用ADO技术动态创建数据库
209
自动化对象的支持,并可以与其他的程序进行交互,这其中包含了ADO接口的各种对象。首先打开ActiveX自动化对象的一个引用并与数据库建立连接,然后进行对象属性的设置和获取,以及对象方法的调用,最后关闭对象的引用连接。相应的LabVIEW提供了对这几个步骤的支持。在LabVIEW环境下,由打开自动化节点(Automa2tionOpen)打开ADO对象的引用,关闭自动化节点(AutomationClose)关闭引用,通过属性节点(PropertyNode)的设置实现对ADO对象属性的设置和提取,通过调用节点(InvokeNode)的调用实现各种方法的调用。
下面以在LabVIEW中创建Access数据库和数据表的实例来说明在LabVIEW中利用ADO创建数据库和数据表的具体实现。实例在程序运行过程中建立一个数据库,数据库的路径名称由用户输入,在数据库中建立一个名为“测量数据表”的数据表,数据表中有两个字段,分别是“测量时间”和“测量数据”。为了增强程序的灵活性,将程序分为3个子程序和1个主程序。2.1 创建数据库
首先在LabVIEW的功能模板中选择Com2munication/ActiveX/AutomationOpen,在右键弹出菜单中选择“SelectActiveXClass/Browse
……”,在其后弹出的“SelectObjiectFromType
Library”对话框中“,TypeLibrary”选项中选择“MicrosoftADOExt.2.7forDDLandSecurityVerision2.7”,“Objects”选项中选择“Catalog(ADOXCatalog.2.7)”,创建一个Catalog对象。
其次在功能模板中选择InvokeNode节点,连接AutomationOpen的AutomationRefnum与InvokeNode的reference,然后在InvokeNode右键弹出菜单中选择“Mothods/Create”,调
用Create方法创建数据库,Create方法需要设定ConnectionString属性。ConnectionString属性通过传递包含一系列由分号分隔的argument=value语句的详细连接字符串可指定数据源,这里ConnectionString的输入设定为“Provider=Microsoft.Jet.OLEDB.4.0;DataSource=用户输入的数据库路径;”。“Provider=Microsoft.Jet.OLEDB.4.0;”,表示MicrosoftJetOLEDB驱动程序的版本是4.0,创建Access2000数据库。为方便用户输入,将字段分为两部分,并利用WaitForFrontPanelActivity节点,WhileLoop结构,以及一个“确定”按键,等待用户输入完数据库路径名称点击“确定”按键后,再执行数据库创建任务,如图2中(1)处所示。
图2 利用ADO创建数据库程序框图
(1)CreateTable.VI。与创建Catalog对象2.2 创建数据表
为简化VI框图程序结构,提高运行效率,采一样,先选择AutomationOpen节点,右键弹出用模块化编程,创建两个SubVI:CreateTable.菜单中选择“SelectActiveXClass/Browse……”,VI,CreateColumn.VI。不同的是在“SelectObjiectFromTypeLibrary”
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
210
大 连 轻 工 业 学 院 学 报 第24卷
(5)处所示。
2.3 将数据表追加到数据库中
对话框中的“Objects”选项中选择“Table
(ADOX.Table.2.7)”,创建一个Table对象。在功能模板中选择PropertyNode节点,将Prop2ertyNode节点的reference与新创建的Automa2tionOpen的AutomationRefnum相连,选择Name属性并输入表名,如图3所示。定义该SubVI两个输入:errorin和表名;两个输出:err2rorout和TableRefnum。
在Catalog对象的属性中选择Tables,调用Tables的Append方法,将Table对象Automa2tionRefnum作为Append方法Item项的输入,如图1中(6)处所示。然后依次关闭与数据库的连接,如图2中(5)处所示。
在程序中充分利用了errorin与errorout,一方面当任何一处出错时都可以由图2中(6)处的errorout输出,同时避免无用的操作;另一方面通过errorin与errorout数据流控制程序的执行顺序,减少顺序结构的使用,提高程序的可读性及执行效率。
图3 创建空数据表
(2)CreateColumn.VI。采用同样的方法利
用AutomationOpen节点创建Column对象(在
“SelectObjiectFromTypeLibrary”对话框中的“Objects”选项中选择“Column(ADOX.Col2
),选择Name属性并输入字段名,umn.2.7)”
Type属性输入字段的数据类型,如图4所示。为以上所举例子只是一个简单的Access2000
数据库创建的基本操作,实际上可以创建适用于用户的更加复杂的数据库,如创建相关表,添加主键等等,而且并不只限于这种数据库。
3 结 论
以上介绍了一种在LabVIEW中使用ADO技术创建的数据库和数据表的方法。实践证明用该方法创建的数据库和数据表的类型和用Ac2cess2000所创建的数据库和数据表是同一类型的,可以在Access2000中直接打开。该方法在提高程序的灵活性和满足用户的特殊需要方面有很大的作用。
该SubVI定义三个输入:errorin、字段名、数据类型名;两个输出:errorout和ColumnRefnum。
参考文献:
图4 创建字段
(3)在主程序中调用两SubVI创建数据表。首先调用CreateTable.VI,创建一个空的数据表,在Table的属性中选择Columns,并调用Col2umns的Append方法。然后调用CreateCol2umn.VI,创建两个字段,字段名分别输入“测量时间”和“测量数据”,因“测量时间”的数据类型为日期/时间型“,测量数据”的数据类型为单精度型,故而数据类型分别输入7和4。把两Column的AutomationRefnum分别作为Append中Item项的输入,完成Column对象追加到数据表中,如图2中(3)处所示。
(4)为了方便查询,为“测量时间”字段添加索引。在Table的属性中选择Indexes,调用Inde2xes的Append方法,在Item项中输入索引名,Columns项中输入“测量时间”字段名,如图2中
[1]杨乐平,李海涛,肖相生.LabVIEW程序设计与应用
[M].北京:电子工业出版社,2001.
[2]蒋 波,陈昌文.利用ADO技术实现LabVIEW与数
据库的接口[J].中国仪器仪表,2004,(11):16-19.
[3]秘晓云,张彦斌,薛德庆,等.LabVIEW中利用LabS2
QL访问数据库[J].微计算机信息,2004,20(10):53-54.
[4]张彬斌,邵俊鹏,金婉如,等.LabVIEW和SQLServ2
er数据库之间的互访[J].哈尔滨理工大学学报,2005,10(1):14-16.
[5]杨乐平,李海涛,赵 勇,等.LabVIEW高级程序设
计[M].北京:清华大出版社,2003.
[6]潘锦玲,段其昌,张丛力.LabVIEW中利用ADO技术
实现发动机测功机数据采集系统数据库访问[J].仪器仪表学报,2004,25(4):321-324.
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net