分享

VB+SQL用ADODB对象时datagrid显示数据提示:行集合不能作为标签

 yzjqrz 2020-02-17

Rs.Open "select * from net", Conn, 1, 1 '如果在这是用1,3则会提示错误:7004  行集合不能作为标签

Set DataGrid1.DataSource = Rs

-------------------------------------------------------

解释 

如果将 CursorLocation 属性设置为 adUseClient,则只支持 adUseStatic 的设置。如果设置了不支持

的值,不会导致错误,并将使用最接近支持的 CursorType。
adUseStatic 支持所有Recordset的属性与方法

adUseStatic 值为3 静态游标。可以用来查找数据或生成报告的记录集合的静态副本。
另外,对其他用户所作的添加、更改或删除不可见。


'如果将 CursorLocation 属性设置为 adUseServer 服务器游标能支持绝大多数的游标操作
由于服务器游标并不支持所有的Transact-SQL 语句或批处理,所以客户游标常常仅被用作服务器游标的

辅助。

adAddNew 可使用 AddNew 方法添加新记录。
adApproxPosition 可读取并设置 AbsolutePosition 和 AbsolutePage 属性。
adBookmark 可使用 Bookmark 属性访问特定记录。
adDelete 可以使用 Delete 方法删除记录。
adHoldRecords 可以检索多个记录或者更改下一个检索位置而不必提交所有挂起的更改。
adMovePrevious 可使用 MoveFirst 和 MovePrevious 方法,以及 Move 或 GetRows 方法将当前记录位

置向后移动而不必请求书签。
adResync 通过 Resync 方法,使用在现行数据库中可见的数据更新游标。
adUpdate 可使用 Update 方法修改现有的数据。
adUpdateBatch 可以使用批更新(UpdateBatch 和 CancelBatch 方法)将更改按组传送给提供者。


AdLockUnspecified     -1   未指定的锁定类型
AdLockReadOnly         只读的锁定类型     默认

AdLockPessimistic     保守式记录锁定(逐条)。
提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。

AdLockOptimistic      开放式记录锁定(逐条)。
提供者使用开放式锁定,只在调用 Update 方法时锁定记录。

AdLockBatchOptimistic 4  批处理开放式锁定类型
开放式批更新。用于与立即更新模式相反的批更新模式。

变为adLockBatchOptimistic 、 adLockOptimistic、adLockPessimistic时
支持adUpdateBatch,update, addnew,addelete  所有的都一样不管是客户端游标还是服务器端的


ADO 有两种基本途径用于添加、删除和修改数据行。

其一是更改不是立即对 Recordset 进行而是对“复制缓冲区”进行,当您不想更改时,复制缓冲区中的

改动将被放弃;如果想保留更改,复制缓冲区中的改动将应用于 Recordset。

其二是当您声明行的工作已经完成时(即“立即”模式)将更改立刻传给数据源,否则将收集对行集合的

所有更改,直到您声明该行集合的工作已经完成(即“批”模式)。这些模式将由 CursorLocation 和

LockType 属性加以控制。
在“立即”模式中,每个 Update 方法的调用都将更改传送给数据源,而在“批”模式中,虽然每个

Update 调用和当前行位置移动都将更改存放在 Recordset 中,但只有 UpdateBatch 方法才可将更改传

送给数据源。由于打开 Recordset 使用的是批模式,因此更新也使用批模式。

 

1,adOpenForwardOnly 与adLockReadOnly CursorLocation = adUseServer的组合
都不支持

2,adOpenDynamic 与adLockReadOnly  CursorLocation = adUseServer的组合
只支持 adMovePrevious

3,adOpenStatic 与adLockReadOnly  CursorLocation = adUseServer的组合
不支持 adUpdateBatch,update, adResync,addnew,addelete
支持 adapproxposition,adholdrecords,bookmark,admoveprevious

4,adOpenKeySet 与adLockReadOnly  CursorLocation = adUseServer的组合

不支持 adUpdateBatch,update,addnew,addelete
支持 adapproxposition,adholdrecords,bookmark,admoveprevious,adresync

返回 Recordset 的方法有三种:Connection.Execute、Command.Execute 以及 Recordset.Open。以下是

它们的 Visual Basic 语法:

connection.Execute(CommandText, RecordsAffected, Options)
command.Execute(RecordsAffected, Parameters, Options)
前两种方法不允许指定 Recordset 游标类型和锁定选项,都默认为:adOpenForwardOnly

,dLockReadOnly,
如果将CursorLocation 属性设置为 adUseClient则Recordset 的游标自动变为adOpenKeySet

支持adholdrecords bookmark.
如果设为adUseServer,则只有3,4才支持adholdrecords bookmark. 所以默认是不支持adholdrecords的
也因此,当用set DataGrid.DataSource =Rescordset时就报出实时错误7004,行集合不能作为标签。

所以要想在CursorLocation 属性设置为 adUseServer时能够进行set DataGrid.DataSource =Rescordset
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
这种可以设定 Recordset 游标类型和锁定选项的做法才行。

还有,尽管对于动态游标和仅向前游标 Supports(adUpdateBatch) 可能是真,但对于批处理更新应使用键集游标或静态游标。请将 LockType 属性设置为 adLockBatchOptimistic,然后将 CursorLocation 属性设置

为 adUseClient 以启用批更新需要的引擎 Microsoft Client Cursor Engine。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多