- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
其他更高级的程序员:
如果这看起来像是令人厌倦的 Python 32 位/64 位 ODBC/OLEDB Windows 问题,请原谅我,但我尝试搜索论坛但无法完全找到我的问题的原因。
基本上,我尝试首先使用 pypyodbc 模块通过 ODBC 连接一个非常简单的 Python 脚本,然后使用 adodbapi 模块通过 OLEDB 连接一个非常简单的 Python 脚本,两者都尝试连接到 MS Access 2010 .accdb 数据库。但是,对于 OLEDB,我始终得到 'Provider not found。它可能没有正确安装' 错误。对于 ODBC,我始终收到 “未找到数据源名称且未指定默认驱动程序”。
深入挖掘后,发生了一些非凡的事情。在 Python 中,JET.OLEDB.4.0 适用于 .mdb 文件,但 ACE.OLEDB.12.0 不适用于 .accdb 文件。然而,当我运行 Access VBA ADODB 连接时,情况正好相反!
我的环境包括:
是的,我下载并成功安装了 AccessDatabaseEngine_x64.exe。是的,我将 ODBC 数据源指向 %Win%/SysWOW64。是的,我在上述文件夹的 odbcad32.exe 中看到了 mdb 和 accdb 的 Access 驱动程序和数据源。是的,我在 regedit 中看到了 Access (*mdb) 和 Access (*mdb, *accdb) 数据源和 Access 驱动程序的注册表项。是的,我重新启动并关闭了我的机器。
OLEDB
以下是我的连接字符串,它返回'Provider not found error...':
import adodbapi
databasename = 'D:\directorypath\DatabaseName.accdb'
constr = 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s' % databasename
db = adodbapi.connect(constr)
值得注意的是,以下连接字符串可以完美地工作,但当然只适用于 .mdb 文件:
import adodbapi
databasename = 'D:\otherdirectorypath\OtherDatabaseName.mdb'
constr = 'Provider=Microsoft.JET.OLEDB.4.0;Data Source=%s' % databasename
db = adodbapi.connect(constr)
ODBC
以下是我的连接字符串,它返回“未找到数据源名称...”:
import pypyodbc
databasename = 'D:\directorypath\DatabaseName.accdb'
constr = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' % databasename
db = pypyodbc.connect(constr)
像上面一样,下面的工作很理想,但只适用于 .mdb 文件:
import pypyodbc
databasename = 'D:\otherdirectorypath\OtherDatabaseName.mdb'
constr = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s;' % databasename
db = pypyodbc.connect(constr)
Access VBA
有趣的是,完全相反的情况发生在 Access VBA 模块(当然还有 ActiveX 数据对象库引用)中,驱动程序和提供程序都使用相同的连接字符串。
代码完美适用于 .mdb 和 .accdb 文件:
Dim constr As String
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\databasedirectory\DatabaseName.accdb;Persist Security Info=False"
' OR constr = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\databasedirectory\DatabaseName.accdb;Persist Security Info=False"
Set CN = New ADODB.Connection
CN.Open (constr)
代码返回错误 - “找不到提供程序” 或 “无法加载指定的驱动程序”:
Dim constr As String
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
constr = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=D:\otherdatabasedirectory\OtherDatabaseName.mdb;Persist Security Info=False"
' OR constr = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=D:\otherdatabasedirectory\OtherDatabaseName.mdb;Persist Security Info=False"
Set CN = New ADODB.Connection
CN.Open (constr)
ACE.OLEDB.12.0 对比 ACE.OLEDB.14.0
最后,仍然在 Access VBA 中,只有我认为对应于 MS Access 2007 的 Provider: Microsoft.ACE.OLEDB.12.0 有效。但是, Provider: Microsoft.ACE.OLEDB.14.0 不适用于我安装的 MS Access 2010。这有什么原因吗?
结论
我知道 ActiveX 库是一种不同于 Python 模块库的技术,Microsoft 不允许同时使用 x32 位和 x64 位组件,但为什么我不能得到我想要的结果。我想到了 AccessDatabaseEngine_x64.exe/passive,但我听到奇怪的 Office 结果走这条路。我需要为 64 位安装 Python3.4 吗?请帮助或建议!谢谢。
最佳答案
简答:
是的,如果您安装了 64 位 Office 并且想要从 Python 操作 Access 数据库,那么您应该运行 64 位版本的 Python,以尽量减少麻烦。
更长的答案:
较旧的“Jet”引擎/驱动程序和较新的 Access 数据库引擎(又名“ACE”)引擎/驱动程序是完全独立的实体。
较老的“Jet”司机...
ODBC: Driver={Microsoft Access Driver (*.mdb)}
OLEDB: Provider=Microsoft.Jet.OLEDB.4.0
...作为 Windows 操作系统的组成部分安装,但它们仅适用于 32 位应用程序。
您安装了 64 位 Office,因此您拥有更新的“ACE”驱动程序的 64 位版本......
ODBC: Driver={Microsoft Access Driver (*.mdb, *.accdb)}
OLEDB: Provider=Microsoft.ACE.OLEDB.12.0
... 而且它们仅适用于 64 位应用程序。
您当前的 32 位 Python 环境可以使用 Jet 驱动程序但不能使用 ACE 驱动程序
您拥有 64 位版本的 Access,因此您的 VBA 代码在 64 位环境中运行,它可以使用 ACE 驱动程序但不能使用 Jet 驱动程序。
关于python - Python 和 MS Access VBA 之间 OLEDB/ODBC 的相反工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25951912/
这个问题已经有答案了: what is the difference between OLE DB and ODBC data sources? (11 个回答) 已关闭10 年前。 OLEDB 和
我正在制作安装脚本并且我正在使用 ODBC,我如何自动将节点添加到 ODBC 数据源。 使用 Visual Studio 安装项目构建安装程序,但我能够为其运行任何脚本。 谢谢。 最佳答案 1) OD
所以我正在将一个旧的 filemaker 数据库传输到 MySQL,一些重复的字段给我带来了一些问题。我读过 ODBC 标准支持这些字段,只有当它们的类型是“文本”并且每个重复都与某个定界符( see
一个月前,我向一个哥们展示了如何使用 .NET 来查询 MySQL。它工作得很好,但他不明白为什么我们需要一个 MySQL 与 ODBC 结合的“驱动程序”。他认为 ODBC 就足够了。 当他问我为什
为什么 ODBC 很慢?底层架构是什么?有人可以对此多加关注> 最佳答案 一般来说(我的意思是 GENERAL)ODBC 驱动程序在混合中添加了另一层。它必须接受您的查询并将其转换为本地查询语言(本地
问题:我正在使用 AsteriskNow,它在 VirtualBox 中运行 asterisk 2.0 服务器。我想使用 ODBC 模块将 Asterisk 与 MySQL 数据库连接起来。但它失败了
我有一个名为“myodbc”的用户定义的 ODBC 连接,其中保存了用户名和密码。这是管理员为我创建的,因此我无法访问凭据。 如何在不传递凭据的情况下与 SAS 建立连接。我认为以下工作会,但我收到无
我最近发现 libname 语句对于访问驻留在 odbc 中的表非常方便。但我不知道如何访问那些具有两级名称的表。下面是一个例子。 我使用的旧代码(此代码有效): proc sql; conn
我们通常使用 MS Visual Foxpro v9.0 SP1、语言、表格和报告。但是,有时我们使用 ODBC 驱动程序连接到表。 ODBC 驱动程序是为 Foxpro v6 编写的,不支持某些嵌套
我第一次尝试在使用 PostgreSQL 9 的 Windows XP Pro 上打开一个程序。我收到一条错误消息: A problem was encountered while trying to
我有一个 spark 集群设置,并在我的数据集上尝试了 native scala 和 spark sql,该设置似乎在大多数情况下都有效。我有以下问题 从 ODBC/外部连接到集群,我应该期待什么?
我正在尝试为 Hive 设置 ODBC 连接。我按照以下步骤操作,但没有成功。 用户 DSN-->添加--> Hortonworks Hive ODBC 驱动程序--> 我提供了以下详细信息 主机:主
我找不到任何文档或示例。到目前为止,我可以成功连接,但是我不知道选择和返回数据的语法。 :odbc.start() {:ok, conn} = :odbc.connect('DSN=mydsn;UID
我正在阅读一篇有关数据透视缓存的 MS Excel 帮助文章,并想知道 OLE DB 和 ODBC 源 的含义 ...You should use the CommandText property i
从应用程序调用 SQLColAttribute 时出现 SQL_INVALID_HANDLE 错误(尝试与自行开发的 odbc 驱动程序通信)我不知道为什么句柄被声明为无效句柄,因为它是一个简单的结构
我有一个简单的 SQL,需要通过 ODBC 调用 RedShift。SQL是这样的 SELECT id as Tag From SomeView 这根本不起作用。它给了我错误 DataSource.E
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
从应用程序调用 SQLColAttribute 时出现 SQL_INVALID_HANDLE 错误(尝试与自行开发的 odbc 驱动程序通信)我不知道为什么句柄被声明为无效句柄,因为它是一个简单的结构
我有一个简单的 SQL,需要通过 ODBC 调用 RedShift。SQL是这样的 SELECT id as Tag From SomeView 这根本不起作用。它给了我错误 DataSource.E
我正在尝试使用 BIML 生成自动暂存区域。源数据库为Progress,通过ODBC连接。 我正在使用以下演练: https://www.cathrinewilhelmsen.net/2015/07/
我是一名优秀的程序员,十分优秀!