Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyodbc和ms access 2010连接错误_Python_Ms Access_Pyodbc - Fatal编程技术网

Python pyodbc和ms access 2010连接错误

Python pyodbc和ms access 2010连接错误,python,ms-access,pyodbc,Python,Ms Access,Pyodbc,如何使用pyodbc访问Microsoft access 2010数据库(accdb)? 之前,我使用了一个mdb数据库,它可以很好地处理以下连接字符串: ODBC_CONN_STR = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s;' % ACCESS_DATABASE_FILE 现在我使用: import pyodbc ACCESS_DATABASE_FILE = "PSA_TEST.accdb" ODBC_CONN_STR = 'DR

如何使用pyodbc访问Microsoft access 2010数据库(accdb)? 之前,我使用了一个mdb数据库,它可以很好地处理以下连接字符串:

ODBC_CONN_STR = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s;' % ACCESS_DATABASE_FILE 
现在我使用:

import pyodbc
ACCESS_DATABASE_FILE = "PSA_TEST.accdb"
ODBC_CONN_STR = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' % ACCESS_DATABASE_FILE
conn = pyodbc.connect(ODBC_CONN_STR)
我得到的错误是: 错误:('HY000','HY000][Microsoft][ODBC Treiber für Microsoft Access]Kein zulässiger Dateiname.(-1044)(SQLDriverConnect)'))

这将转换为“文件名不可接受”。 我发现了一个相关的问题,但答案对我来说并不适用()。根据以下输出,我使用32位python:

python -c 'import struct; print struct.calcsize("P") * 8'
和MS访问32位

[编辑]

  • 以防万一,我用os.path.isfile(ACCESS\u DATABASE\u FILE)检查文件是否确实存在
  • 可以使用Access打开该文件
  • 使用新的连接字符串打开上一个mdb文件会显示相同的错误消息,afaik不是预期的行为

好的,很抱歉回答我自己的问题,但是通过玩游戏,我了解到如果使用第二个连接字符串,则需要指定绝对路径名:

ACCESS_DATABASE_FILE = 'C:\\path\\to\\PSA_TEST.accdb'
ODBC_CONN_STR = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' % ACCESS_DATABASE_FILE

然后,它甚至可以使用accdb文件,以及预期的mdb文件

好的,很抱歉回答我自己的问题,但是通过玩游戏,我了解到如果使用第二个连接字符串,则需要指定绝对路径名:

ACCESS_DATABASE_FILE = 'C:\\path\\to\\PSA_TEST.accdb'
ODBC_CONN_STR = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' % ACCESS_DATABASE_FILE

然后,它甚至可以使用accdb文件,以及预期的mdb文件

access数据库是否在当前工作目录中?如果没有,您需要提供文件的路径和文件名。是的。相同的代码适用于同一目录中的mdb文件和稍微不同的连接字符串。我检查了这是否是由于未正确解释下划线造成的,但将文件名更改为test.accdb不会更改结果。access数据库是否在当前工作目录中?如果没有,您需要提供文件的路径和文件名。是的。相同的代码适用于同一目录中的mdb文件和稍微不同的连接字符串。我检查了这是否是因为下划线没有正确解释,但是将文件名更改为test.accdb不会更改结果。感谢您花时间发布您的解决方案。回答您自己的问题没有错。对于相对路径,我们使用dbPath=os.path.join(path(file).parent.parent,“datasets\CDR\CDR\u Data.mdb”)连接字符串='驱动程序={Microsoft Access驱动程序(*.mdb,*.accdb)};DBQ=%s“%dbPath+”;'感谢您抽出时间发布您的解决方案。回答您自己的问题没有错。对于相对路径,我们使用dbPath=os.path.join(path(file).parent.parent,“datasets\CDR\CDR\u Data.mdb”)连接字符串='驱动程序={Microsoft Access驱动程序(*.mdb,*.accdb)};DBQ=%s“%dbPath+”;'