在多个用户同时访问数据库的情况下rs.open sql,conn,1,3,与rs.open sql,conn,2,2(存在的最大区别是什么)

时间:2021-05-09 07:27:31
在多个用户同时访问数据库的情况下
rs.open sql,conn,1,3(可读写,数据可以*移动,多用户下别人不能看到新增数据,悲观锁定)
rs.open sql,conn,2,2(可读写,数据可以*移动,多用户下别人可以看到新增数据,悲观锁定)

现在我有个奇怪的问题,在多人同时访问的情况下
用方式2打开数据库有时可以查到记录,有时却不能查到,请问问题最大的可能在哪儿.

5 个解决方案

#1


1)rs.open sql,conn,1,3(可读写,数据可以*移动,多用户下别人不能看到新增数据,悲观锁定)
1类型为打开仅向前类型游标,3为开放式锁定(逐个) — 提供者使用开放式锁定,只在调用 Update 方法时才锁定记录。
2)rs.open sql,conn,2,2(可读写,数据可以*移动,多用户下别人可以看到新增数据,悲观锁定)
2为打开键集类型游标,保守式锁定(逐个) — 提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录来完成。
你用第一个类型的话,如果你用了一次查询,记录指针没有返回记录集的初始位置,记录的指针定位在了最后一条记录上,你再使用查询的话,记录指针是最后一条记录向前移动的,当然就查不到了!这就是他们的最大区别。

#2


谢谢 platinumkill
再请问一下,我用户模式下
只读读取,用myrs.open,sql,3,3是不是一定就能取到记录了
可读写读取用myrs.open,sql,2,3是不是就行了

#3


adOpenForwardOnly 仅向前游标,默认值。与静态游标相同,但只能在记录中向前滚动。当需要在记录集中单向移动时,可用于提高性能。 
adOpenKeyset 键集游标。尽管从您的记录集不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,键集游标与动态游标相似。仍然可以看见其他用户更改的数据。 
adOpenDynamic 动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书签操作。 
adOpenStatic 静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。 
===============================================
adLockReadOnly 默认值,只读。无法更改数据。 
adLockPessimistic 保守式记录锁定(逐条)。提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。 
adLockOptimistic 开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用 Update 方法时锁定记录。 
adLockBatchOptimistic 开放式批更新。用于与立即更新模式相反的批更新模式。 
================================================
读取纪录还有一个要素是游标位置
客户端游标与服务短游标也有很大差别的!
对于你的问题:
键值游标类型与动态游标的差别不是很大,就是能否看别人新增的纪录!
所以说你的两种方式的区别不是很大.
===================================
如果你要只读那么用addynamic,and adreadonly
要可读可写的话用addynamic,adLockOptimistic
制作参考,具体要取决于你的应用程序的结构

#4


谢谢,我明白了
再请问一下
set myrs=conn.execute(sql)
是什么游标类型

#5


adforwardonly

#1


1)rs.open sql,conn,1,3(可读写,数据可以*移动,多用户下别人不能看到新增数据,悲观锁定)
1类型为打开仅向前类型游标,3为开放式锁定(逐个) — 提供者使用开放式锁定,只在调用 Update 方法时才锁定记录。
2)rs.open sql,conn,2,2(可读写,数据可以*移动,多用户下别人可以看到新增数据,悲观锁定)
2为打开键集类型游标,保守式锁定(逐个) — 提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录来完成。
你用第一个类型的话,如果你用了一次查询,记录指针没有返回记录集的初始位置,记录的指针定位在了最后一条记录上,你再使用查询的话,记录指针是最后一条记录向前移动的,当然就查不到了!这就是他们的最大区别。

#2


谢谢 platinumkill
再请问一下,我用户模式下
只读读取,用myrs.open,sql,3,3是不是一定就能取到记录了
可读写读取用myrs.open,sql,2,3是不是就行了

#3


adOpenForwardOnly 仅向前游标,默认值。与静态游标相同,但只能在记录中向前滚动。当需要在记录集中单向移动时,可用于提高性能。 
adOpenKeyset 键集游标。尽管从您的记录集不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,键集游标与动态游标相似。仍然可以看见其他用户更改的数据。 
adOpenDynamic 动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书签操作。 
adOpenStatic 静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。 
===============================================
adLockReadOnly 默认值,只读。无法更改数据。 
adLockPessimistic 保守式记录锁定(逐条)。提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。 
adLockOptimistic 开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用 Update 方法时锁定记录。 
adLockBatchOptimistic 开放式批更新。用于与立即更新模式相反的批更新模式。 
================================================
读取纪录还有一个要素是游标位置
客户端游标与服务短游标也有很大差别的!
对于你的问题:
键值游标类型与动态游标的差别不是很大,就是能否看别人新增的纪录!
所以说你的两种方式的区别不是很大.
===================================
如果你要只读那么用addynamic,and adreadonly
要可读可写的话用addynamic,adLockOptimistic
制作参考,具体要取决于你的应用程序的结构

#4


谢谢,我明白了
再请问一下
set myrs=conn.execute(sql)
是什么游标类型

#5


adforwardonly