請教: ADO 的 RecordSet 的打開方式和鎖方式

zeng_zhh 2001-07-13 05:01:48
(myRs.Open strSQL, myCn, adOpenKeyset, adLockPessimistic)
打開方式 鎖方式
adOpenDynamic adLockBatchOptimistic
adOpenForwardOnly adLockOptimistic
adOpenKeyset adLockPessimistic
adOpenStatic adLockReadOnly

很希望能夠知道使用這些選項對數据表的影響,如果在企業環境下使用這些都有什么好的和不足的地方??

我對它們的理解只是從字面上理解而已,除了adOpenDynamic 和adLockBatchOptimistic 外,其他我都經常使用.當我只是對表進行查詢時我用 adOpenForwardOnly 和 AdlockReadOnly 選項,當修改,插入,刪除操作時,用 adOpenKeySet和 adLockPessimistic(或adLockOptimistic,我也搞不清如果多人操作時會有什么影響),我只知道他們在很少人同步操作時沒有什么不妥.
希望有心得者能多多指教!

能不能說說它們在不同的情況下都有些什么影響.?
例如用adLOckPessimistic 時,是不是只有當前用戶才可以訪問這個表,還是可以訪問,但不可以對表進行更新??
...全文
161 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zeng_zhh 2001-07-25
  • 打赏
  • 举报
回复
還有誰能指點多點么?
YHW 2001-07-15
  • 打赏
  • 举报
回复
MSDN里有详细的说明
wyr 2001-07-15
  • 打赏
  • 举报
回复
游标和锁的实际状态与程序的设定状态并不完全一致,还要看数据库驱动程序的实际
支持情况,游标和锁会降级实用。所以有时可能比较不出区别。
liu_feng_fly 2001-07-15
  • 打赏
  • 举报
回复
那几种锁应该可以满足要求了吧,最多用独占的方式打开,就没有问题了(太粗暴了),其实我没有数据库编程的经验,只是把书上的东西拿来说的,呵呵。只是不知道你到底要解决什么样的情况呢?冲突到什么程度?
phm 2001-07-15
  • 打赏
  • 举报
回复
有没有用语句锁的
bucher 2001-07-15
  • 打赏
  • 举报
回复
adLockPessimistic 悲观锁定:当rs.edit或者rs(X)=XXXX的时候该行(或者该页,取决于DBMS)被锁定,直到rs.update或者rs.movenext等修改当前游标的操作时数据库被更新,锁定释放。
adLockOptimistic 乐观锁定:当rs.update或者rs.movenext等修改当前游标的操作时数据库被更新,锁定只在更新的一刹那存在。

我个人比较喜欢adLockBatchOptimistic,虽说解决冲突比较麻烦,但是效率比别的锁定方式高得多,特别是在修改大批数据的时候。

MSDN中都有详细解释,看看吧。
zeng_zhh 2001-07-15
  • 打赏
  • 举报
回复
你说的不错。
那么你是在什么情况下使用这些选项呢?多人同时访问时你是怎样控制的呢?请你赐教。
liu_feng_fly 2001-07-14
  • 打赏
  • 举报
回复
当然是在update之后释放了,还有,锁只对当前记录有效,应该是记录级的
再有,如果是多表查询,应该是没有更新数据库的能力吧,就谈不上锁的实施了,不知道对不对,请指教了
zeng_zhh 2001-07-14
  • 打赏
  • 举报
回复
那別人可不可以查詢它呢?還有锁在什么時候釋放?是在Update 時,還是在Close 時釋放?
如果是單表或多表查詢時,锁是表級的還是記錄級的?
liu_feng_fly 2001-07-13
  • 打赏
  • 举报
回复
執行 myRs(0)="liu_fen_Fly" 后數据應該還沒有傳到數据庫吧? 如果已傳,那么myrs.update 操作有什么意思?
是的,没有传到数据库,但是这个时候加锁,就是其他的程序不能修改他了
zeng_zhh 2001-07-13
  • 打赏
  • 举报
回复
哦,這我可就不懂了.如妳說:
執行 myRs(0)="liu_fen_Fly" 后數据應該還沒有傳到數据庫吧? 如果已傳,那么myrs.update 操作有什么意思?
我理解是當用悲觀鎖時,別的用戶要等到操作完成西放鎖后才可以訪問該表或涉及的記錄.
而樂觀鎖應該是鎖沒西放時,別的用戶也可以訪問它,但不能更新它.
不知這樣理解是否正确??bu
dotnba 2001-07-13
  • 打赏
  • 举报
回复
:)
liu_feng_fly 2001-07-13
  • 打赏
  • 举报
回复
我的理解:(仅代表个人观点,不一定正确,请指教了)
如果你有一个有更新能力的记录集MyRS
那么:
MyRS(0)="liu_feng_fly" '这是更改,悲观锁这时候就已经加锁
... '其他更改
MyRS.update ‘这是更新,乐观锁现在才加锁
zeng_zhh 2001-07-13
  • 打赏
  • 举报
回复
我對更改和更新還真是不明白有什么分別.另外書我很多.但說的都不是很清楚.
liu_feng_fly 2001-07-13
  • 打赏
  • 举报
回复
打開方式:简单的说,就是记录集所具有的能力,如果是static,那么资源占用少,功能也少,如果Dynamic功能强大,资源占用也多,一句话,功能越强,越浪费资源,所以应该好好考虑用什么样的记录集
鎖方式:主要是防止并发访问,越安全的锁效率就会越底,如悲观锁,程序对记录更改就加锁,而乐观锁是在更新的时候才加锁
建议找一本数据库的书看看,有更详细的解释
gqxs 2001-07-13
  • 打赏
  • 举报
回复
up
pcwood 2001-07-13
  • 打赏
  • 举报
回复
gz

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