l LockType:可读写Long类型,指定打开Recordset所使用的记录锁定的方法。默认值是只读,对应于forward-only游标的只读特性。
l MaxRecords:可读写Long类型,指定SELECT查询或存储过程返回的最大记录条数,默认值为0,即全部返回。
l RecordCount:只读Long类型,如果Recordset支持近似定位或支持书签,则返回带可流动游标的Recordset所含有的记录数;如果不支持,必须使用MoveLast方法以取得确实覆盖了所有记录的准确的RecordCount数值。
l Source:可读写String类型,可以是SQL语句、表名、存储过程或相关Command对象名。如果提供了Command对象名,则Source将返回Command.CommandText的值。利用Open方法的参数LngOption可以指定提供给Source值的类型。
l Status:只读Long类型,表明对Recordset进行批处理或其他多记录(Bulk)操作后的状态。
(2)该对象的常用方法
l AddNew:向可更像你的Recordset添加一条新记录。
l Cancel:取消异步查询的执行,终止存储过程或复合SQL语句创建的多个Recordset。
l CancelBatch:取消LockEdit值为BatchOptimistic的Recordset的即将生效的批量更新操作。
l Close:关闭Recordset对象,以后可以重新设置Recordset的属性并使用Open方法来再度访问Recordset。
l Delete:如果Recordset的LockEdit属性值未设为adLockBatchOptimistic,则立刻从Recordset和相应的表中删除当前记录。
l Move:从当前记录移动记录指针。MoveFirst是移动记录指针到第一条记录;MoveLast是移动记录指针到最后一条记录;MoveNext是移动记录指针到下一条记录;MovePrevious是移动记录指针到上一条记录。
l Open:在一个活动Command或Connection对象上打开一个Recordset。
l Requery:重新从表中获取Recordset的内容,等效于Close后再Open。它是一个资源集中型操作。
l Resync:重新从表中获取部分Recordset的内容。
l Update:使对Recordset的修改对底层数据源中的表生效。对于批量操作,Update方法只使修改对本地Recordset生效。
l UpdateBatch:使对指针类型的Recordset(LockType属性值为adBatchOptimistic,CursorType属性值为adOpenKeyset或adOpenStatic)所做的修改对底层数据源中的表生效。
要想在程序中使用ADO对象,必须先为当前工程引用ADO的对象库。引用方式是单击菜单【工程】/【引用】命令,打开【引用】对话框,在列表中选中【Microsoft ActiveX Data 0bject 2.0 Library】或ADO的其他版本选项,如图7-24所示。

