您不具有对数据库的独占访问权限这一次。如果继续进行更改,您可能无法将其保存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了您不具有对数据库的独占访问权限这一次。如果继续进行更改,您可能无法将其保存相关的知识,希望对你有一定的参考价值。
参考技术A 未锁定数据库进行更新操作,被别人占先了呗。追问如何更新操作呢
追答请给出具体的应用。策略有很多种。
追问在access中在报表中想新建一个报表,就弹出此窗口
追答原因
如果数据库文件和工作组信息文件具有相同的名称并位于同一文件夹中,Access 对象打开时,会创建两个记录锁定信息文件 (.ldb)。 这会导致"症状"部分中提到的错误消息。
注意默认状态下,记录锁定信息文件被创建具有相同的文件名称,作为工作组信息文件。记录锁定信息文件也是相同的工作组信息文件的文件夹中创建的。记录锁定信息文件扩展名为.ldb 文件。
解决方法:
要变通解决此问题,请使用下列方法之一:
重命名数据库文件,以确保只有一个.ldb 文件是包含数据库文件和工作组信息文件的文件夹中。
将数据库文件移动到另一个文件夹中。
以独占方式打开数据库。
----------
当您打开一个 Access 数据库,如果有同名的数据库文件 (.mdb) 和工作组信息文件 (.mdw) 时,.mdw 文件的创建 (.ldb) 上一个记录锁定的信息文件,并指示数据库文件处于打开状态的条目添加到.ldb 文件。 打开.mdb 文件后,Access 会检测在同一文件夹中的.mdb 文件同名的.ldb 文件,并因此将另一个项添加到.ldb 文件。 .ldb 文件中的条目现在表明在数据库中有两个用户。 因此,如在设计视图中报表在数据库对象打开时访问可能.ldb 文件中检测两个活动连接。 这可能会导致"症状"部分中提到的错误消息。此错误消息表示用户不具有对数据库的独占访问权限。
如果您打开数据库,关闭该数据库,而无需关闭访问,然后您再次以独占方式打开数据库,您可以在设计视图中查看数据库对象。 当您第一次打开数据库时,访问.mdw 文件,并因此创建.ldb 文件。 两个活动连接项写入.ldb 文件。活动连接的一项是为.mdw 文件和其他活动连接条目.mdb 文件。 当您关闭该数据库时,.ldb 文件中的第二个活动连接条目可能会被删除,或可能对其进行修改,以指示用户已断开连接。 随后时以独占方式为打开数据库, 访问可能不会创建一个.ldb 文件,或可能不将写入一个条目.ldb 文件因为 Access.ldb 文件中检测到只有一个活动的条目。 因为 Access 在数据库中检测只有一个用户,您可以在设计视图中打开报表。
独占锁 和 共享锁
独占锁:独占锁也叫排他锁,是指该锁一次只能被一个线程所持有。如果线程T对数据A加上排他锁后,则其他线程不能再对A加任何类型的锁。获得排它锁的线程即能读数据又能修改数据。
ReentrantLock 和 synchronized 都是独占锁
共享锁:共享锁是指该锁可被多个线程所持有。如果线程T对数据A加上共享锁后,则其他线程只能对A再加共享锁,不能加排它锁。获得共享锁的线程只能读数据,不能修改数据。
独享锁与共享锁也是通过AQS来实现的,通过实现不同的方法,来实现独享或者共享。
ReentrantReadWriteLock:读锁是共享锁,写锁是独占锁。读锁的共享可以保证并发读是高效的,读写,写读,写写是互斥的
ReentrantReadWriteLock源码:
构造器无参数,默认是创建一个非公平锁;
我们看到 ReentrantReadWriteLock 有两把锁:ReadLock 和 WriteLock,见名知意,一个读锁一个写锁, 合称“读写锁”。
再进一步观察可以发现 ReadLock 和 WriteLock 是靠内部类 Sync 实现的锁。
Sync 是 AQS 的一个子类,这种结构在 CountDownLatch 、ReentrantLock 、Semaphore 里面也都存在。
在ReentrantReadWriteLock 里面,读锁和写锁的锁主体都是 Sync ,但读锁和写锁的加锁方式不一样。
读锁是共享锁,写锁是独占锁。读锁的共享锁可保证并发读非常高效,而读写、写读、写写的过程互斥,因为读锁和写锁是分离的。所以ReentrantReadWriteLock的并发性相比一般的互斥锁有了很大提升。
以上是关于您不具有对数据库的独占访问权限这一次。如果继续进行更改,您可能无法将其保存的主要内容,如果未能解决你的问题,请参考以下文章