Убедитесь, что SQL-92 в Access 2000 mdb для SQL Server в Access 2010

Из-за обстоятельств, которые не полностью находятся под моим контролем, я должен разработать запросы ACCESS, которые будут храниться в Access 2000 MDB, но которые могут быть разработаны под любым из: Access 2000, 2002, 2003, 2007, 2010. Эти запросы будут обращаться к ( через связанные таблицы) либо базу данных MS SQL Server, либо файл .MDB Access 2000.

В прошлом у нас были проблемы, которые мы отслеживали до запросов, несовместимых с ANSI-92. Мы решили эту проблему, установив флажок на вкладке «Таблицы / запросы» диалогового окна «Инструменты | Параметры» (в более старых версиях Access, чем 2007).

Мы перемещаем эти .MDB приложения Access между различными системами, и теперь у нас в целом нет никаких проблем.

Однако я только что разработал запрос, который отлично работает со всеми внутренними соединениями, но когда я меняю одно из соединений на внешнее соединение, запрос завершается с ошибкой «Недопустимая операция» в Access 2010. Поэтому я подумал, что буду проверьте, установлен ли еще флажок ANSI-92. Я не мог его найти.

Теперь я ЗНАЮ, что Access 2003 и более поздние версии автоматически используют синтаксис ANSI 92, но мне было интересно, есть ли способ проверить, что это так для этих запросов в этих (довольно конкретных обстоятельствах). Я заметил, что когда мы изменили флажок, все мои запросы типа «Нравится» превратились в запросы типа «Нравится» ...

Таким образом, вопрос сводится к тому, что синтаксис ANSI 92 полностью прозрачен в этих обстоятельствах, и причина, по которой мой запрос не работает, заключается в другом ...

TIA, Паоло


person PaoloFCantoni    schedule 17.06.2011    source источник
comment
A2003 и более поздние версии НЕ используют синтаксис ANSI 92 автоматически. Что заставляет вас думать, что они делают?   -  person David-W-Fenton    schedule 17.06.2011
comment
Документация Microsoft (я думаю, по статье базы знаний).   -  person PaoloFCantoni    schedule 22.06.2011
comment
Это была документация Access или документация ADO? Если первое, я уверен, что он этого не сказал - я предполагаю, что это второе, поскольку ADO действительно всегда использует синтаксис ANSI 92.   -  person David-W-Fenton    schedule 23.06.2011


Ответы (2)


В Access 2010 параметр совместимости синтаксиса SQL Server находится в разделе:

Файл> Параметры> Дизайнеры объектов> Дизайн запросов.

Сначала вам нужно проверить, установлен ли этот параметр, чтобы убедиться, что поведение вашего запроса нормальное.

Что касается LIKE vs ALIKE, последний будет работать по-ANSI, используя % и _ сопоставление с образцом.
В режиме совместимости с SQL-89 (подмножество SQL MS Access) LIKE работает только с * и ? шаблонами, но если если вы измените совместимость на SQL-92, вам нужно переписать запросы с % и _.

Вот почему был представлен ALIKE, он позволяет вам писать шаблоны, совместимые с ANSI, независимо от выбранного вами уровня совместимости (поэтому в режиме совместимости с SQL-92 оба ведут себя одинаково).

person Renaud Bompuis    schedule 17.06.2011

На самом деле нет причин для включения режима SQL ANSI 92 во внешнем интерфейсе Access, за исключением случаев, когда вы ленивый программист SQL Server, который хочет забыть, что он пишет SQL в Access вместо SQL Server.

Причина, по которой вы не хотите этого делать, заключается в том, что это меняет вещи в приложении Access, но на самом деле ничего не делает для улучшения взаимодействия с серверной частью SQL Server. То есть, если вы используете подстановочные знаки SQL 89 в своем SQL во внешнем интерфейсе Access, ваш драйвер ODBC позаботится о преобразовании в подстановочные знаки SQL 92, когда он отправляет SQL на сервер. Единственным исключением могут быть сквозные запросы, но они в любом случае написаны на собственном SQL вашего сервера.

person David-W-Fenton    schedule 17.06.2011
comment
Есть веские причины для написания запросов в синтаксисе, совместимом с SQL Server: это упрощает перенос запросов на SQL-сервер, если это необходимо, упрощает их повторное использование в других системах, если вы решите отказаться от Access, это позволяет группе поддерживать один набор совместимых запросов во всей организации, вместо того, чтобы иметь запросы, специфичные для Access, И SQL Server. Вы хорошо замечаете, что режим совместимости не очень полезен для самого Access, но вы не можете предположить, что выбор людей для этого основан исключительно на их лени. Это бесплатно. - person Renaud Bompuis; 18.06.2011