用于查询 Access 数据库 (.mdb) 文件的只读方法?

Posted

技术标签:

【中文标题】用于查询 Access 数据库 (.mdb) 文件的只读方法?【英文标题】:Read only method for querying an Access database (.mdb) file? 【发布时间】:2020-07-30 12:07:56 【问题描述】:

我有一个读取 .MDB 数据库并将其转换为 csv 文件的代码,并且由于我的数据库位于共享网络文件夹中,当代码正在读取数据库时,其他测试台无法写入数据库。

我需要一种以只读方式读取此 .mdb 的方法,以便每个人都可以在读取此代码时打开它进行编辑

import pyodbc

DRV = 'Microsoft Access Driver (*.mdb)'
PWD = ''
    
mdb = 'C:\newfolder\database.mdb'
    
con = pyodbc.connect('DRIVER=;DBQ=;PWD='.format(DRV, mdb, PWD)) # connect to db
cur = con.cursor()
sql = 'SELECT * FROM CK_Test_Results;' # run a query and get the results
rows = cur.execute(sql).fetchall()
cur.close()
con.close()
    
with open('Database.csv', 'w', newline='') as fou:
    csv_writer = csv.writer(fou) # default field-delimiter is ","
    csv_writer.writerows(rows)

【问题讨论】:

【参考方案1】:

您可以通过将;ReadOnly=1 附加到您的连接字符串来强制连接为只读。但是,其他用户当然可以在您阅读数据库时更新它。

检查 .mdb 文件所在的文件夹的权限; 所有 数据库用户必须对文件夹具有读/写访问权限,才能使并发多用户访问正常工作。详情请见this answer。

【讨论】:

感谢 thompson,您总是来回答 MDB、ODBC 的问题。【参考方案2】:

从控制面板/管理工具编辑您的 ODBC 连接文件。选择 ODBC 驱动程序,然后单击配置,然后单击选项。在显示窗口的底部,您应该会看到独占和/或只读。

【讨论】:

但是我的 odbc 也在做一些写操作,我将它创建为 exe 并发送给我的团队,我不能告诉每个人这个设置。如果里面有任何选项会更好这段代码 你应该考虑使用“真实”的数据库,比如mysql、Postges……也可以将数据库复制到临时目录(如果复制时间“短”)……

以上是关于用于查询 Access 数据库 (.mdb) 文件的只读方法?的主要内容,如果未能解决你的问题,请参考以下文章

使用 LINQ 和 C# 查询 Microsoft Access MDB 数据库

从 MS Access 访问 .mdb 文件中的后端表

用于更改 MS Access ODBC 系统 DSN 的 .mdb 文件路径的命令行?

PowerShell MDB 查询 - 脚本在 Access 中工作,不在 PowerShell [重复]

使用 PHP 查询 MDB 文件,并返回 JSON

Access数据库:能否编译mdb文件到exe文件?