如何解决ACCESS数据库锁定的问题

如何解决ACCESS数据库锁定的问题,第1张

你在后面的代码一定要有connclose,用语关闭数据库连接,否则只打开连接不关闭的话时间长了所有的连接就会都被占用而程序无法申请到新的连接就会这样

还有一种情况就是你使用XP做服务器,其中的系统连接数被限制到10个,这也会影响数据库的连接数量

RSOPEN SQL,CONN,A,B 就是你用的rsTestOpen sql, Cnn, 1, 1

A:

ADOPENFORWARDONLY(=0)

只读,且当前数据记录只能向下移动

ADOPENKEYSET(=1)

只读,当前数据记录可自由移动

ADOPENDYNAMIC(=2)

可读写,当前数据记录可自由移动

ADOPENSTATIC(=3)

可读写,当前数据记录可自由移动,可看到新增记录

B:

ADLOCKREADONLY(=1)

缺省锁定类型,记录集是只读的,不能修改记录

ADLOCKPESSIMISTIC(=2)

悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。

ADLOCKOPTIMISTIC(=3)

乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。

ADLOCKBATCHOPTIMISTIC(=4)

批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。

当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。

对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,数据在这段时间被更新。这减少了资源的使用。

回楼主:

如果想只要编辑一开始,则立即锁住记录。的话 后面哪个 1 改成 2 就OK了啊。其实你给的代码写的是 1 那是只读的,如果想写数据库,至少需要写 2 或更大。

执行UPDATE 时数据库就是锁定的,你想不锁定都不行的。

再不明白的话 Hi 我好了。

这个的话,SQL做不到的,你得在你的程序里写个关闭,让其他人不能打开相关页面,只给他个提示才可以

12 事务的ACID原则13 锁是关系数据库很重要的一部分, 数据库必须有锁的机制来确保数据的完整和一致性 131 SQL Server中可以锁定的资源:132 锁的粒度:133 锁的升级: 锁的升级门限以及锁升级是由系统自动来确定的,不需要用户设置 134 锁的类型: (1) 共享锁: 共享锁用于所有的只读数据 *** 作 (2) 修改锁: 修改锁在修改 *** 作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象 (3) 独占锁: 独占锁是为修改数据而保留的。它所锁定的资源,其他事务不能读取也不能修改。独占锁不能和其他锁兼容。 (4) 架构锁 结构锁分为结构修改锁(Sch-M)和结构稳定锁(Sch-S)。执行表定义语言 *** 作时,SQL Server采用Sch-M锁,编译查询时,SQL Server采用Sch-S锁。 (5) 意向锁 意向锁说明SQL Server有在资源的低层获得共享锁或独占锁的意向。 (6) 批量修改锁 批量复制数据时使用批量修改锁 134 SQL Server锁类型 (1) HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁。 (2) NOLOCK:不添加共享锁和排它锁,当这个选项生效后,可能读到未提交读的数据或“脏数据”,这个选项仅仅应用于SELECT语句。 (3) PAGLOCK:指定添加页锁(否则通常可能添加表锁)。 (4) READCOMMITTED用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQL Server 2000 在此隔离级别上 *** 作。 (5) READPAST: 跳过已经加锁的数据行,这个选项将使事务读取数据时跳过那些已经被其他事务锁定的数据行,而不是阻塞直到其他事务释放锁, READPAST仅仅应用于READ COMMITTED隔离性级别下事务 *** 作中的SELECT语句 *** 作。 (6) READUNCOMMITTED:等同于NOLOCK。 (7) REPEATABLEREAD:设置事务为可重复读隔离性级别。 (8) ROWLOCK:使用行级锁,而不使用粒度更粗的页级锁和表级锁。

当某个用户以独占方式打开一个ACCESS数据库时(如对数据库某个数据表的字段进行增删改 *** 作时),其他用户访问这个数据库就会出现锁定错误了;或者当某个用户正在以Update方法更新数据表中的某条记录时,其他用户也会出现短暂的锁定错误。

这种情况是必要的,因为不这样做就很有可能出现数据不同步甚至破坏整个数据库的情况。只有等造成锁定状态的用户退出连接或结束更新 *** 作时,其他用户才能继续访问。如果对这种状况很介意,请改用真正的SQL网络数据库,ACCESS本身就是个单机文件型数据库,用作网络数据库并不是它的专长。

还有一种情况就是ACCESS数据库因为某个用户的错误 *** 作(比如因异常关机造成数据库没有正确退出)而造成永久性的锁定状态,这时候就要通过ACCESS对其进行修复才行。

(1) HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁。

(2) NOLOCK:不添加共享锁和排它锁,当这个选项生效后,可能读到未提交读的数据或“脏数据”,这个选项仅仅应用于SELECT语句。

(3) PAGLOCK:指定添加页锁(否则通常可能添加表锁)。 

(4) READCOMMITTED用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQL Server 2000 在此隔离级别上 *** 作。

(5) READPAST: 跳过已经加锁的数据行,这个选项将使事务读取数据时跳过那些已经被其他事务锁定的数据行,而不是阻塞直到其他事务释放锁,

READPAST仅仅应用于READ COMMITTED隔离性级别下事务 *** 作中的SELECT语句 *** 作。 

(6) READUNCOMMITTED:等同于NOLOCK。 

(7) REPEATABLEREAD:设置事务为可重复读隔离性级别。 

(8) ROWLOCK:使用行级锁,而不使用粒度更粗的页级锁和表级锁。

(9) SERIALIZABLE:用与运行在可串行读隔离级别的事务相同的锁语义执行扫描。等同于 HOLDLOCK。 

(10) TABLOCK:指定使用表级锁,而不是使用行级或页面级的锁,SQL Server在该语句执行完后释放这个锁,而如果同时指定了HOLDLOCK,该锁一直保持到这个事务结束。 (11) TABLOCKX:指定在表上使用排它锁,这个锁可以阻止其他事务读或更新这个表的数据,直到这个语句或整个事务结束。 

(12) UPDLOCK :指定在 读表中数据时设置更新 锁(update lock)而不是设置共享锁,该锁一直保持到这个语句或整个事务结束,使用UPDLOCK的作用是允许用户先读取数据(而且不阻塞其他用户读数据),并且保证在后来再更新数据时,这一段时间内这些数据没有被其他用户修改。

数据库已经锁定,总结会已经召开。就是说已经完成揭盲了,揭盲后不能更改数据库(让人不由质疑:你根据组别更改了数据库的内容,在可 *** 作层面使得对研究药物的评价更优)。在锁库之前要解决所有数据问题的(数据录入完毕至盲态审核期结束)。揭盲后发现数据问题建议写说明(什么问题,为什么没有处理),研究者签字,申办单位盖章之类的。

以上就是关于如何解决ACCESS数据库锁定的问题全部的内容,包括:如何解决ACCESS数据库锁定的问题、急用:ASP如何锁定数据库、SQL Server数据库表锁定原理以及如何解除锁定等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9774991.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存