VB Recordset 对象

来源:互联网 发布:电视如何进入网络电视 编辑:程序博客网 时间:2024/05/16 00:42

Recordset 对象代表一个表的记录集或者命令执行的结果,在记录集中,总是有一个当前的记录。记录集是ADO 管理数据的基本对象,所有的Recordset 对象都按照行列方式的表状结构进行管理,每一行对应一个记录(Record ) ,每一列对应一个域(F ield )。Recordset 对象也通过游标对记录进行访问,在ADo 中,游标分四不中:

a .静态游标。提供对数据集的一个静态拷贝,允许各种移动操作,包括前移、后移等等,但其他用户所做的操作反映不出来。

b .动态游标。允许各种移动操作,包括前移、后移等等,并且其他用户所做的操作也可以直接反映出来。

c .前向游标。允许各种前向移动操作,不能向后移动,并且其他用户所做的操作也可以直接反映出来。

d .键集(keyset )游标。类似于动态游标,也能够看到其他用户所作的数据修改,但不能看到其它用户新加的记录,也不能访问其他用户删除的记录。

ADO 中定义了四种不同的游标类型:

动态游标用于查看其他用户所作的添加、更改和删除;用于 Recordset(不依赖于书签)中的所有移动类型;如果提供者支持,还可用于书签。

键集游标其行为类似动态游标,不同的只是它禁止查看其他用户添加的记录,并且禁止访问其他用户删除的记录。其他用户所作的数据更改依然可见。它始终支持书签,因此允许 Recordset 中的所有移动类型。

静态游标提供记录集的静态副本,可用来查找数据或生成报告;它始终支持书签,因此允许 Recordset 中的所有移动类型。其他用户所作的添加、更改或删除将不可见。当打开客户端 Recordset 对象时,这是唯一允许的游标类型。

仅向前游标只允许在 Recordset 中向前滚动。其他用户所作的添加、更改或删除将不可见。当只需要对 Recordset 进行一次传递时,可以提高性能。

针对本 CursorType Recordset

对于所有这些常量,Supports 方法必须返回 True

adOpenForwardOnly

adOpenKeyset

adBookmarkadHoldRecordsadMovePrevious adResync

adOpenDynamic

adMovePrevious

adOpenStatic

adBookmarkadHoldRecordsadMovePrevious adResync

指定在编辑过程中记录上的锁定类型。

常量

说明

adLockBatchOptimistic

4

指示开放式批更新。需要批更新模式。

adLockOptimistic

3

指示逐个记录开放式锁定。提供者使用开放式锁定,仅在调用 Update 方法时锁定记录。

adLockPessimistic

2

指示逐个记录保守式锁定。提供者要确保记录编辑成功,通常在编辑之后立即在数据源锁定记录。

adLockReadOnly

1

指示只读记录。无法改变数据。

adLockUnspecified

-1

未指定锁定类型。创建副本时,副本与源对象使用相同的锁定类型。

游标服务是数据访问的重要内容,在第二部分介绍Recordset 对象时,我们说明了游标的四种类型,在Recordset 对象还有一个属性CursorLocation 用于指定游标的位置,我们可以指定使用客户端的游标,也可以指定使用服务器端游标。CursorLocation 属性的缺省值为adUseserver ,使用服务器端游标的好处是,程序对数据库的修改可以立即反映到服务器,而且,其他用户对数据库的操作也可以马上反映出来,但使用服务器端游标带来了高网络流量,每一个数据访问都需要通过网络交换数据。
ADO
提供了客户端数据缓存处理,因此,在打开Recordset 对象前,可以设置CursorLocation adUseClient ,指定使用客户端游标。通过客户端游标,ADO 利用本地数据缓存以降低网络流量,虽然在数据访问灵活性上有所损失,但却大大提高了通过网络访问数据库的性能。

批修改处理。
我们知道Recordset 对象的update 方法用于修改当前记录,而updateBatch 方法则用于递交所有对当前记录集的增、删、改操作。把Recordset 对象的LockTyPe 属性设置为adLockBatchoptimistic ,则updateBatch 方法有效,当然,不同的oLE DB 提供者可能还会有不同的要求,比如,sQL server 提供者也要求游标类型为键集游标或静态游标。UpdateBatch 方法可以一次把客户端所有的修改传送到数据库中,相对应地,也可以调用CancelBatch 方法取消所有的修改操作

说一下Recordset 对象的属性
1
CursorType 属性
AdOpenForwardOnly
: 仅向前游标,默认值。除了只能在记录中向前滚动外,与静态游标相同。当只需要在记录集中单向移动时,使用它可提高性能。(顾名思义,这种游标只能向前移动。然而,由于这种游标功能有限,将它用于系统资源时是非常有效的。)
AdOpenKeyset
: 键集游标。尽管从您的记录集不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,键集游标与动态游标相似。仍然可以看见其他用户更改的数据。(KeySet游标允许你看见自它创建起其他用户所做的修改,然而你却不能看到其他用户增加或删除的记录。)

AdOpenDynamic
:动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书签操作。(此类型的游标功能强大同时也是耗费系统资源最多的游标。Dynamic游标可以看到他们保存记录集合的所有变化。使用Dynamic游标的用户可以看到其他用户所做的编辑、增加、删除。如果数据提供者允许这种类型的游标,那么它是通过每隔一段时间从数据源重取数据来支持这种可视性的。毫无疑问这会需要很多的资源。)
AdOpenStatic
:静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。(Static类游标只是数据的一幅快照。这就是说,它无法看到自它创建以后其他用户对RecordSet所做的修改。采用这类游标你可以向前和向后航行。由于其功能简单,资源的需求比Dynamic要小! )

需要注意的是:一旦打开RecordSet,你就无法改变CursorType属性。但是,如果你首先关闭RecordSet,改变CursorType属性,然后重新打开RecordSet,那么你仍可以有效地改变游标的类型!

2LockType 属性
在任何同时可被多用户修改的数据库应用程序中,你必须处理可能发生的多个用户同时对同一条记录进行操作时的情况。当这种情况出现时,数据的完整性就会受到威胁,这是因为一个用户可能会在不自觉地在保存自己所做的修改时覆盖他人的修改。到时候你会觉得自己好象是没有做事。为了处理这种情况。ADO允许你在对RecordSet对象进行更新时决定并发事件控制的类型,当一个用户编辑时,如何由他对记录进行锁定。这就是由LockType属性所决定的。这个属性有四个值:
adLockReadonly
:默认值,只读。无法更改数据。(这是RecodSet的默认值,如果你把锁定的方式设为该值,那么你将不能更新 Recordset。)
adLockPessimistic
:保守式记录锁定(逐条)。提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。(如果设置为此类锁定,记录被锁定,且只有在编辑开始到将记录更新的提交给数据提供者这段时间内进行编辑的用户才可以访问!
adLockOptimistic
:开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用 Update 方法时锁定记录。(只有在将数据提交给数据提供者的那一瞬间才把记录锁定。)
adlockBatchOptimistic
:开放式批更新。用于与立即更新模式相反的批更新模式。(设定为这种类型的锁定制式将被称为批量更新模式的RecordSet。 可以加快更新RecordSet修改数据的速度,但因为同时更新多个记录,它也会恶化与并发访问相关的问题!)

original copy: http://hi.baidu.com/xayxy/blog/item/003f2b34fa0dba3e5bb5f5d6.html

原创粉丝点击