在VB中常用的数据库访问接口有三种,即DAO、RDO、ADO三种对象模式。三种模式的具体解释见上篇文章:
DAO/RDO/ADO,ODBC,OLEDB之间的关系
本篇文章我们重点介绍一下ADO的应用。
一:ADO的简介
ADO(ActiveX Data Object)是由微软公司开发的最新的数据库访问接口技术,因为ADO技术对OLEDB(Object Link and Embedding DataBase)进行了封装并实现了OLEDB所有的功能,所以ADO通过OLEDB可以访问任何类型的数据源,并且减少了编程量。ADO访问数据库的体系可以概括为:
二:基本流程:
ADO访问数据库的目标是访问、编辑和更新数据源,因此使用ADO进行数据访问时,一般需要经过一下步骤:
(1)创建一个数据源的连接,连接数据库。
Set objCn = NewConnection
strcn ="provider=microsoft.jet.oledb.4.0;persist security info=false;" &_
"data source=" &App.Path & "\实例1.mdb"
objCn.ConnectionString = strcn
objCn.Open
(2)设置一个命令来访问数据源的数据。
(3)执行命令。
Set objCmd = New Command
Set objCmd.ActiveConnection = objCn
With objCmd
.CommandText = "select * from 系统用户where 用户名 like ?" & "and 身份 like ?"
.CommandType = adCmdText
End With
Dim Parm As New Parameter
Set Parm =objCmd.CreateParameter("用户名", adVarChar, adParamInput, 10)
objCmd.Parameters.Append Parm
Set Parm =objCmd.CreateParameter("身份", adVarChar, adParamInput, 10)
objCmd.Parameters.Append Parm
(4)如果命令的执行导致返回数据库中表的某些行,则将他们保存在缓存中,产生相应的数据集对象,以便对其进行操作。
(5)通过数据集对象进行各种操作,包括修改,添加,删除等。
Private Sub Form_Load()
Set objCn = New Connection
objCn.Open "DSN=实例2DSN"
Set objRS = New Recordset
With objRS
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.Open "select * from 系统用户",objCn
End With
txtUsername =objRS.Fields("用户名").Value
txtPassword =objRS.Fields("口令").Value
txtMsg = objRS.AbsolutePosition &"/" & objRS.RecordCount '直接跳至某条记录
End Sub
(6)更新数据源,即将修改的结果返回数据源。
objRS.Update
(7)结束连接
Set objRS = Nothing
objCn.Close
Set objCn = Nothing
以上是ADO连接数据库的大概步骤,而实际应用时应根据具体情况灵活应用,有时可能只需执行部分步骤即可达到要求。
三:具体方法
在VB中,使用ADO访问数据库主要有两种方式:一种是使用ADO Date控件,通过对控件的绑定来访问数据库中的数据。一种是使用ADO对象模型,即编程访问方式(上面的举得例子就是这种方式)
1.使用ADO Data控件
可以快速建立数据绑定控件和数据提供者之间的连接。
在实现数据访问时,只需设置好ADO Data控件的数据相关的属性,无需编写程序代码或者只需少量的代码就可以实现数据访问,同时也可以结合DataGrid控件来实现数据的显示和修改。
具体步骤不在呈现!
2.使用ADO对象模型访问数据库
如上图,ADO对象模型共包括七个对象,三个主要对象和四个依赖于主要对象的对象集合,他们的关系可以概括为:
下面我们举一个简单的例子,访问数据库并执行一个简单的查询命令:
声明变量:
Dim objRS AsRecordset '用于保存数据源记录集
Dim objCn AsConnection '用于创建数据源连接
Dim isNeedSave AsBoolean '用于标识是否需要执行保存操作
Private SubForm_Load()
建立数据库连接:
Set objCn = New Connection '实例化Connection对象
strcn ="Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\数据库\db1.mdb"
objCn.Open strcn '建立数据库连接
'创建客户端的记录集
Set objRS = New Recordset
With objRS
.CursorLocation = adUseClient '指定游标位置
.CursorType = adOpenStatic '指定使用键集游标
.LockType = adLockOptimistic '指定锁定类型
.Open "SELECT * FROM 系统用户",objCn
End With
'显示第一个记录数据
txtUserName =objRS.Fields("用户名").Value
txtPassword =objRS.Fields("口令").Value
txtMsg = objRS.AbsolutePosition &"/" & objRS.RecordCount
End Sub
’善后工作:
Private SubForm_Unload(Cancel As Integer)
Set objRS = Nothing '释放记录集对象
objCn.Close '释放数据库连接
Set objCn = Nothing '释放连接对象
End Sub
两种ADO数据库访问方式的特点:
(1)使用ADO控件几乎封装了相应代码的所有功能,简化编程。但是也造成了它的灵活性较差,一般一个ADO Data控件只能在同一个数据源上打开一个记录集或者执行一个查询命令。而使用ADO对象模型就要灵活的多,可以建立独立的连接对象,可以在同一个数据源上打开多了记录集或执行多个命令。可动态的指定数据库的来源地。
(2)使用ADO Data控件可以简化操作过程,但功能上有所限制,很多功能都是静态的,在运行时很难改变。而使用ADO对象模型能够自由的控制各种操作。
(3)使用ADO Data控件在数据表记录的浏览、添加。修改上提供了简化操作,但如果数据库过大的话,就会造成效率低下。
也就是说:ADO控件最大的优点就是操作简单,但是灵活性和功能以及效率上没有ADO对象模型好。在使用时我们应该根据具体情况而定,用ADO Data控件访问小型的数据库应用程序,而大型的数据库应用程序的开发采用ADO对象模型来实现。
只是学习了一些皮毛,不对的地方欢迎大家指正!