【问题标题】:32 bit pyodbc reading 64 bit access (accdb)32 位 pyodbc 读取 64 位访问 (accdb)
【发布时间】:2014-01-27 23:03:23
【问题描述】:

我在 Windows 8.1 64 位机器上运行 python 2.7 32 位。

我有 Access 2013 和一个 .accdb 文件,我正在尝试从 python 和 pyodbc 访问。

我可以在 64 位 ODBC 管理器中创建一个 64 位 DSN。但是,当我尝试从 python 连接到它时,出现错误:

错误: (u'IM002', u'[IM002] [Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序')

据推测,python 只是在寻找 32 位的 DSN,并没有找到我创建的 64 位的。

当我尝试在 32 位 ODBC 管理器中创建 32 位 DSN 时,没有用于 accdb 文件(只有 .mdb)的驱动程序。

我想我需要一个用于 Access 2013 文件 (.accdb) 的 32 位 ODBC 驱动程序,但一直找不到。

有可能做我想做的事吗? -- 32位python访问Access 2013 .accdb文件?

【问题讨论】:

    标签: python ms-access odbc


    【解决方案1】:

    包括 Python 在内的 32 位应用程序只能使用 32 位 ODBC 驱动程序。

    包括 Python 在内的 64 位应用程序只能使用 64 位 ODBC 驱动程序。

    如果你有:

    • 带有pyodbc模块的32位Python
    • 64 位 MS Access ODBC 驱动程序

    那么你必须改变一些东西:

    1. 您可以安装 64 位版本的 Python(我使用具有 odbc 模块的 Active Python),然后您可以使用 64 位版本的 pyodbc 模块(我在 Python 2.6、2.7 和 3.3 中看到它)李>
    2. 您可以安装 32 位版本 od MS Access 驱动程序

    使用pyodbc.dataSources(),您可以列出 ODBC 源:

    sources = pyodbc.dataSources()
    dsns = list(sources.keys())
    dsns.sort()
    sl = []
    for dsn in dsns:
        sl.append('%s [%s]' % (dsn, sources[dsn]))
    print('\n'.join(sl))
    

    如果您使用 ActiveState Python,那么您可以使用 odbc 模块列出它们,如我的食谱中所示:http://code.activestate.com/recipes/578782-printing-list-of-odbc-data-sources/?in=user-186902

    【讨论】:

      【解决方案2】:

      我也有同样的问题。对我来说,问题是我有 32 位 python 和 32 位 pyodbc 和 32 位 MS Access。但是我创建的 pyqt 应用程序无法在 64 位 Access 的计算机上运行。

      我的解决方案是安装此处找到的 32 位 Access 驱动程序(如 Mikal 所述)...http://www.microsoft.com/en-us/download/details.aspx?id=13255 在命令提示符下使用“/passive”选项。否则,它不会安装。

      例如, C:\Downloads\AccessDatabaseEngine.exe /被动 驱动程序已安装,现在我的应用程序可以在主机上正常运行。

      安装 32 位和 64 位 Access 驱动程序可能会或可能不会出现问题。到目前为止,我还没有看到任何东西。

      【讨论】:

      • 哇.. 这对我有用.. 我有 Access 2013 64bit 和 Python 32bit.. 和 pyodbc.. 起初.. 由于 32 位到 64 位的问题,pyodbc 连接不起作用.. 但是在安装 AccessDatabaseEngine.exe 之后,pyodbc 连接现在工作得很好。谢谢你。 (我不必对 /passive 做任何事情)。
      • 我已经通过安装 32 位 python 和访问 32 位驱动程序修复了这个问题。您可以通过此代码检查是否安装了 python。 >>> 导入结构 >>> 打印 (8*struct.calcsize("P"))
      【解决方案3】:

      试验和错误表明,安装“Access Database Engine”2007 似乎为 Access accdb 文件创建了 32 位 ODBC 源。

      【讨论】:

      • 如果安装 32 位版本的 Access 数据库引擎 2007 不会导致 64 位版本的 Access 2013 出现问题,那么这是个好消息。但是,最好在给定的计算机上只安装一个版本的 Access 数据库引擎(也称为“ACE”)。
      • 在他的 cmets 中没有任何地方建议甚至暗示正在使用甚至在计算机上安装 access(或 ACE)x64。给出的唯一信息是他有一个 2013 Access 文件并且正在创建(出于某种奇怪的原因)一个 x64 位 DSN,而实际上应该启动 x32 odbc 管理器。在这种情况下,安装 ACE 2010 或 2013 也应该可以正常工作。事实上,如果这真的是 2013 年的数据库,那么我建议使用 2013 版的 ACE。
      • @AlbertD.Kallal 对不起,不。问题的第二句以“我有 Access 2013 .accdb 文件...”开头。并且 OP 可以创建 64 位 DSN 的事实意味着已经安装了 some 版本的 ACE。
      • 好的,当然,虽然我不能 100% 确定创建 x64 DSN 是否意味着已安装 x64 ACE,但我可以这样做,我认为这是一个“好的”假设 - 所以只是尝试一定要在这里。
      猜你喜欢
      • 1970-01-01
      • 2018-02-06
      • 2022-01-20
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 2011-04-16
      • 1970-01-01
      相关资源
      最近更新 更多