Microsoft Access Database Engine 2016 - проблемы с некоторыми SQL запросами, которые хорошо работают с 2010 - PullRequest
0 голосов
/ 30 января 2020

У меня есть приложение, которое работает нормально в 32-разрядной версии, используя строку подключения:

Driver={Microsoft Access Driver (*.mdb)}; Dbq=MyDatabase.mdb; 

с использованием ADO в C ++ на P C без установки Office.

I Я конвертировал его в x64, и я считаю, что мне нужно установить некоторые драйверы Access, независимо от того, установлен ли на хосте P C x64 Office или нет. Поэтому я беру Microsoft Access Database Engine 2016 Reistributable и устанавливаю его.

В целом все работает нормально, но некоторые SQL запросы не выполняются. Наиболее заметно те, которые используют LIKE '%somevalue%' - теперь я понимаю, что % - это ANSI-92, но он работает нормально, как я говорю, поэтому предположим, что это связано с ADO (я мог бы изменить это на ALIKE я думаю).

Чего я не понимаю, так это того, что если я установлю Access Database Engine 2010, то все будет работать как положено Кажется, что-то другое в Access Database Engine 2016. Я искал некоторые заметки о выпуске / критические изменения, но ничего не смог найти.

Так что мой вопрос: есть ли изменения в том, как SQL проанализирован в Microsoft Access Database Engine 2016 и должен ли я просто попросить клиентов установить версию 2010?

Примечание: другой запрос, который, по-видимому, не выполняется, - это таблица с полем Yes/No. У меня есть запрос, который проверяет: field <> 0, и это выдает исключение.

Обновление: если я установлю Microsoft Access 2016 Runtime, тогда, кажется, все работает. Таким образом, проблема выглядит следующим образом: c Microsoft Access Database Engine 2016

Итак, в итоге:

No Office Installed: Installed Access 2016 x64 Database Engine: Query FAILS
No Office Installed: Installed Access 2010 x64 Database Engine: Query PASSES
32bit Office Installed: Installed Access 2016 x64 Database Engine: Query FAILS
32bit Office Installed: Installed Access 2010 x64 Database Engine: Query PASSES
x64 Office Installed: Installed Access 2016 x64 Database Engine: Query PASSES

Где запрос:

SELECT * from sometable WHERE somefield LIKE '%ABC%';

Настройка :

Window 10 Version 1909
32 bit Office: Microsoft Office MSO 16.0.12325.20280 32bit 
64 bit Office: Microsoft Office MSO 16.0.12325.20280 64bit

Доступ к ядру базы данных (x64) здесь: microsoft.com / ru-ru / download / details.aspx? Id = 54920

Мое приложение это x64

1 Ответ

0 голосов
/ 06 февраля 2020

Используете ли вы SQL Сервер в качестве серверной базы данных или Access?
В SQL Сервер% является подстановочным знаком.

В чистой среде доступа стандартным символом подстановки обычно является *
Может быть параметр для изменения этого, но я не могу вспомнить.

ссылка: https://support.office.com/en-us/article/like-operator-b2f7ef03-9085-4ffb-9829-eef18358e931

...