设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 1878|回复: 13
打印 上一主题 下一主题

关于“锁”的问题

[复制链接]
跳转到指定楼层
1#
发表于 2002-10-29 04:17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
尽管access不是一个大型的数据库,但也要考虑多用户使用时的并发性及有可能产生的错误,如“读脏数据”、“不可重复读”、“修改丢失”等,所以并发控制也是很重要的。我们知道,“锁”是解决并发出错问题的主要方法,“锁”有主要有两种:排它锁“x”与共享锁“s”,在access环境中,怎样应用这两“锁”呢?


[此贴子已经被作者于2002-10-28 20:17:04编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2002-10-29 04:24:00 | 只看该作者
没有人能指教吗?请大家展开讨论。好似ACCESS只有共享锁,而没有排它锁,即使有用户正在编辑某一数据,别的用户照样可以读这个数据,这样就有可能产生一些并发错误,如“不可重复读”等,怎样锁定正在编辑的数据,使数据没有修改结束之前,数据不可读呢?
3#
发表于 2002-10-29 05:50:00 | 只看该作者
独占模式
4#
 楼主| 发表于 2002-10-29 07:19:00 | 只看该作者
独占就不能供多用户使用了,我们要探索种在多用户环境下的解决方法。
5#
发表于 2002-10-29 17:19:00 | 只看该作者
那就用户组吧!!这样既可以安全又可以指定某些人有权进入!


但没有用的,除非你的数据库文件是独立的保密的,否则,根本不可能安全!!
6#
发表于 2002-10-29 18:44:00 | 只看该作者
還是有共享鎖必較實際一點。要有效的減少鎖問題,就是只給用戶他所須要的數據。
7#
 楼主| 发表于 2002-10-30 07:13:00 | 只看该作者
上面的朋友的回答都没有能解决问题。对于并发的数据库而言,排它锁是必须的。举个例子说,如有一货物销售系统,现在某种货物库存还有100箱,此时甲进行操作,拟售出货物60箱,系统查出货物还有100箱,售出操作允许执行;就在甲正进行售出操作的几乎同一时刻(甲已经键入售出60箱,但有些其他信息正在键入或信息正在通信线路上传输,售出记录还没有真正保存到数据库),乙也拟售出这种货物60箱,因为甲的操作还没有结束,记录还没有保存,所以当前库存还是100箱,所以系统也允许乙售出这种货物60箱。当两人的操作都完成了之后,实际共售出了货物120箱,但库存根本就没有这么多货,并发操作引起了错误。为了备免这样的情况发生,就要用到“排它锁S”,当某一操作员拟售出某种货物的时候,必须获得这种货物的“排它锁”,锁定这种货物,使其他用户不能编辑相关的数据,也不能读取相关的数据。如上例,甲拟售出某货物60箱,就将这种货物锁定,在甲没有操作完成期间,乙也拟售出货物60箱,因甲已锁定数据,乙没法读取数据,只能等待甲释放“锁”。甲操作完成之后,释放了“锁”,乙获得控制权可以读取数据,但这时库存量已经是40箱了,少于60箱,乙只能以不大于40箱的数量售出这种货物,这就解了并发出错的问题。“排它锁”在大型数据库中都是有的,但在ACCESS中不知有没有,不知该怎样用法?如果ACCESS本身没有这种锁,我们该怎样用VB来实现这种“锁”? 请大家展开讨论,指点迷津。
8#
 楼主| 发表于 2002-10-30 07:20:00 | 只看该作者
上面的朋友的回答都没有能解决问题。对于并发的数据库而言,排它锁是必须的。举个例子说,如有一货物销售系统,现在某种货物库存还有100箱,此时甲进行操作,拟售出货物60箱,系统查出货物还有100箱,售出操作允许执行;就在甲正进行售出操作的几乎同一时刻(甲已经键入售出60箱,但有些其他信息正在键入或信息正在通信线路上传输,售出记录还没有真正保存到数据库),乙也拟售出这种货物60箱,因为甲的操作还没有结束,记录还没有保存,所以当前库存还是100箱,所以系统也允许乙售出这种货物60箱。当两人的操作都完成了之后,实际共售出了货物120箱,但库存根本就没有这么多货,并发操作引起了错误。为了备免这样的情况发生,就要用到“排它锁S”,当某一操作员拟售出某种货物的时候,必须获得这种货物的“排它锁”,锁定这种货物,使其他用户不能编辑相关的数据,也不能读取相关的数据。如上例,甲拟售出某货物60箱,就将这种货物锁定,在甲没有操作完成期间,乙也拟售出货物60箱,因甲已锁定数据,乙没法读取数据,只能等待甲释放“锁”。甲操作完成之后,释放了“锁”,乙获得控制权可以读取数据,但这时库存量已经是40箱了,少于60箱,乙只能以不大于40箱的数量售出这种货物,这就解了并发出错的问题。(当然,“锁”的锁定与释放是在很短的时间内完成的,乙可能并没有感觉到他曾经要等待甲的操作的完成)。“排它锁”在大型数据库中都是有的,但在ACCESS中不知有没有,不知该怎样用法?如果ACCESS本身没有这种锁,我们该怎样用VB来实现这种“锁”呢? 请大家展开讨论,指点迷津。

点击这里给我发消息

9#
发表于 2002-10-30 07:30:00 | 只看该作者
通过数据库事务或ADO的事务来解决这个问题.

多用户,使用事务是非常好的.但要一定的代码来实现哟.另外,窗体还有锁定方式可以选择.

[em26]
10#
 楼主| 发表于 2002-10-30 15:20:00 | 只看该作者
我所得到的ado和dao的帮助文档是英文版的,很难看懂,请问哪里有中文版的下载?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-14 14:40 , Processed in 0.090084 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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