OLEDB 12.0 Соединение совместимо с Excel 2010 и Excel 2013 - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь подключиться к базе данных MS Access через Microsoft ACE OLEDB 12.0.Я бы хотел, чтобы он работал как в 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 голосов
/ 12 февраля 2019

Не понимаю, как не задействовать VBA.

Условно запустить 2 строки, если подходит версия Excel.Используйте Application.Version для определения версии Excel.Это возвращает 14.0 в Excel 2010. Я думаю, что Excel 2013 - это версия 15.0.

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