首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当另一个进程打开数据库时,无法用pyodbc连接到网络驱动器上的MS Access数据库

当另一个进程打开数据库时,无法用pyodbc连接到网络驱动器上的MS Access数据库
EN

Stack Overflow用户
提问于 2022-04-22 19:04:12
回答 1查看 477关注 0票数 0

当数据库已经被另一个进程打开时,我很难使用python pyodbc库连接到网络驱动器上的MS Access数据库。

为了再现错误,我首先创建一个带有表的前端和后端访问数据库。然后在中打开前端文件,以便为后端创建一个.laccdb文件。然后运行以下代码:

代码语言:javascript
运行
复制
import pyodbc
pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=V:\Backend.accdb;')

V:是一个共享的网络驱动器。下面是我得到的错误消息:

代码语言:javascript
运行
复制
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.

只有在数据库已经打开时才会收到此错误。当脚本是使用数据库的唯一进程时,没有出现错误。

以下是其他一些信息:

  • 当我在本地驱动器上重复上面的测试时,我不会收到这个错误,所以它似乎与网络驱动器上的数据库有关。
  • 我有默认的开放模式,在MS访问“共享”,所以数据库不应该是开放的独占模式。
  • 这个错误似乎与试图通过Python脚本连接有关--例如,我可以使用MS Access Application打开数据库前端/表,然后在MS应用程序中同时打开后端文件,而网络驱动器上没有问题。
  • 我对网络目录有读写权限。例如,我可以使用Python脚本在网络目录中创建文件和删除文件。
  • 我尝试过调整ODBC驱动程序/数据库连接字符串,包括在只读模式中打开,并显式地确保关闭独占模式。这两个选项都不能解决问题。
  • 我的用户已经按照建议的这里读取了对ODBC注册表的访问权限。

系统信息:

  • 2019 64位
  • 64位驱动程序
  • Python 3.9,使用Anaconda环境/ Anaconda提示符运行脚本
  • pyodbc版本4.0.32

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-04-23 02:02:35

最好的选择?

access数据引擎需要创建和删除该文件夹的权限。

打开数据库文件时,Access是基于“文件”的系统。因此,当第一个用户(或进程)打开该数据库文件时,JET (现在的ACE)数据引擎将创建一个锁定文件(ldb)。该文件用于管理并发用户(在该文件夹中没有运行服务器系统或代码或进程-它是打开的平面简窗口文件)。

因此,如果服务器(或任何地方)上的共享文件夹不允许用户在该文件夹中创建(和删除)文件,则不能创建ldb锁定和数据冲突文件,因此数据库将被只读。

当最后一个打开该文件的用户(或进程)关闭该数据文件时,如果没有ohter用户处于活动状态,那么ldb锁定文件将被删除。有些人确实可以删除删除权限--而ldb文件可以保留下来,但即使删除锁定(ldb文件)的能力也常常会使这件事变得一团糟。

因此,所发生的是你只读,或经常“排他性”的权利在公开。

若要修复,则该共享文件夹需要具有“创建”和“删除”权限。我在某些情况下看到,如果给定的特定用户被授予了特定的权限,那么ldb文件将“继承”这些相同的权限,再次,所有其他用户要么被只读,要么不能使用数据库。

所以,长话短说?

作为一般规则,所有用户对该文件夹的权限都需要文件创建权限,并需要文件删除权限。当然,在您自己的个人计算机上,这是可行的,因为在大多数情况下,您对您的个人计算机上的任何文件夹和文件都有完全的权限。因此,您需要打开(放松)共享文件夹的安全权限--用户需要创建文件权限,并删除文件权限。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71973542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档