设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

关于“锁”的问题

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


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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
14#
发表于 2002-11-25 07:30:00 | 只看该作者

看看这个,或有帮助

Open 方法 (ADO Recordset)
      

打开游标。

语法

recordset.Open Source, ActiveConnection, CursorType, LockType, Options

参数

Source   可选,变体型,计算 Command 对象的变量名、SQL 语句、表名、存储过程调用或持久 Recordset 文件名。

ActiveConnection   可选。变体型,计算有效 Connection 对象变量名;或字符串,包含 ConnectionString 参数。

CursorType   可选,CursorTypeEnum 值,确定提供者打开 Recordset 时应该使用的游标类型。可为下列常量之一(参阅 CursorType 属性可获得这些设置的定义)。

常量 说明
AdOpenForwardOnly (默认值)打开仅向前类型游标。
AdOpenKeyset 打开键集类型游标。
AdOpenDynamic 打开动态类型游标。
AdOpenStatic 打开静态类型游标。


LockType   可选。确定提供者打开 Recordset 时应该使用的锁定(并发)类型的 LockTypeEnum 值,可为下列常量之一(参见 LockType 属性可获得详细信息)。

常量 说明
AdLockReadOnly (默认值)只读 — 不能改变数据。
AdLockPessimistic 保守式锁定(逐个) — 提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录。
AdLockOptimistic 开放式锁定(逐个) — 提供者使用开放式锁定,只在调用Update 方法时才锁定记录。
AdLockBatchOptimistic 开放式批更新—用于批更新模式(与立即更新模式相对)。


Options   可选,长整型值,用于指示提供者如何计算 Source 参数(如果它代表的不是 Command 对象),或从以前保存 Recordset 的文件中恢复 Recordset。可为下列常量之一(参见 CommandType 属性可获得该列表中前五个常量的详细说明)。

常量 说明
adCmdText 指示提供者应该将 Source 作为命令的文本定义来计算。
adCmdTable 指示 ADO 生成 SQL 查询以便从在 Source 中命名的表中返回所有行。
adCmdTableDirect 指示提供者更改从在 Source 中命名的表中返回所有行。
adCmdStoredProc 指示提供者应该将 Source 视为存储过程。
adCmdUnknown 指示 Source 参数中的命令类型为未知。
adCmdFile 指示应从在 Source 中命名的文件中恢复保留(保存的)Recordset。
adAsyncExecute 指示应异步执行 Source。
adAsyncFetch 指示在提取 Initial Fetch Size 属性中指定的初始数量后,应该异步提取所有剩余的行。如果所需的行尚未提取,主要的线程将被堵塞直到行重新可用。
adAsyncFetchNonBlocking 指示主要线程在提取期间从未堵塞。如果所请求的行尚未提取,当前行自动移到文件末尾。
13#
 楼主| 发表于 2002-10-31 07:29:00 | 只看该作者
现在我做法是:建一个名称为“锁”的表,字段有“货物编号”,“事务编号”。所有的数据都用窗体来打开(这样才可以用vb控制),如果要读取某货物的数,先要检查“锁”表中有没有这种货物的编号,如果有,则表示有用户正在使用它,只能等待,用循环反复检查“锁”表,直到“锁”表中已没有该种货物的编号(表其他用户已经完成操作),便在锁表中写一条包含“货物编号”和“事务编号”的记录(锁定该货物,别的用户不能使用),然后执行其他操作,执行完后,在“锁”表中删除这条记录(释放锁)。这样,就解决了并发冲突问题。为了防止死循环,反复检查“锁”50次之后,提示用户“数据忙”,暂取消当前操作。不知大家有何高见?
12#
发表于 2002-10-30 16:52:00 | 只看该作者
不错!!是个很严重的问题!!理论上是成立的!

可以使用sas编程,access作后台!

这样你就可以独自运行了!
只要该数据库被别人打开就不允许写操作!
但第1人退出后,机器系统自动检查库存数据,形成比较数据,第2人的要求将于生成的比较数据相比较产生可运行指针!
既缓运算!

谢谢!


11#
发表于 2002-10-30 16:36:00 | 只看该作者
是 啊 是 啊,这个问题可真值得探讨
10#
 楼主| 发表于 2002-10-30 15:20:00 | 只看该作者
我所得到的ado和dao的帮助文档是英文版的,很难看懂,请问哪里有中文版的下载?

点击这里给我发消息

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

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

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

本版积分规则

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

GMT+8, 2024-11-29 16:00 , Processed in 0.081186 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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