Обратите внимание, что подстановочный знак *
с ключевым словом LIKE
будет иметь желаемый эффект только в режиме запросов ANSI-89.
Многие люди ошибочно полагают, что подстановочный знак в Access / Jet всегда *. Не так. У Jet есть два подстановочных знака:% в режиме запросов ANSI-92 и * в режиме запросов ANSI-89.
ADO всегда ANSI-92, а DAO всегда ANSI-89, но интерфейс доступа может быть любым.
При использовании ключевого слова LIKE в объекте базы данных (то есть что-то, что будет сохранено в файле mdb), вам следует подумать: что произойдет, если кто-то использует эту базу данных, используя режим запросов, отличный от того, который я обычно использую использовать себя? Скажем, вы хотели ограничить текстовое поле только числовыми символами и написали свое Правило валидации следующим образом:
NOT LIKE "*[!0-9]*"
Если кто-то невольно (или иным образом) подключится к вашей .mdb через ADO, то приведенное выше правило проверки позволит ему добавлять данные с нечисловыми символами, и ваша целостность данных будет нарушена. Не хорошо.
Лучше IMO всегда кодировать для обоих режимов запросов ANSI. Возможно, это лучше всего достигается путем явного кодирования для обоих режимов, например
NOT LIKE "*[!0-9]*" AND NOT LIKE "%[!0-9]%"
Но с более сложным Jet SQL DML / DDL, это может быть очень трудно достичь кратко. Вот почему я рекомендую использовать ключевое слово ALIKE, которое использует подстановочный знак ANSI-92 Query Mode независимо от Query Mode, например.
NOT ALIKE "%[!0-9]%"
Заметьте, что ALIKE недокументирован (и я полагаю, именно поэтому мой оригинальный пост был уценен). Я проверил это в Jet 3.51 (Access97), Jet 4.0 (Access2000 до 2003) и ACE (Access2007), и он отлично работает. Ранее я публиковал это в новостных группах и получил одобрение Access MVP. Обычно я бы держался подальше от недокументированных функций, но сделал бы исключение в этом случае, потому что Jet устарел в течение почти десятилетия, и команда Access, которая поддерживает его, не заинтересована в внесении глубоких изменений в движки (или исправлении ошибок! ), что делает реактивный двигатель очень стабильным продуктом.
Подробнее о режимах запросов ANSI Jet см. О режиме запросов SQL ANSI .