陶佳琦,翁正新
VB访问Access数据库的研究
陶佳琦,翁正新
介绍了实现此过程的主要步骤和程序代码,以地铁列车故障诊断系统为例,设计了一种VB通过ADO方式访问Access数据库的方法,能对不同数据表中的数据进行多次检索,检索结果能按需求同时显示在VB的数据表格控件中。介绍了实现此过程的主要步骤和程序代码。
VB;Access数据库;地铁列车
在设计系统的过程中,数据库的程序设计是至关重要的,在程序运行过程中,更好地访问、检索及显示数据库中数据,能使程序更人性化、用户使用更便捷。地铁列车故障诊断系统数据库通过Access建立,维护人员在使用过程中,诊断系统会对数据库进行多次访问及检索从而给出诊断建议。本文针对地铁列车故障诊断系统,利用VB[1]中的ADO对象访问数据库,通过组合框控件及空的数据表作为数据存储中转点,使多次检索得到的多组数据能同时显示在VB的数据表格控件上,使维护人员能方便快捷地处理列车故障。
1.1 数据库的简介
Microsoft Office Access是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。Access数据库具有存储方式简单,易于维护管理、界面友好,易操作、集成环境,处理多种数据信息等优点[2~3]。地铁列车故障诊断系统数据库,如表1所示:
表1 地铁列车故障诊断系统数据库
案例表列车号;时间;故障类型;故障现象;故障原因;编号存储列车发生过的故障案例 有诊断建议表 故障原因;排查顺序;次数 程序运行中存储检索的数据 无
数据库构建完成后,需在VB中采用合适的方式进行数据访问,VB作为一款强大的编程软件,支持DAO、RDO、ADO等多种访问数据库的方式,比较分析后,本文采用ADO方式对数据库进行访问。
1.2 ADO简介
ADO(ActiveX Data Object)称为ActiveX数据对象,是微软公司开发数据库应用程序面向对象的新接口,ADO数据库接口继承了早期基于ODBC的DAO、RDO所使用的对象模型,并加以改进,包含了较少的对象、更多的属性方法和事件。ADO有 7个对象:Command(命令)对象、Conection(连接)对象、Recorsdet(记录集)对象、Parameter(参数)对象、Field(域)对象、Error(错误)对象和Property(属性)对象,其中Conection对象主要用于应用程序和数据源的连接;Command对象主要有执行命令函数Execute等; Recordset对象主要包括记录集移动函数、记录集打开及关闭函数、创建新记录函数、删除及更新函数等[4~6]。
2.1 设计原理
程序的原理设计如图1所示:
图1 原理设计图
程序首先通过ADO的Connection对象连接诊断系统数据库,随后,通过ADO的Recorsdet对象结合相应的Sql语句,检索数据库得到“故障原因”、“排查顺序”、“次数”字段,通过将数据转存至组合框控件及诊断建议表,最终使数据显示在数据表格控件中。
2.2 具体步骤
A. Connection对象连接数据库
在访问数据库之前需建立与数据源的连接并保持,这一过程通过ADO的Conneciton对象实现,在连接过程中,首先,将Access数据库引擎类型、是否保存安全信息、数据来源等信息赋予字符串str,随后,设定con为新的ADO连接,再将字符串str赋予con的连接字段串属性,最后,通过con的open函数完成数据库的连接,具体代码如下:
1) str = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;
2) Data Source=" & App.Path & "地铁列车故障诊断系统.mdb"
3) Set con = New ADODB.Connection
4) con.ConnectionString = str
5) con.Open
B. Recordset对象检索数据
在ADO数据库编程中,可通过Recordset对象进行检索、添加、修改记录等操作,在本程序中,首先,设定了一个新的记录集rs,然后,通过调用Open()函数打开记录集,执行Sql语句,Open()函数的各项参数依次为sql,con,adOpenDynamic(动态游标), adLockOptimistic(乐观锁定),最后,通过MoveNext(移动到后一条记录)、AddNew(增加新记录)、Update(更新记录集)等常用操作,结合组合框控件、数据表格控件完成数据的检索、转存及显示。
在程序的检索过程中,依次得到了“故障原因”、“排查顺序”、“字段”3个字段并存储在组合框控件中,以“列车触发紧急制动”这一故障现象为例,检索结果,如图2所示:
图2 检索结果
各个字段的检索、显示过程及程序代码如下:
1)“故障原因”字段检索及存储“故障原因”字段的过程如图3所示:
图3 检索及存储“故障原因”字段流程图
程序首先通过调用Open()函数执行Sql语句,检索得到“故障原因”字段,随后,通过Do While循环语句,将“故障原因”字段中的数据存入组合框控件中。
程序代码如下:
01 sql = "select 故障原因 from 故障 where 故障类型
02 in ('" & Combo1.Text & "') and 故障现象 in ('" & Combo2.Text & "') "
03 Set rs = New ADODB.Recordset
04 rs.Open sql, con, adOpenDynamic, adLockOptimistic
05 Do While Not rs.EOF
06 Combo3.AddItem rs("故障原因")
07 rs.MoveNext
08 Loop
09 rs.Close
2)“排查顺序”字段
“排查顺序”字段的检索及存储过程与“故障原因”字段类似,在此不再赘述,仅给出相应的程序代码如下:
01 sql = "select 排查顺序 from 故障 where 故障类型
02 in ('" & Combo1.Text & "') and 故障现象 in ('" & Combo2.Text & "') "
03 rs.Open sql, con, adOpenDynamic, adLockOptimistic
04 Do While Not rs.EOF
05 Combo5.AddItem rs("排查顺序")
06 rs.MoveNext
07 Loop
08 rs.Close
3)“次数”字段
在检索及存储“次数”字段的过程中,由于每一个故障原因都要检索发生过的案例次数,
每次检索均需要重复打开记录集、检索数据、存入组合框、关闭记录集这一过程,因此,在编程中采用For循环语句,通过将相应的组合框项目数作为条件,将各个故障原因的“次数”存入组合框控件中。程序代码如下:
01 For i = 0 To Combo3.ListCount -1
02 sql = "select count(*) from 案例 where 故障原因
03 like '%" & Combo3.List(i) & "%' and 故障现象 = '" & Combo2.Text & "' "
04 rs.Open sql, con, adOpenDynamic, adLockOptimistic
05 Combo4.AddItem (rs(0))
06 rs.Close
07 Next i
C. 诊断建议表转存数据
为了使检索得到的3个字段能同时在数据表格中显示,需要将3个字段的数据同时转存至Access的诊断建议表中,转存结果,如图4所示:
图4 转存结果
转存流程如图5所示:
图5 转存数据流程图
整个过程通过For循环语句完成,利用Open()函数执行相应的Sql语句,通过记录集的增加新记录、更新记录等操作将组合框中数据转存至Access诊断建议表中。
相关代码如下:
01 For i = 0 To Combo3.ListCount - 1
02 sql = " select * from 诊断建议"
03 rs.Open sql, con, adOpenDynamic, adLockOptimistic
04 rs.AddNew
05 rs.MoveLast
06 rs.Fields(0) = Combo3.List(i)
07 rs.Fields(1) = Combo4.List(i)
08 rs.Fields(2) = Combo5.List(i)
09 rs.Update
10 rs.Close
11 Next i
D. 数据表格控件显示数据
在显示数据的过程中,首先设置记录集游标服务的位置为adUseClient(本地游标库提供的客户端的游标)。随后,调用Open()函数打开记录集,执行Sql语句,将诊断建议表中的内容先按“次数”降序、再按“排查顺序”升序。最后,通过将记录集赋予数据表格控件的数据源,完成数据的显示过程。显示结果如图6所示:
图6 显示数据
程序代码如下:
01 sql = " select * from 诊断建议 order by 次数DESC,排查顺序 ASC"
02 rs.CursorLocation = adUseClient
03 rs.Open sql, con, adOpenDynamic, adLockOptimistic
04 Set DataGrid1.DataSource = rs
05 End If
06 End Sub
本文中提出的方法能很好地对Access数据库进行访问、检索及显示,使维护人员得到所需的数据,从而对地铁列车故障进行诊断,同时,该方法还有着很好的扩展性,针对不同程序背景,只需通过建立相应数量的组合框控件及空Access数据表,便能很好地对数据库进行多次检索,满足用户的不同需求。VB对数据库的处理有着强大的功能,在今后的系统开发中,应进一步对此加以研究应用,使程序更优化,用户操作更便捷。
[1] 国家863中部软件孵化器.Visual Basic从入门到精通[M].北京:人民邮电出版社,2010
[2] 高勇,符敢为.基于VC+ADO+Access的数据库访问技术在Pro/E环境下的实现[J] .机械设计与制造工程, 2013,42(3):14-17
[3] 董晶晶.基于VB与Access的人事信息管理系统设计[J].科技资讯, 2013(13):18-19
[4] 冯晓星,马晓静.VC基于ADO技术访问Access数据库[J].计算机与网络, 2013(8):54-56
[5] 贾保英.VB环境下ADO数据库开发技术[J].中小企业管理与科技, 2013(24):286-287
[6] 衣文凤,刘玫,王大鹏.Vb+Access在柴油机故障诊断系统界面记忆输入中的程序设计[J]. 科技创新导报, 2009(8):12-12
Study on VB Accessing to Access Database
Tao Jiaqi, Weng Zhengxin
(1.Department of Automation,Shanghai Jiao Tong University, Shanghai200240,China; 2. Rolling Stock Branch of Shanghai Rail Transit maintenance support Co.,Ltd., Shanghai200233, China)
Taking the fault diagnosis system of metro vehicle as an example, a method of VB accessing to Access database by ADO way is designed. This method is applied to retrieval the data from different data table. The retrieval results can be displayed on the VB datagrid control simultaneously according to the demand. The main process and the program code are also introduced.
VB; Access Database; Metro Vehicle
TP391
A
1007-757X(2014)10-0014-03
2014.05.15)
上海市自然科学基金(12ZR1415000)
陶佳琦(1987-), 男,上海,上海交通大学自动化系,硕士研究生,研究方向:故障诊断,上海,200240
翁正新(1966-),男,江苏,上海交通大学自动化系,副教授,博士,研究方向:故障诊断与容错控制,上海,200240