Подтвердить что ты не робот

Подстановочные знаки Microsoft Jet: знак звездочки или процент?

Каков надлежащий многосимвольный шаблон в операторе LIKE в Microsoft Jet и какой параметр влияет на него (если есть)? Я поддерживаю старое приложение ASP, которое работает на Microsoft Jet (в базе данных Access), и оно использует символ% в операторе LIKE, но у меня есть клиент, у которого, по-видимому, есть проблемы в его среде, потому что символ% понимается как обычный характер, и я предполагаю, что его многосимвольный шаблон *. Кроме того, я почти уверен, что в прошлом я написал приложение с запросами, используя * вместо%. Наконец, Microsoft Access (как приложение) также работает только с *, а не% (но я не уверен, насколько это важно).

Я просто потратил около 20 минут на поиск в Интернете без каких-либо полезных результатов, и поэтому я подумал, что было бы полезно спросить о stackoverflow. Кто-то, возможно, уже это знает, и лучше оставить потенциальные ответы на stackoverflow, чем любой другой случайный дискуссионный форум в любом случае.

4b9b3361

Ответ 1

Прямой ответ заключается в том, что поведение подстановочных знаков зависит от режима запроса ANSI используемого интерфейса.

Режим запроса ANSI-89 ( "традиционный режим" ) использует символ *, режим запросов ANSI-92 ( "режим совместимости SQL Server" ) использует символ %. Эти режимы специфичны для ACE/Jet и имеют только сходство с стандартами ANSI/ISO SQL-89 и SQL-92.

Интерфейс ADO (OLE DB) всегда использует режим запросов ANSI-92.

Интерфейс DAO всегда использует режим запросов ANSI-89.

При использовании ODBC режим запроса может быть явно указан с помощью ExtendedAnsiSQL.

Пользовательский интерфейс MS Access, начиная с версии 2003 года, может использовать либо режим запроса, поэтому не предполагайте, что он один или другой в любой момент времени (например, не используйте подстановочные символы, зависящие от режима запроса в Validation Правила).

Синтаксис ACE/Jet SQL имеет ключевое слово ALIKE, которое позволяет символам режима запроса ANSI-92 (% и _) независимо от режима запроса интерфейса, однако имеет небольшой недостаток ALIKE не совместимо с SQL-92 (однако ALIKE остается очень переносимым). Главный недостаток, однако, заключается в том, что я понимаю, что ключевое слово ALIKE официально не поддерживается (хотя я не могу себе представить, что оно исчезнет или изменит поведение в ближайшее время).

Ответ 2

Если вы используете DAO, используйте звездочку (и знак вопроса для одиночного символьного заполнителя). Если вы используете ADO, используйте знак процента (и подчеркивание).

Ответ 4

Доступ к Jet через ODBC, мне не ясно, какие маски должны использоваться. Я бы предположил, что это обычные Jet SQL (*/?), Но поскольку я никогда не использую данные Jet через ODBC, я не могу сказать.

Внутри Access, как говорится в статье Remou cites, в коде, это зависит от того, какой интерфейс доступа к данным вы используете - ADO (который никто не должен использовать из Access), вы используете%/_, тогда как с DAO (Jet собственный слой интерфейса), вы используете родные групповые символы Jet (*/?).

В более поздних версиях Access выполняется SQL-запрос в Access. Я не знаю, добавил ли он Access 2002 или 2003, но в настоящее время существует режим совместимости с ANSI SQL 92, который вы можете включить. Если вы это сделаете, подстановочные знаки станут%/_ вместо */?. Но возможность выбора режима ANSI применяется только в самом доступе - как уже сообщалось, мы должны выбрать разные библиотеки интерфейса данных для использования разных режимов SQL, с ADO с использованием 92 и DAO и ODBC 89.