JET SQL: LEFT JOINS и RIGHT JOINS работают только под JET 4.0 и выше? - PullRequest
1 голос
/ 01 мая 2010

Применима ли следующая статья ко всем видам использования JET (в том числе из клиентских приложений через DAO или OLEDB):

http://support.microsoft.com/kb/275058

Означает ли это, что JET 4.0 или выше является обязательным для всего, что связано с MDB Access?

Ответы [ 3 ]

2 голосов
/ 02 мая 2010

К сожалению, статья в КБ написана плохо. Синтаксис SQL 92, на который они ссылаются, - это когда вы добавляете фильтр сравнения не столбцов в предложении ON соединения OUTER (что также означает, что он не будет доступен для просмотра в QBE). Таким образом, стандартное внешнее объединение (LEFT или RIGHT) со стандартным сравнением столбцов с таблицами в запросе будет прекрасно работать во всех версиях Jet. Когда вы пытаетесь добавить что-то кроме фильтра сравнения столбцов (например, [Col]> 200) в предложении ON соединения OUTER, Access неправильно интерпретирует оператор SQL.

Я лично столкнулся с этой самой проблемой. Короче говоря, тот факт, что это стандартный SQL, не означает, что Access выдаст правильные результаты. Это одна из многих вещей, которые многих разочаровывают в Access.

ДОБАВЛЕНИЕ Чтобы ответить на ваш последний вопрос, нет, не обязательно использовать Jet в качестве технологии внутреннего хранилища для приложения, разработанного с помощью Access. Вы можете создавать решения Access, которые используют SQL Server или другие продукты баз данных в качестве внутреннего хранилища базы данных.

Статья в Википедии о Jet Engine на самом деле довольно подробно описывает различия и особенности.

1 голос
/ 02 мая 2010

EDIT: Я просто перечитал статью KB, и там говорится, что проблема в Jet 4.0 Service Pack 3 и более ранних версиях - это версия Jet, которая давно, давно заменена. Не должно быть компьютеров Windows 2000 или более поздней версии, на которых включен Центр обновления Windows или которые были обновлены с момента c. 2002 с любой версией Jet, такой же старой, как и пакет обновления 3. Чтобы проверить версию Jet на вашем компьютере, найдите MSJET40.DLL. Номер сборки начинается с номера пакета обновления. На этом компьютере у меня номер версии 4.0.9511.0, так что это SP9.

Если у вас MSJET40.DLL с номером версии 4.0.3XXX.X или более ранней, следуйте инструкциям по получению пакета обновления, и проблема будет решена. Но я не верю, что существует какое-то значительное количество ПК с Windows, на которых все еще установлен Jet 4.0 SP3 или более ранняя версия. И только ПК, которые не обновляются с помощью Центра обновления Windows, могут иметь его.

ОРИГИНАЛЬНЫЙ ОТВЕТ: Jet 4.0 был выпущен в 1999 году вместе с Access 2000. Он был включен в Windows 2000 и с тех пор входит в каждую версию Windows. Потому что это компонент ОС (он используется для взаимодействия с хранилищем данных Active Directory, хотя AD использует другой механизм Jet, а не тот, который используется Access). Jet 4.0 является замороженной версией Jet и больше не будет разрабатываться командой Windows (которой принадлежит код для нее).

Когда был выпущен Access 2007, была создана новая версия ядра базы данных Jet, частная для команды разработчиков Access и называемая ACE. Это действительно Jet 5.0 (или 4.5, в зависимости от того, насколько важными вы считаете усовершенствования), но он представил новый формат файлов, ACCDB.

В статье, которую вы цитируете, говорится, что она применима только к Access 2002 и Access 2003, но я думаю, что, поскольку это проблема Jet 4.0, она будет применяться и к Access 2000. Аналогичным образом, она будет применяться к любому использованию Jet 4.0 Доступ извне, например, OLEDB или ODBC.

Обратите внимание, что через DAO вы не можете столкнуться с проблемой, потому что DAO не может использовать режим совместимости с SQL 92. Проблема всегда будет возникать с OLEDB, поскольку драйвер Jet для OLEDB всегда использует режим SQL 92.

Мне не ясно, если проблема будет устранена, если вы используете ACE для запроса MDB.

0 голосов
/ 02 мая 2010

JET - это механизм базы данных, используемый Access. Или, другими словами, Access - это приложение, построенное на базе данных JET. (Доступ не должен использовать JET, он также может подключаться напрямую к серверу SQL.)

Когда вы выполняете запросы к файлу .mdb, независимо от технологии, запрос выполняет механизм JET.

Версия JET необходима для доступа к .mdb, но должна ли она быть 4.0, будет зависеть от версии файла .MDB и от того, есть ли в предыдущих версиях распространенные ошибки, которых нужно избегать. Но в целом, да, вы должны ожидать использовать последнюю версию JET с Access MDB.

OUTER JOINs работают на более старых версиях - упомянутая ошибка распространена только тогда, когда есть также предложение WHERE.

...