1、第第1111章章 LabVIEWLabVIEW数据库编程数据库编程 11.1 LabVIEW数据库基础数据库基础11.1.1 LabVIEW数据库访问方法数据库访问方法LabVIEW本身并不具备直接访问数据库的功能,以本身并不具备直接访问数据库的功能,以LabVIEW编制的虚拟仪器系编制的虚拟仪器系统需要其它辅助的方法来进行数据库访问。在统需要其它辅助的方法来进行数据库访问。在LabVIEW中,通常借助以下三种方法对中,通常借助以下三种方法对数据库进行访问。数据库进行访问。 LabVIEW SQL Toolkit是是NI公司提供的用于数据库访问的附加公司提供的用于数据库访问的附加LabVIEW
2、工具工具包,工具包集成了一系列的高级功能模块,这些模块封装了大多数的数据库操作和包,工具包集成了一系列的高级功能模块,这些模块封装了大多数的数据库操作和一些高级的数据库访问功能。工具包需要购买且较昂贵,某些用户不能接受。一些高级的数据库访问功能。工具包需要购买且较昂贵,某些用户不能接受。 利用利用LabVIEW的的ActiveX功能,调用功能,调用Microsoft ADO控件,利用控件,利用SQL语言实现数语言实现数据库访问。据库访问。Microsoft ActiveX Data Objects(ADO)是微软最新的数据访问技术,)是微软最新的数据访问技术,可以用于编写通过可以用于编写通过O
3、LE DB提供者对在数据库服务器中的数据进行访问和操作的应提供者对在数据库服务器中的数据进行访问和操作的应用程序。该方法编程较复杂,对于大多数用户比较困难。用程序。该方法编程较复杂,对于大多数用户比较困难。 LabSQL是一个免费的、多数据库、跨平台的是一个免费的、多数据库、跨平台的LabVIEW数据库访问工具包,它也数据库访问工具包,它也是基于是基于ADO技术编写的。技术编写的。LabSQL的优点是易于理解,操作简单,不熟悉的优点是易于理解,操作简单,不熟悉SQL语言的语言的用户也可以很容易地使用,只需进行简单编程,就可在用户也可以很容易地使用,只需进行简单编程,就可在LabVIEW中实现数
4、据库访问。中实现数据库访问。利用利用LabSQL几乎可以访问任何类型的数据库,执行各种几乎可以访问任何类型的数据库,执行各种SQL查询,对记录进行各种查询,对记录进行各种操作。它最大的优点是源代码开放,并且是免费的。操作。它最大的优点是源代码开放,并且是免费的。 11.1.2 ODBC基础基础ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务,开放数据库互连)是微软公司开放服务结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准问的标准API(应用
5、程序编程接口)(应用程序编程接口) 。ODBC作为数据库与应用程序之间的一个公共接口,应用程序通过访问作为数据库与应用程序之间的一个公共接口,应用程序通过访问ODBC而不是直接访问具体的数据库来与数据库通信。而不是直接访问具体的数据库来与数据库通信。 针对每一类针对每一类DBMS有各自不同的有各自不同的ODBC驱动程序,由数据库厂商以动态链接库驱动程序,由数据库厂商以动态链接库的形式提供,实现的形式提供,实现ODBC函数调用与数据源交互。而数据源是函数调用与数据源交互。而数据源是ODBC到数据库的接到数据库的接口形式,它描述了用户需要访问的数据库以及相应的各种参数,如数据库所在的计口形式,它描
6、述了用户需要访问的数据库以及相应的各种参数,如数据库所在的计算机、用户及密码等信息。数据源名作为访问数据库的标识,因此在与数据库进行算机、用户及密码等信息。数据源名作为访问数据库的标识,因此在与数据库进行连接之前,必须在连接之前,必须在ODBC数据源管理器中建立数据库源。数据源管理器中建立数据库源。 以以Access数据库为例介绍数据库为例介绍ODBC数据源的建立过程,这个数据源将在后面的数据源的建立过程,这个数据源将在后面的例子中使用到,数据源是通过数据源名例子中使用到,数据源是通过数据源名DSN(Data Source Names)来标识的。)来标识的。 (1)首先需要在)首先需要在Acc
7、ess中建立一个中建立一个Access数据库(数据库(TESTDB.mdb)。)。(2)在)在Windows“控制面板控制面板”中利用中利用“数据源(数据源(ODBC)”,打开,打开“ODBC数据源数据源管理器管理器”对话框。对本地数据库来说,通常要在对话框。对本地数据库来说,通常要在“用户用户DSN”选项卡上创建一选项卡上创建一个项;对远程数据库,则在个项;对远程数据库,则在“系统系统DSN”选项卡上创建。任何情况下,都不能选项卡上创建。任何情况下,都不能在在“用户用户DSN”和和“系统系统DSN”选项卡上创建同名的项。选项卡上创建同名的项。 (3)选择)选择“用户用户DSN”选项卡,点击选
8、项卡,点击“添加添加”按钮,进入按钮,进入“创建新数据源创建新数据源”对话框,对话框,该对话框列出了当前该对话框列出了当前ODBC中所有已经中所有已经安装了的数据库驱动。选择要创建的安装了的数据库驱动。选择要创建的数据源的驱动程序数据源的驱动程序Microsoft Access Driver(*.mdb ) 。(4)点击)点击“完成完成”按钮,弹出按钮,弹出“ODBC Microsoft Access安装安装”对话框,设对话框,设置数据源名,例如置数据源名,例如MYDSN。在对话。在对话框框“数据库数据库”栏单击栏单击“选择选择”按钮,按钮,弹出弹出“选择数据库选择数据库”对话框选择第对话框选
9、择第(1)步创建好的)步创建好的Access数据库数据库TestDB.mdb,其他参数默认。,其他参数默认。 (5)点击)点击“选择数据库选择数据库”对话框和对话框和“ODBC Microsoft Access安装安装”对话框中的对话框中的“确定确定”按钮,完成了按钮,完成了DSN的创建与设的创建与设置,此时在置,此时在“ODBC数据源管理器数据源管理器”中中将看到新创建的将看到新创建的DSN。 (6)如需对该)如需对该DSN进行修改,可点击进行修改,可点击“ODBC数据源管理器数据源管理器”对话框中的对话框中的“配置配置”按钮进行重新配置。按钮进行重新配置。 ODBC数据源建立后,在数据源建
10、立后,在LabVIEW中就可以通过中就可以通过ADO与建立的数据源标识与建立的数据源标识DSN建立连接实现对数据库的访问。对于其它数据库,只要建立连接实现对数据库的访问。对于其它数据库,只要ODBC驱动程序已经安驱动程序已经安装的前提下建立装的前提下建立DSN的方法类似。的方法类似。 11.1.3 ADO数据访问技术数据访问技术ADO是一个用于存取数据源的是一个用于存取数据源的COM组件。它通过组件。它通过ODBC数据源实现与任何一数据源实现与任何一种数据库的连接,且具有格式简单的编程接口。种数据库的连接,且具有格式简单的编程接口。ADO提供了应用程序级的数据访问对象模型,该对象模型包含了七种
11、易于使提供了应用程序级的数据访问对象模型,该对象模型包含了七种易于使用的对象:用的对象:Connection、Command、Recordset、Field、Parameter、Error和和Property。一般情况下,。一般情况下,ADO数据库编程主要使用数据库编程主要使用Connection、Command和和Recordset三个核心对象。三个核心对象。 (1)Connection对象:数据连接对象,负责连接数据库,管理应用程序和数据库对象:数据连接对象,负责连接数据库,管理应用程序和数据库之间的通信。之间的通信。(2)Command对象:命令对象,完成一系列数据操作,如删除、插入、更
12、新、对象:命令对象,完成一系列数据操作,如删除、插入、更新、检索等。检索等。(3)Recordset对象:记录集对象,用来存储数据操作返回的记录集。对象:记录集对象,用来存储数据操作返回的记录集。11.2 LabSQL数据库访问数据库访问11.2.1 LabSQL的安装的安装 LabSQL是一个完全免费并开源的数据库访问工具,它支持是一个完全免费并开源的数据库访问工具,它支持Windows操作系统中操作系统中基于基于OBDC的数据库,包括的数据库,包括Access、SQL Server、Oracle、Pervasive、Sybase等。该等。该工具包可从工具包可从http:/ 11.2.2 L
13、abSQL VIs简介简介在在“LabSQL ADO functions”子选板中,子选板中,LabSQL VIs按照按照ADO对象分成了三类,对象分成了三类,分别放置在不同的子选板中:分别放置在不同的子选板中:Command、Connection和和Recordset。 (1)Command子选板:包括子选板:包括Command VIs模块,主要用于完成基本的模块,主要用于完成基本的ADO操作,操作,如创建或删除一个如创建或删除一个Command、对数据库中的某一个参数进行读或写等。、对数据库中的某一个参数进行读或写等。(2)Connection子选板:包括子选板:包括Connection
14、VIs模块,主要用于建立连接和完成与模块,主要用于建立连接和完成与连接相关的操作。连接相关的操作。(3)Recordset子选板:包括子选板:包括Recordset VIs模块,主要完成对数据库中数据记录模块,主要完成对数据库中数据记录进行各种操作,如创建或删除一条记录,对记录中的某一个条目进行读写等。进行各种操作,如创建或删除一条记录,对记录中的某一个条目进行读写等。 3个顶层的个顶层的VI:SQL Execute.VI、SQL Fetch Date (GetString).VI和和SQL Fetch Date.VI。这。这三个三个VI是将前面三个子是将前面三个子文件夹中的某些文件夹中的某些
15、VIs功功能进一步封装起来提供能进一步封装起来提供一个简单的接口,直接一个简单的接口,直接通过通过SQL语句来执行任语句来执行任何数据库操作。何数据库操作。 通过通过ADO Connection Create.vi可以建立一个数据连接对象并通过可以建立一个数据连接对象并通过“ADODB._Connection Out”端子输出。对于任何一个数据库操作,都必须先创建端子输出。对于任何一个数据库操作,都必须先创建一个数据库连接对象,因此创建数据库连接对象是实现数据库操作的第一步。一个数据库连接对象,因此创建数据库连接对象是实现数据库操作的第一步。ADO Connection Open.vi用于打开
16、一个已创建的数据库连接。其中用于打开一个已创建的数据库连接。其中“ADODB._Connection In”输入端口用于输入已创建的数据库连接,输入端口用于输入已创建的数据库连接,“ConnectString”为连接字符串输入端口,通过它设置数据源,用于指定所要打开的为连接字符串输入端口,通过它设置数据源,用于指定所要打开的数据库。数据库。 SQL Execute.vi是一个顶层的是一个顶层的VI,其主要由,其主要由“ADO Connection Execute.vi”、“SQL Fetch Date (GetString).vi”、“ADO Recordset Destroy.vi”三个三个
17、VI封装组成,封装组成,用于执行由用于执行由“Command Text”输入端所输入的输入端所输入的SQL数据库操作命令,该数据库操作命令,该VI可以执行可以执行各种数据库操作,但主要用于执行数据库各种数据库操作,但主要用于执行数据库SQL查询操作。查询操作。通过通过ADO Connection Close.vi用于关闭一个打开的数据库连接。通常在执行完用于关闭一个打开的数据库连接。通常在执行完数据库操作后,需要关闭数据库连接。数据库操作后,需要关闭数据库连接。 11.2.3 LabSQL 应用举例应用举例通过一些简单的应用示例来介绍通过一些简单的应用示例来介绍LabSQL的使用。示例的数据源
18、采用前面所建立的使用。示例的数据源采用前面所建立的数据源的数据源“MYDSN”,并在数据库,并在数据库TestDB.mdb中新建一个名为中新建一个名为TestTable的表,并输的表,并输入测试数据。入测试数据。 步骤:(步骤:(1)使用)使用ADO Connection Create.vi建立数据连接对象。建立数据连接对象。 (2)使用)使用ADO Connection Open.vi打开连接,通过打开连接,通过ConnectString设置数据源。设置数据源。 (3)使用)使用SQL Execute.vi执行执行SQL数据库查询命令,通过数据库查询命令,通过CommandText输入要输入
19、要执行的执行的SQL语句。查询结果通过语句。查询结果通过“Data”端口输出。端口输出。 (4)使用)使用ADO Connection Close.vi关闭与数据库之间的连接。关闭与数据库之间的连接。 SQL Execute.vi是一个顶层的是一个顶层的VI,通过该,通过该VI执行查询、添加、删除、修改等执行查询、添加、删除、修改等SQL数据库操作。本示例给出了利用数据库操作。本示例给出了利用LabSQL实现查询、添加、删除、修改数据库操作。实现查询、添加、删除、修改数据库操作。示例通过结合事件结构利用不同的事件来执行不同的数据操作。其中,利用超时示例通过结合事件结构利用不同的事件来执行不同的
20、数据操作。其中,利用超时事件子框架执行数据检索查询,这样在执行完添加、删除、修改记录等操作后能及时事件子框架执行数据检索查询,这样在执行完添加、删除、修改记录等操作后能及时将数据库中的记录重新检索出来,从而将数据库中记录的变化情况呈现出来。将数据库中的记录重新检索出来,从而将数据库中记录的变化情况呈现出来。 11.2 ADO数据库访问数据库访问ADO对象在对象在LabVIEW中是以中是以ActiveX对象的形式提供的。对象的形式提供的。ActiveX通过定义容器和通过定义容器和组件之间的接口规范组件之间的接口规范,使使遵循规范遵循规范编写的编写的控件,可以很方便地在多种容器中使用而控件,可以很
21、方便地在多种容器中使用而无无需需修改控件的代码。同样,一个遵循规范的容器修改控件的代码。同样,一个遵循规范的容器也也可以很容易地嵌入任何遵循规范的可以很容易地嵌入任何遵循规范的控件控件中中。在在LabVIEW中,中,ActiveX VI函数位于函数位于“互连接口互连接口” “ActiveX”子选板中。前面板子选板中。前面板对象对象“ActiveX容器容器”位于位于 “新式新式” “容器容器”子选板子选板 及及“经典经典”“经典容器经典容器”子选板子选板中中 。, 函数用于返回指向某个函数用于返回指向某个ActiveX对象的自动化引用句柄。对象的自动化引用句柄。“自动化引用句柄自动化引用句柄”为
22、输为输出提供对象类型。出提供对象类型。“机器名机器名”为打开的自动化引用句柄所在的机器。为打开的自动化引用句柄所在的机器。 “打开新实例打开新实例”值为值为TRUE,则创建新的实例,值为,则创建新的实例,值为FALSE则尝试连接已经打开的引用句柄的实例,则尝试连接已经打开的引用句柄的实例,成功则打开新的实例。成功则打开新的实例。“自动化引用句柄自动化引用句柄”输出是与输出是与ActiveX对象关联的引用句柄。对象关联的引用句柄。使用时,利用快捷菜单使用时,利用快捷菜单“选择选择ActiveX类类”选项,可为对象选择类。引用句柄打开选项,可为对象选择类。引用句柄打开后可传递到其它后可传递到其它A
23、ctiveX函数。该函数的输入仅接受可创建的类。函数。该函数的输入仅接受可创建的类。 函数在引用上调用方法或动作。大多数方法有其相关参数,该节点的操作与调函数在引用上调用方法或动作。大多数方法有其相关参数,该节点的操作与调用节点的操作相同。用节点的操作相同。“引用引用”为与调用方法或实现动作的对象关联的引用句柄。为与调用方法或实现动作的对象关联的引用句柄。 如如“调用节点调用节点”类为应用程序或类为应用程序或VI,则无需为该输入端连接引用句柄。对于应用程序,则无需为该输入端连接引用句柄。对于应用程序类,默认值为当前应用程序实例。对于类,默认值为当前应用程序实例。对于VI类,默认值为包含类,默认
24、值为包含“调用节点调用节点”的的VI。“输入输入1.n”是方法的范例输入参数。是方法的范例输入参数。“引用输出引用输出”返回无改变的返回无改变的“引用引用”。“返回返回值值”是方法的范例返回值。是方法的范例返回值。“输出输出1.n”是方法的范例输出参数。是方法的范例输出参数。 该函数用于关闭已打开的该函数用于关闭已打开的VI、VI对象、打开的应用程序实例或对象、打开的应用程序实例或.NET及及ActiveX对象相关联的引用句柄。对象相关联的引用句柄。 示例数据源仍采用前面所建立的数据源示例数据源仍采用前面所建立的数据源“MYDSN”,数据库为,数据库为TestDB.mdb,表,表为为TestT
25、able。 在前面板上放置在前面板上放置“自动化引用句柄自动化引用句柄”控件;控件; 利用快捷菜单利用快捷菜单“选择选择ActiveX类类”“浏览浏览”选项;弹出选项;弹出“从类型库中选择对从类型库中选择对象象”对话框;对话框; 在在“类型库类型库”下拉列表中选择下拉列表中选择Microsoft ActiveX Data Objects 2.8 Library Version 2.8,在,在“对象对象”列表栏中出现该库对列表栏中出现该库对LabVIEW可用的对象,选中可用的对象,选中“Connection”对象;对象; 单击单击“确定确定”按钮即创建一个按钮即创建一个ADO的对象,此时对应程序
26、框图也对应创建一的对象,此时对应程序框图也对应创建一个对象节点个对象节点“ADODB._Connection”。 同样方法可以建立同样方法可以建立“Command”、“Recordset”等对象。等对象。 在程序框图中放置在程序框图中放置“打开自动化打开自动化”节点,将其节点,将其“自动化应用句柄自动化应用句柄”输入端口与输入端口与“ADODB._Connection”相连即可打开相连即可打开Connection对象。对象。 在程序框图放置在程序框图放置“调用节点(调用节点(ActiveX)” ,将,将“引用引用”输入端与输入端与“打开自动化打开自动化”节点节点“自动化应用句柄自动化应用句柄”
27、输出相连。利用快捷菜单输出相连。利用快捷菜单“选择方法选择方法”“open”,将节点,将节点设置为设置为“open”调用方法。其中调用方法。其中“ConnectionString”是连接到数据源的字符串,是连接到数据源的字符串,“UserID”和和“Password”是用户名和密码,正确设置这些参数后便可连接到数据是用户名和密码,正确设置这些参数后便可连接到数据源。本例利用字符串常量源。本例利用字符串常量“DSN=MYDSN”指定数据源,无用户名和密码。指定数据源,无用户名和密码。与上一步相同,用与上一步相同,用“调用节点(调用节点(ActiveX)”调用调用Connection对象的对象的E
28、xecute方法方法执行所要的操作。执行所要的操作。Execute方法所必需的参数为方法所必需的参数为CommandText,这里为所要执行的,这里为所要执行的SQL语句。本例给定的语句。本例给定的SQL语句为语句为“SELECT * FROM TestTable;”,表示从数据库,表示从数据库中查询数据。也可以使用其它中查询数据。也可以使用其它SQL语句来执行其它数据库操作,如用语句来执行其它数据库操作,如用Create命令创建命令创建表、用表、用Drop命令删除表、用命令删除表、用Insert命令向表中插入数据、用命令向表中插入数据、用Delete命令删除数据等。命令删除数据等。 对执行命
29、令后的记录进行显示或读取字段的值需要建立对执行命令后的记录进行显示或读取字段的值需要建立Recordset对象,并与执对象,并与执行节点的行节点的Execute端子相连。在程序框图上放置一个端子相连。在程序框图上放置一个“调用节点(调用节点(ActiveX)”并将其并将其“引用引用”输入端口连接至执行查询命令的输入端口连接至执行查询命令的“调用节点(调用节点(ActiveX)”的的“Execute”输输出端口。并在该节点的右键菜单中选择出端口。并在该节点的右键菜单中选择“选择方法选择方法”“GetString”,之后在节点的,之后在节点的“GetString”输出端以字符串形式输出结果。输出端
30、以字符串形式输出结果。 对数据库访问操作完毕后要及时关闭连接对象以释放内存和所用的系统资源。首对数据库访问操作完毕后要及时关闭连接对象以释放内存和所用的系统资源。首先使用先使用Connection对象的对象的Close方法关闭数据库连接,然后用方法关闭数据库连接,然后用“关闭引用关闭引用”关闭关闭ActiveX自动化参数号。自动化参数号。11.3 LabVIEW SQL Toolkit数据库访问数据库访问该工具包是该工具包是NI开发的附加工具包之一,它具有完整的开发的附加工具包之一,它具有完整的SQL功能,与本地或者远程功能,与本地或者远程数据库可直接交互式操作,且无需进行数据库可直接交互式操
31、作,且无需进行SQL编程即可对数据库进行操作。将该工具包编程即可对数据库进行操作。将该工具包安装在安装在LabVIEW目录下后,重启目录下后,重启LabVIEW后在后在“函数选板函数选板”“互连接口互连接口”下将出现下将出现一个一个“Database”子选板,该子选板列出了所有该工具包提供的有关数据库操作的子选板,该子选板列出了所有该工具包提供的有关数据库操作的VI函数。函数。LabVIEW SQL Toolkit支持支持ADO所支持的所有的数据库引擎。不使用所支持的所有的数据库引擎。不使用SQL语句语句就可以实现数据库记录的查询、添加、修改以及删除等操作,使用就可以实现数据库记录的查询、添加
32、、修改以及删除等操作,使用SQL语句能够实现语句能够实现复杂的数据库操作,功能强大,但其昂贵的价格对于很多用户来讲是不能承受的。复杂的数据库操作,功能强大,但其昂贵的价格对于很多用户来讲是不能承受的。这也限制了它的推广应用。这也限制了它的推广应用。 首先使用首先使用“DB Tools Open Connection.vi”VI函数节点打开数据库连接,该函数节函数节点打开数据库连接,该函数节点有点有 “path”和和“string”两种工作模式。本例利用快捷菜单两种工作模式。本例利用快捷菜单“选择类型选择类型”“DB Tools Open Connec (String)”选项设置为选项设置为“s
33、tring”模式,并在模式,并在“connection information”输入端口指定其数据源字符串输入端口指定其数据源字符串“DSN=MYDSN;”。 利用利用“DB Tool Select Data.vi”函数节点检索数据,函数节点检索数据,“table”端口用于指定查询数据端口用于指定查询数据的表。查询结果从的表。查询结果从“data”输出端以变体类型输出,在程序中利用输出端以变体类型输出,在程序中利用“变体至数据转变体至数据转换换”函数节点将数据转换为二维数组并通过表格输出。函数节点将数据转换为二维数组并通过表格输出。 最后利用最后利用“DB Tool Close Connection.vi”函数节点关闭数据库连接,释放资源。函数节点关闭数据库连接,释放资源。