Office及VBA技术交流

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1932|回复: 1

VBA ADODB 数据库CursorType和LockType详细讲解

[复制链接]
  • TA的每日心情

    2016-2-20 08:02
  • 签到天数: 1 天

    [LV.1]初来乍到

    88

    主题

    155

    帖子

    625

    积分

    高级会员

    Rank: 4

    积分
    625
    发表于 2016-3-10 10:49:20 | 显示全部楼层 |阅读模式
    VBA或者VB中,如果我们要通过 ADODB 访问 数据库,Recordset对象Open方法中有两个参数CursorType和LockType,有关于这两个参数的详细讲解如下:
    CursorType
    Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
    --------------------------------------------------------------
    常数                常数值           说明
    -------------------------------------------------------------
    adOpenForwardOnly    0       缺省值,启动一个只能向前移动的游标(Forward Only)。
    adOpenKeyset          1       启动一个Keyset类型的游标。
    adOpenDynamic           2       启动一个Dynamic类型的游标。
    adOpenStatic          3       启动一个Static类型的游标。
    -------------------------------------------------------------
    以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。

    -------------------------------------------------------------
    Recordset属性     adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
    -------------------------------------------------------------
    AbsolutePage           不支持          不支持       可读写          可读写
    AbsolutePosition    不支持          不支持       可读写          可读写
    ActiveConnection    可读写          可读写       可读写          可读写
    BOF                    只读              只读          只读              只读
    Bookmark             不支持          不支持       可读写          可读写
    CacheSize              可读写          可读写       可读写          可读写
    CursorLocation       可读写          可读写       可读写          可读写
    CursorType          可读写          可读写       可读写          可读写
    EditMode             只读              只读          只读              只读
    EOF                    只读              只读          只读              只读
    Filter                 可读写          可读写       可读写          可读写
    LockType             可读写          可读写       可读写          可读写
    MarshalOptions       可读写          可读写       可读写          可读写
    MaxRecords          可读写          可读写       可读写          可读写
    PageCount              不支持          不支持       只读              只读
    PageSize             可读写          可读写       可读写          可读写
    RecordCount          不支持          不支持       只读              只读
    Source                 可读写          可读写       可读写          可读写
    State                只读              只读          只读              只读
    Status                 只读              只读          只读              只读
    AddNew                 支持              支持          支持              支持
    CancelBatch          支持              支持          支持              支持
    CancelUpdate           支持              支持          支持              支持
    Clone                不支持          不支持
    Close                支持              支持          支持              支持
    Delete                 支持              支持          支持              支持
    GetRows             支持              支持          支持              支持
    Move                不支持          支持          支持              支持
    MoveFirst              支持              支持          支持              支持
    MoveLast             不支持          支持          支持              支持
    MoveNext             支持              支持          支持              支持
    MovePrevious           不支持          支持          支持              支持
    NextRecordset       支持              支持          支持              支持
    Open                支持              支持          支持              支持
    Requery             支持              支持          支持              支持
    Resync                 不支持          不支持       支持              支持
    Supports             支持              支持          支持              支持
    Update                 支持              支持          支持              支持
    UpdateBatch          支持              支持          支持              支持
    --------------------------------------------------------------
    其中NextRecordset方法并不适用于Microsoft Excel.gsxh.org/forum.php?gid=45" target="_blank" class="relatedlink">Access数据库。

    LockType
    Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:

    -------------------------------------------------------------
    常数                常数值              说明
    --------------------------------------------------------------
    adLockReadOnly           1           缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法
    adLockPrssimistic        2           当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。
    adLockOptimistic       3           当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。
    adLockBatchOptimistic 4           当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、
                                     删、改的操作。
    回复

    使用道具 举报

  • TA的每日心情

    2016-2-20 08:02
  • 签到天数: 1 天

    [LV.1]初来乍到

    88

    主题

    155

    帖子

    625

    积分

    高级会员

    Rank: 4

    积分
    625
     楼主| 发表于 2016-3-10 11:21:34 | 显示全部楼层

    指示在 Recordset 对象中使用的游标类型。

    设置和返回值

    设置或返回以下某个 CursorTypeEnum 值。

    常量说明
    AdOpenForwardOnly仅向前游标,默认值。除了只能在记录中向前滚动外,与静态游标相同。当只需要在记录集中单向移动时,使用它可提高性能。
    AdOpenKeyset键集游标。尽管从您的记录集不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,键集游标与动态游标相似。仍然可以看见其他用户更改的数据。
    AdOpenDynamic动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书签操作。
    AdOpenStatic静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。

    说明

    使用 CursorType 属性可指定打开 Recordset 对象时应该使用的游标类型。Recordset 关闭时 CursorType 属性为读/写,而 Recordset 打开时该属性为只读。

    如果将 CursorLocation 属性设置为 adUseClient 则只支持 adUseStatic 的设置。如果设置了不支持的值,不会导致错误,将使用最接近支持的 CursorType

    如果提供者不支持所请求的游标类型,提供者可能会返回其他游标类型。打开 Recordset 对象时,将更改 CursorType 属性使之与实际使用的游标匹配。要验证返回游标的指定功能,请使用 Supports 方法。关闭 Recordset 后,CursorType属性将恢复为最初的设置。

    下表说明每个游标类型所需的提供者功能(由 Supports 方法常量标识)。

    对于该 CursorType 的某Recordset对于所有这些常量, Supports 方法必须返回 True
    AdOpenForwardOnly
    AdOpenKeysetAdBookmarkadHoldRecordsadMovePreviousadResync
    AdOpenDynamicadMovePrevious
    AdOpenStaticadBookmark, adHoldRecords, adMovePrevious, adResync

    注意   尽管对于动态游标和仅向前游标 Supports(adUpdateBatch) 可能是真,但对于批处理更新应使用键集游标或静态游标。请将 LockType 属性设置为 adLockBatchOptimistic,然后将 CursorLocation 属性设置为adUseClient 以启用批更新需要的 OLE DB 游标服务。

    远程数据服务用法   当用于客户端 (ADOR) Recordset 对象时,只能将 CursorType 属性设置为 adOpenStatic


    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Office Master ( 蜀ICP备16003423号 )

    GMT+8, 2019-7-18 12:54 , Processed in 0.241461 second(s), 23 queries .

    Office Master

    快速回复 返回顶部 返回列表