我正在尝试通过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”错误。
看不出怎么不能涉及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