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

StackOverflow https://stackoverflow.com/questions/719115

  •  23-08-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

При использовании ODBC режим запроса может быть явно задан с помощью Расширенный синтаксис sql Отметить.

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

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

Другие советы

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

Возможно, вы найдете это полезным:

http://msdn.microsoft.com/en-us/library/aa140104 (office.10).aspx

В сетке разработки запросов и с DAO вы используете *, с ADO и ASP вы используете %

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top