图7-24 【引用】对话框
使用ADO对象编程的大致流程如下:
(1)打开Connection对象
打开一个到数据源的连接,即Connection对象的VB代码如下:
Dim cn As ADODB.Connection '声明ADODB.Connection对象变量
Dim strCN As String '声明存放连接串的字符串变量
Set cn = New Connection
'实例化Connection对象,生成连接串(ConnectionString)对不同的数据源有不同的连接串
strCN = "Provider=Microsoft.Jet.Oledb.3.51;User ID=Admin;"& _
"Data Source=D:\VB6\STUDNET.mdb;"
cn.Open strCN ' 调用Connection对象的方法Open连接数据源
除了使用Connection对象的Open方法以外,还可通过Recordset对象的Open方法快捷地创建到数据源的连接。这充分体现了ADO的灵活性。
利用Connection对象能连向不同数据库,常用的连接方式有:
1)strCN="Provider=SQLOLEDB.1;User ID=sa;Password=;Initial Catalog=student;Data Source=qxz"
其中SQLOLEDB.1为提供者,表示由OLE DB连接SQL Server,User ID指定用户名,Password指定用户口令,Initial Catalog指定连接的数据库名,Data Source指定数据库服务器名。
2)strCN="Provider=MSDASQL.1;User ID=sa;Password=sa;Initial Catalog=Student;Data Source=student;"
其中MSDASQL.1为提供者,表示由ODBC连接SQL Server,这里Data Source指定的是ODBC数据源名,其它参数含义同上。
3)strCN="FileDSN=studentinfo.dsn;UID=sa;PWD=sa" '通过文件数据源连接,其中studentinfo.dsn为预先创建的文件ODBC数据源。
4)strCN="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=student.mdb" 'Microsoft.Jet.OLEDB.4.0连接ACCESS数据库
5)strCN="Provider=MSDAORA.1;Password=tiger;User ID=scott;Data Source=mydb;Persist Security Info=True" '连接到Oracle数据源,mydb为数据库
(2)创建Command对象
Dim cmd As ADODB.Command '定义Command对象cmd
Set cmd=New Command '实例化Command对象cmd
(3)执行查询(以Command对象为例)
Dim rs As New ADODB.Recordset '定义Recordset对象rs
Set cmd.ActiveConnection = cn '命令对象cmd的连接绑定到连接对象cn
cmd.CommandText ="SELECT * from student" '指定SQL命令
Set rs = cmd.Execute '执行查询,并把返回的记录集放在记录集对象rs中。
上述的代码仅仅是一种查询途径,此外,ADO的Connection对象的Execute方法和Recordset对象的Open方法也提供了查询能力。返回的结果可以被保存在一个Recordset对象实例中以便后续的数据处理和操纵。例如:
Dim rs As New ADODB.Recordset
rs.Open cmd,cn,adOpenDymanic,adLockBatchOptimistic 'Recordset对象通过连接对象cn,命令对象cmd打开记录集。
其中adOpenDymanic为游标类型,游标类型含义参阅如下:
l adOpenDynamic用于查看其他用户所作的添加、更改和删除,并用于不依赖书签的Recordset中各种类型的移动。如果提供者支持,可使用书签。
l adOpenKeyset其行为类似动态游标,不同的只是禁止查看其他用户添加的记录,并禁止访问其他用户删除的记录,其他用户所作的数据更改将依然可见。它始终支持书签,因此允许Recordset中各种类型的移动。
l adOpenStatic提供记录集合的静态副本以查找数据或生成报告。它始终支持书签,因此允许Recordset中各种类型的移动。其他用户所作的添加、更改或删除将不可见。这是打开客户端(ADOR)Recordset对象时唯一允许使用的游标类型。
l adOpenForwardOnly除仅允许在记录中向前滚动之外,其行为类似静态游标。这样,当需要在Recordset中单程移动时就可提高性能。
命令中adLockBatchOptimistic指定锁定(并发)类型,锁定(并发)类型与含义如下:
l adLockReadOnly(默认值)只读——不能改变数据。
l adLockPessimistic保守式锁定(逐个)——提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录。
l adLockOptimistic开放式锁定(逐个)——提供者使用开放式锁定,只在调用Update方法时才锁定记录。
l adLockBatchOptimistic开放式批更新——用于批更新模式(与立即更新模式相对)。
记录集常用属性还有CursorLocation,它有两个值为:adUseClient与adUseServer,表示是使用服务器端游标还是使用客户端游标,设置方式为:
rs.CursorLocation = adUseClient
另外在SQL脚本的生成方式上,通常可以借助Parameters/Parameter对象来完成。
(4)显示和操纵数据
查询结果由Recordset对象封装。对数据的操纵可以通过Recordset对象提供的成员(属性和方法)来完成。
rs.MoveFirst '将游标指针移到第一条记录
Do While Not rs.EOF '判断EOF标记属性(End of file)
Debug.Print rs!sno & vbTab & rs!sname & VbTab & rs!ssex
rs.MoveNext '将游标指针移到下一条记录
Loop
上述代码将Recordset中的各行记录打印在Visual Basic的立即执行窗口中。
(5)更新记录
使用Recordset对象来完成Update操作。
rs.Close '关闭之前建立的结果集à打开新的结果集,具有写操作权限
rs.Open "Customers",cn,adOpenDynamic,adLockOptimistic,adCmdTable
rs.MoveFirst '虽无必要,但可能是一个良好的习惯
rs!sname="李淘" '对相应字段赋予新值
rs.Update '真正更新到物理数据库中
除了Update以外,写操作还包括AddNew(添加一条新记录)和Delete(删除一条新记录)。另外,Recordset支持批处理,但这些特征需要由低层的OLE DB Provider支持。当写操作出现错误时,可根据错误描述(访问ADO的Error或Visual Basic的Err对象)来判断原因。另一个需要注意的是,当使用Recordset对象完成写操作时,需要预先指定Recordset对象实例非只读。
(6)收尾工作
在这个阶段应该显式的释放相应的资源,如果不做的话,通常Visual Basic会自动释放和回收资源。代码如下:
rs.Close '关闭记录集
Set rs = Nothing '释放记录集占有的资源
Set cmd = Nothing '释放命令对象占有的资源
cn.Close '关闭连接对象
Set cn = Nothing '释放连接对象占有的资源
ADO的灵活性还体现在,ADO的Connection 对象或Command对象的Execute方法能直接递交SQL命令到数据源,由数据源直接执行。能递交的命令主要包括:CREATE TABLE等数据定义命令、DELETE、INSERT、UPDATE、数据库存储过程名等。如:
cmd.CommandText ="drop table student" ' 指定SQL命令
Set rs = cmd.Execute ' 递交并执行drop table student命令,删除student表。
【实例7.8】 使用ADO控件设计一个数据库管理程序,使之具有浏览、更新、添加和删除记录的功能。程序启动时,界面如图7-25所示。单击ADO控件的对应按钮,可以浏览数据表中的内容。单击【添加】按钮出现如图7-26所示的空记录界面,输入信息后在最后一个【性别】文本框中按回车键可继续添加,直到用户按下【更新】按钮。单击【删除】按钮程序显示警告,如图7-27所示,确认后将删除当前记录。用户修改或添加记录后,单击【更新】按钮时才会将最后的更新一次性写入数据表,如图7-28所示。

图7-25 程序启动时的界面 图7-26 添加记录界面

图7-27 删除记录界面 图7-28 更新记录界面