当数据库已经被另一个进程打开时,我很难使用python pyodbc
库连接到网络驱动器上的MS Access数据库。
为了再现错误,我首先创建一个带有表的前端和后端访问数据库。然后在中打开前端文件,以便为后端创建一个.laccdb
文件。然后运行以下代码:
import pyodbc
pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=V:\Backend.accdb;')
V:
是一个共享的网络驱动器。下面是我得到的错误消息:
pyodbc.Error: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver] General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x85c Thread 0x2e0c DBC 0x92147c28 Jet'. (63) (SQLDriverConnect);
[HY000] [Microsoft][ODBC Microsoft Access Driver] Could not use '(unknown)'; file already in use.
只有在数据库已经打开时才会收到此错误。当脚本是使用数据库的唯一进程时,没有出现错误。
以下是其他一些信息:
系统信息:
任何帮助都将不胜感激。
发布于 2022-04-23 02:02:35
最好的选择?
access数据引擎需要创建和删除该文件夹的权限。
打开数据库文件时,Access是基于“文件”的系统。因此,当第一个用户(或进程)打开该数据库文件时,JET (现在的ACE)数据引擎将创建一个锁定文件(ldb)。该文件用于管理并发用户(在该文件夹中没有运行服务器系统或代码或进程-它是打开的平面简窗口文件)。
因此,如果服务器(或任何地方)上的共享文件夹不允许用户在该文件夹中创建(和删除)文件,则不能创建ldb锁定和数据冲突文件,因此数据库将被只读。
当最后一个打开该文件的用户(或进程)关闭该数据文件时,如果没有ohter用户处于活动状态,那么ldb锁定文件将被删除。有些人确实可以删除删除权限--而ldb文件可以保留下来,但即使删除锁定(ldb文件)的能力也常常会使这件事变得一团糟。
因此,所发生的是你只读,或经常“排他性”的权利在公开。
若要修复,则该共享文件夹需要具有“创建”和“删除”权限。我在某些情况下看到,如果给定的特定用户被授予了特定的权限,那么ldb文件将“继承”这些相同的权限,再次,所有其他用户要么被只读,要么不能使用数据库。
所以,长话短说?
作为一般规则,所有用户对该文件夹的权限都需要文件创建权限,并需要文件删除权限。当然,在您自己的个人计算机上,这是可行的,因为在大多数情况下,您对您的个人计算机上的任何文件夹和文件都有完全的权限。因此,您需要打开(放松)共享文件夹的安全权限--用户需要创建文件权限,并删除文件权限。
https://stackoverflow.com/questions/71973542
复制相似问题