OLEDB 12.0 连接与 Excel 2010 和 Excel 2013 兼容

Posted

技术标签:

【中文标题】OLEDB 12.0 连接与 Excel 2010 和 Excel 2013 兼容【英文标题】:OLEDB 12.0 Connection compatible with both Excel 2010 and Excel 2013 【发布时间】:2019-02-12 12:39:27 【问题描述】:

我正在尝试通过 Microsoft ACE OLEDB 12.0 连接到 MS Access 数据库。我想让它同时在 Excel 2010 和 Excel 2013 上运行,以便最终用户只需刷新连接即可获取新数据。问题是 Excel 2013 向连接字符串添加了 2 个属性,导致 Excel 2010 用户无法使用该连接。有没有办法阻止 Excel 2013 添加这些,或者让 Excel 2010 忽略它们?具有连接的文件将位于网络驱动器上,可供 Excel 2010 和 2013 用户使用。

Excel 2010:

Provider=Microsoft.ACE.OLEDB.12.0;
User ID=USER;
Data Source=path1.mdb;Mode=Read;
Extended Properties="";
Jet OLEDB:System database=path2.mdw;
Jet OLEDB:Registry Path="";
Jet OLEDB:Engine Type=5;
Jet OLEDB:Database Locking Mode=1;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;
Jet OLEDB:Support Complex Data=False;
Jet OLEDB:Bypass UserInfo Validation=False

Excel 2013:

Provider=Microsoft.ACE.OLEDB.12.0;
User ID=USER;
Data Source=path1.mdb;Mode=Read;
Extended Properties="";
Jet OLEDB:System database=path2.mdw;
Jet OLEDB:Registry Path="";
Jet OLEDB:Engine Type=5;
Jet OLEDB:Database Locking Mode=1;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;
Jet OLEDB:Support Complex Data=False;
Jet OLEDB:Bypass UserInfo Validation=False;
Jet OLEDB:Limited DB Caching=False;
Jet OLEDB:Bypass ChoiceField Validation=False

如您所见,Excel 2013 又添加了 2 行,导致此连接无法使用。我考虑过在刷新数据之前添加 VBA 代码来更改连接字符串,但如果有办法不让 vba 参与进来,那就太好了。

编辑: 当在 Excel 2010 中使用这些额外的行时,Excel 会出现“找不到可安装的 ISAM”错误。

【问题讨论】:

您遇到错误了吗?通常,这些行不会造成任何问题,它们只是传递给 Access 数据库引擎,您的 Excel 安装不会影响任何事情。 当在 Excel 2010 中使用这些额外的行时,它会给出“找不到可安装的 ISAM”错误 您是如何生成和应用这些连接字符串的? (我原以为你可以编辑并保存它们。) 还值得向读者指出您使用的是 Access 2003 文件格式数据库。 @AndyG 连接字符串是在完成连接设置后生成的。在这个过程中,我只填写了用户 ID、数据源和系统数据库字段,其余的设置为默认值。我知道删除这些额外的行可以解决问题,但这只是暂时的,当 Excel 2013 用户刷新此连接时,它会再次添加它们。如原始帖子中所述,带有连接的文件由 E2010 和 E2013 用户使用,因此每次 E2010 在 E2013 之后使用它时,他都必须从每个连接的定义中删除这些行 【参考方案1】:

不明白怎么不能涉及VBA。

如果 Excel 版本合适,则有条件地运行 2 行。使用Application.Version 确定 Excel 版本。这在 Excel 2010 中返回 14.0。我认为 Excel 2013 是 15.0 版。

If Application.Version > 14 Then
    Jet OLEDB:Limited DB Caching=False;
    Jet OLEDB:Bypass ChoiceField Validation=False
End If

【讨论】:

以上是关于OLEDB 12.0 连接与 Excel 2010 和 Excel 2013 兼容的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的区别(转)

未在本机注册Microsoft.ACE.OleDb.12.0

使用 OLEDB 从 Excel 中读取数据

从Excel中导入数据时,提示“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决办法

“Microsoft.ACE.OLEDB.12.0”尚未注册

sqlserver 2005 访问接口中没有microsoft.ACE.OLEDB.12.0