【问题标题】:OLEDB 12.0 Connection compatible with both Excel 2010 and Excel 2013OLEDB 12.0 连接与 Excel 2010 和 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 之后使用它时,他都必须从每个连接的定义中删除这些行

标签: excel ms-access excel-2010 oledb excel-2013


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2011-05-03
    • 2020-05-29
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多