引言
著名的数据库管理系统有SQL Server、Oracle、DB2、Sybase ASE、Visual ForPro、Microsoft Access 等。Microsoft Access 是在Windows 环境下非常流行的桌面型数据库管理系统,它作为Microsoft office 组件之一,安装和使用都非常方便,幵且支持SQL 语言,所以本文将基于Access 来介绍数据库的操作。
建立数据源
实现数据库功能的第一步便是建立数据源,下面将详述整个过程。在Access 中建立一个数据库。LabVIEW 数据库工具包只能操作而不能创建数据库,所以必须借助第三方数据库管理系统,比如Access,来创建数据库。本文的大型数据库范例程序是iPhone 测试,所以先建立一个名为iPhoneData.mdb 的数据库文件,如图1.1 所示。
1.1
建立与数据库的连接
在利用LabVIEW 数据库工具包操作数据库之前,需要先连接数据库,这就像操作文件之前,先要打开文件一样。连接数据库有两种方法:
1. 利用DSN 连接数据库
LabVIEW 数据库工具包基于ODBC(Open Database Connectivity)技术,如图1.2 所示,在使用ODBC API 函数时,需要提供数据源名DSN(Data Source Names)才能连接到实际数据库,所以我们需要首先创建DSN。
图1.2 LabVIEW 数据库工具包基于ODBC 技术
【背景知识】ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,幵提供了一组对数据库访问的标准API(应用程序编程接口)。这些API 利用SQL来完成其大部分任务。ODBC 本身也提供了对SQL 语言的支持,用户可以直接将SQL 语句送给ODBC。
在“Windows 控制面板”中双击“管理工具”,然后双击“数据源” ,迚入ODBC 数据源管理器,如图1.3 所示。
图1.3 ODBC 数据源管理器
User DSN(用户数据源名)选项卡下建立的数据源名只有本用户才能访问,System DSN(系统数据源名)选项卡下建立的数据源名在该系统下的所有用户都可以访问。User DSN 选项卡下点击“Add”按钮,会弹出数据源驱动选择对话框,然后选择Microsoft Access Driver(*.mdb),如图1.4 所示。
图1.4 数据源驱动选择对话框
点击“Finish”按钮后,会弹出ODBC Microsoft Access Setup 窗口,在Data Source Name 填入一个名字,比如iPhoneData,然后在Database 栏中单击Select 按钮选择先前已经建立好的iPhoneData.mdb 数据库文件,其它参数保持默认,单击OK 按钮,如图1.5 所示。
图1.5 ODBC Microsoft Access Setup 窗口
完成上述设置后,就可以在User DSN 选项卡下看到新建的DSN 了。单击OK 按钮完成DNS 的建立。打开随本文的程序:ConnectionExample.vi,在DSN Name 中填入刚建好的DSN 名幵运行,如图1.6 所示。
图1.6 利用DSN 连接数据库
【注意】使用DSN 连接数据库需要考虑移植问题,当你把代码发布到其它机器上时,需要手动为其重新建立一个DSN。
2. 利用UDL 连接数据库
Microsoft 设计的ODBC 标准只能访问关系型数据库,对非关系型数据库则无能为力。为解决这个问题,Microsoft 还提供了另一种技术:Active 数据对象ADO(ActiveX Data Objects)技术。ADO 是Microsoft 提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据。ADO使用通用数据连接UDL(Universal Data Link)来获得数据库信息以实现数据库连接。在iPhoneData.mdb 所在的文件夹下点击鼠标右键->新建->Microsoft Data Link,如图1.7 所示,幵把文件命名为“iPhoneData.udl”。
图1.7 新建UDL 文件
双击“iPhoneData.udl”,打开Data Link Properties 对话框,在Provider 选项卡中选择Microsoft Jet 4.0 OLE DB Provider,如图1.8 所示,并点击Next>>按钮。
图1.8 选择Provider
在Connection 选项卡中,选择已建立好的数据库文件,然后点击Test Connection 按钮,如果没有什么问题的话,会弹出Test Connection succeeded 的对话框,如图1.9 所示。
图1.9 选择数据库源
创建好UDL 后,打开随本文的程序:ConnectionExample.vi 在DSN Name 中填入刚建好的DSN名并运行,如果成功的话,会如图1.10 所示。
图1.10 利用UDL 连接数据库
数据库连接的可移植性问题(高级话题)
用文本编辑器打开刚新建的“iPhoneData.udl”文件,其内容如下所示:
[oledb]; Everything after this line is an OLE DB initstringProvider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\Doc\ApplicationNotes\DatabaseAppNotes\data\iPhoneData.mdb;Persist Security Info=False
分号(;)后面的内容是注释可以不用搭理。Data Source 后面是数据库的绝对路径,所以,当数据库文件位置变化后,程序就会出错。
我们可以直接把“ iPhoneData.udl ” 文件中的信息重新生成, 然后传给DB Tools Open
Connection .vi,如图1.11 所示。具体的实现可以参看本文附带的范例。图1.11
图1.11 GetDBPath.vi
在后面的程序中,本文都将使用 GetDBPath.vi 来获得数据库的位置信息,然后传给DB
Tools Open Connection .vi。
数据库基本操作
数据库是以表的形式来记录数据的,如图1.12 所示,大家可以用Access 打开一个数据库文件来体验一下。
图1.12 数据库里的表格
数据表的每一行,表示一条记录(Record);每一列,表示记录中的字段(Field),说的通俗点就是记录中的一项内容,比如测试时间。能够唯一标识表中某一行的属性或属性组,叫主键(Primary Key),一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、初除的时候不会出现张冠李戴的错误。
创建数据表由LabVIEW 数据库工具包中的实现。参数中的Table,为被创建的数据表表名,Column Information 指定表格每一列的属性,如图1.13 所示。
图1.13 column information
需要注意的是column information 中的Data type 设置部分,LabVIEW 的数据类型有许多种,而这里的Data type 选项只有几种,所以必须清楚LabVIEW 数据类型和Column information 中的Data type 的对应关系,如表1.1 所示。
表1.1
知道了这个对应关系后,创建数据库表格便是一件很容易的事情,范例程序如图1.14 所示,具体代码请参考CreateTable.vi。
图1.14 创建数据库表格代码
如果数据库表格创建成功,大家可以用Access 打开数据库,看到自己创建的表格。
删除一个表格
与数据库表格创建相对应的是数据库表格初除,由实现。将需要初除的数据库的名字告诉DB Tools Drop Table.vi 即可完成数据库表格的初除操作。具体实现如图1.15 所示。
图1.15 删除数据表格
【分享】表格创建和初除的参数非常相似,可以很方便的在一个VI 里面同时实现表格的创建和删除操作。
添加一条记录
添加一条记录由来实现,DB Tools Insert Data.vi 需要三个主要的参数:table(数据表名)告诉DB Tools Insert Data.vi 往数据库里的哪个表格插入数据;data,告诉DB Tools Insert Data.vi 插入什么数据;columns 对应插入的列的名字,其数据类型是一个字符串数组。添加记录的范例程序如图1.16 所示。
图1.16 添加一条记录
LabVIEW 数据库工具包提供了一个工具VI ,可以把指定数据表的column 名字读出来传给DB Tools Insert Data.vi,这样可以省去手动输入column 名字的工作。
查询一条记录
数据能存储到数据库之后,下一个要考虑的操作即是如何把数据读出。把数据从数据库中读出的VI是
,我们只需要告诉DB Tools Select Data.vi 读取哪个数据表格,DB Tools Select Data.vi 就会把该表格中的所有数据读出来,如图1.17 所示。
图1.17 从数据库中读出数据
从DB Tools Select Data.vi 读出的数据是动态数据类型,需要通过Database Variant To Data.vi 函数把动态数据类型转换成正确的数据类型。
大多数情况下,我们并不需要把数据库中的数据全部读出来。比如,数据库中已经有1000 条记录了,每次都要把1000 条记录读出来,费时费力。
LabVIEW 数据库工具包完全支持SQL 语言,在DB Tools Select Data.vi 的optional clause 输入端按照SQL 语法输入条件语句,即可读出感兴趣的数据。SQL 语言非常简单,如果从来没有接触过SQL语言,可以花一点时间学习一下。LabVIEW 数据库工具包的用户手册附录A 上有SQL 的快速参考手册。SQL 的条件查询语法格式如图1.18 所示。
图1.18 SQL 的条件查询语法格式
DB Tools Select Data.vi 已经把SELECT 语句预先集成好了,我们只需要在optional clause 输入端加入WHERE 语句部分即可,如图1.19 所示。范例程序从TestResult 这张表里把字段TestTime 等于字符串“2008-8-27 16:24:34”的记录读出来。
图1.19 读出感兴趣的数据
【参考知识】WHERE 语句可包括各种条件运算符:比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<范围运算符(表达式值是否在指定的范围):BETWEEN…AND… NOT BETWEEN…AND…列表运算符(刞断表达式是否为列表中的指定项):IN (项1,项2……) NOT IN (项1,项2……)模式匹配符(刞断值是否与指定的字符通配格式相符):LIKE、NOT LIKE空值刞断符(刞断表达式是否为空):IS NULL、NOT IS NULL逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR
数据库高级操作
数据库操作除了创建表格、初除表格、添加记录、查询记录外,常用的还有初除记录、更新现有数据等操作。由于这些操作幵没有现成的VI,所以需要借助SQL 语言来实现。
在LabVIEW 中执行SQL 语言案例研究
如前所述,绝大部分DBMS 都支持SQL 语言,LabVIEW 数据库工具包实现的实质也是基于SQL语言,它为不熟悉SQL 语言的用户把SQL 语言封装了起来,以方便他们使用。上面的操作都是基于已封装好的VI。
双击DB Tools Select Data.vi,打开它的程序框图,如图1.20 所示,让我们一起来研究一下它的实现过程。
图1.20 DB Tools Select Data 的代码实现
如图1.20 所示,DB Tools Select Data.vi 先创建了SQL 语句,然后用DB Tools Excute Query.vi 来执行SQL 语句,以此实现对数据库的操作。
在教程中,我们也沿用这种模式,直接用SQL 来实现LabVIEW 数据库工具包中没有提供的功能。
用SQL 实现数据查询操作
了解了LabVIEW 如何执行SQL 语言后,我们可以重新实现0 查询一条记录的功能,范例程序如图1.21 所示。
图1.21 用SQL 查询记录
用SQL 实现初除一条记录
通过查阅SQL 参考手册,我们知道初除一条记录的语句是“detele”,其语法为:
DELETE FROM table_nameWHERE column_name = some_value
参考图1.21,我们很容易实现初除一条记录的操作,如图1.22 所示。
图1.22 删除一条记录
在使用“detele”语句时,需要注意:
1. “detele”语句不能初除单个字段的值,只能初除一行、多行、所有行或一行也不初除;2. “detele”语句仅能初除记录,不能初除表本身;初除表要用“drop”语句,这也是为什么LabVIEW 数据库工具包中初除表的VI 叫Drop Table。
压缩数据库,释放多余空间
删除了记录后,你会惊奇的发现数据库文件幵没有减小,就算把所有的数据全部都初除掉,结果也一样。这是因为数据库在使用一段时间后,时常会出现因数据初除而造成数据库中空闲空间太多的情况,这时就需要减少分配给数据库文件和事务日志文件的磁盘空间,以免浪费磁盘空间。
Microsoft 提供了一个压缩数据库的方法,请参考How To Compact Microsoft Access Database Through ADO。其基本思想是,使用ADO 的扩展: Microsoft Jet OLE DB Provider and Replication Objects (JRO)中的方法:CompactDatabase。Jet 对象在文件Msjro.dll 里面,如图1.23 所示。
图1.23 Msjro.dll 文件
下面将简单介绍一下在LabVIEW 中访问Jet 对象的方法:
在前面板上放一个Automation Refnum.vi,在右键菜单中选择”Select Active Class”->”Browse…”,如图1.24 所示。
图1.24 选择Jet Engine
在弹出的Select Object From Type Library 窗口中点击Browse 按钮,按照图1.24 所示的路径选择Msjro.dll。然后在Objects 选择框中选择JetEngine(JRO.JetEngine.2.6),点击OK 按钮,如图1.25 所示。
图1.25 选择Jet 对象
在程序框图中放置一个方法节点,幵选择方法CompressDatabase,如图1.26 所示。到此为止,就实现了在LabVIEW 中调用Jet 对象的CompressDatabase 方法。
图1.26 调用CompressDatabase 方法
由于这个方法仅仅对原数据库做了一个压缩后的备份,所以,还需要把原文件移除,用这个备仹来替代原数据库文件。详细实现请参考Access File Compress Database.vi。
用SQL 实现修改数据操作SQL 中,修改一条记录的语句是“update”,其语法为:
UPDATE table_nameSET column_name = new_valueWHERE column_name = some_value
修改一条记录的范例程序,如图1.27 所示:
图1.27 修改一条记录
总结
本章介绍了大多数最常用的数据库操作及在LabVIEW 平台下的实现方法。SQL 语言是一种数据库操作的通用语言,不仅在LabVIEW 数据库工具包中可以用到,在其它语言(如VB,VC)平台下也可以使用。希望大家通过上面的操作不仅学习了LabVIEW 数据库工具包,也熟悉了SQL 语言。
工程项目要求
读者学完labVIEW 数据库工具包后,可以按照如下要求,实现一个测试项目工程:
1. 测试iPhone 的Power 是否合格;
2. 测试iPhone 耳机的THD 曲线;
3. 测试iPhone 的触摸屏;
4. 测试iPhone 麦克风的声压级(SPL);
5. 完成测试后,把这些测试结果记录到数据库中;
6. 能够读入数据库,幵能按要求检索数据;
7. 能按照测试时间等内容对结果迚行升序或降序排列。
该工程项目的界面如图2.1 和图2.2 所示。
图2.1 iPhone 测试界面
图2.2 iPhone 测试数据分析界面
具体代码可以参考随本文的范例:DatabaseExample.lvprj。
生成可执行文件(*.exe)
我们讨论了数据库连接的可移植性问题,如果使用本文介绍的方法,则在生成可执行文件的过程中不用关心UDL 文件等问题。在生成可执行文件的过程中唯一需要注意的是把所用到的数据库文件添到到可执行文件的支持文件(Support files)中去。
步骤一:把数据库文件添加到工程中去,如图3.3 所示。步骤二:在Build specification 的Source file 选项中,把数据库文件iPhoneData.mdb 添加到Support file 中,这样iPhoneData.mdb 会被加入Support Directory。如图2.4 所示。
其它设置与通常生成可执行文件的基本步骤一样,点击”Build”按钮即可生成可执行文件。
图2.3 把数据库文件添加到工程
图2.4 把数据库文件添加到Support files 中
如果出现生成的可执行文件无法执行数据保存和检索的操作,请检查执行文件和数据库文件的相对路径是否正确。
生成安装文件(Installer)
生成安装文件,我们所要考虑的问题是,目标机上是否有对LabVIEW 数据库工具包的支持——MDAC2.5。
LabVIEW 数据库工具包已经自带了MDAC2.5 的安装文件——mdac_typ.exe,所以,我们需要把mdac_typ.exe 添加到安装文件中去。让安装文件在安装过程中把MDAC2.5 替我们装到目标机上。
步骤一:把mdac_typ.exe 添加到工程中,如图2.5 所示。mdac_typ.exe 在LabVIEW 安装路径\National Instruments\LabVIEW 8.2\Database\MDAC 中。
图2.5 把mdac_typ.exe 添加到工程中
步骤二:在Source File 里面先把已编译好的可执行文件添加到ProgramfileFolder 中去,然后把mdac_typ.exe 添加到data 文件夹中去,如图2.6 所示。
图2.6 把mdac_typ.exe 添加到data 文件夹中
步骤三:在Advanced 设置窗口中,把mdac_typ.exe 添加到Run Executable after installation 中,如图2.7 所示。
图2.7 添加mdac_typ.exe 到Run Executable after installa
其余步骤与通常制作安装文件的步骤一致,最后点击Build 即可生成安装文件了。
到此,大功终于告成了,还等什么,赶快亲手去试试。
最后:
眼见为实,耳听为虚,任何事都要亲自付以行动才能真真正正的理解。在LabVIEW 这样一个
非常适合工程师和科学家的平台上,多尝试,多实践是工程能力增长的不二法门。
本说明肯定存在不少问题,有任何问题,可以和我联系,真心希望能与大家一起分享一起讨论。
联系客服