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

时间:2019-02-12 12:39:27

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

我正在尝试通过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”错误。

1 个答案:

答案 0 :(得分:0)

看不到如何不能参与VBA。

如果合适的Excel版本,请有条件地运行两行。使用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