Использование Like * работает в MS-Access, но не VBA - PullRequest
6 голосов
/ 18 мая 2011

У меня простой запрос, но я сталкиваюсь с проблемами при использовании LIKE в VBA. Моя строка SQL в VBA:

stsql1 = "Select Top 25 data.* from data where data.Description Like ('*') "

Когда я запускаю эту строку sql в своем коде VBA, я не получаю возвращаемых записей, но если я копирую / вставляю эту же строку в запрос в SQL View в MS Access, запрос возвращает ожидаемые значения. Есть ли хитрость в использовании синтаксиса «Мне нравится» в VBA?

Я могу предоставить дополнительный код и небольшую версию базы данных, если это поможет.

Ответы [ 4 ]

9 голосов
/ 18 мая 2011

Для SQL ядро ​​базы данных будет принимать одинарные или двойные кавычки в качестве разделителей текста.Таким образом, любое из этих 2 WHERE условий будет работать.

WHERE some_field Like '*'
WHERE some_field Like "*"

VBA, однако, принимает только двойные кавычки в качестве разделителей текста, поэтому вам придется использовать вторую форму.

Два других пунктао вашем SELECT утверждении:

Select Top 25 data.* from data where data.Description Like ('*')
  1. TOP [number] является произвольным без предложения ORDER BY
  2. Вам не нужны круглые скобки вокруг шаблона Like ..Вы можете использовать Like "*"

Если ваш VBA-код использует ADO с этим оператором SELECT, вы должны изменить символ подстановки с * на % ...

WHERE data.Description Like '%'
7 голосов
/ 18 мая 2011

В ADO / VBA вы должны использовать% вместо * в качестве подстановочного знака.Я сталкивался с этим пару раз в прошлом ....

1 голос
/ 21 августа 2018

Я не могу добавить комментарий, но я думаю, что стоит отметить, что вы должны использовать %, даже если вы запрашиваете MS Access.

(пример: Outlook VBA выполняет запрос к базе данных Access. Правильный запрос - select * where user like '%bob%', даже если этот запрос не будет работать, если он подключен непосредственно к запросу MS Access).

1 голос
/ 18 мая 2011

Поймите, что здесь как минимум 2 (да два!) НРАВИТСЯ оператора.

Один из них - оператор LIKE в VBA.

Другой оператор LIKE для SQL базы данных, к которой вы присоединены.

Обычными подстановочными знаками в SQL являются% (для любого # любого символа) и _ (для одного любого символа).

Знайте также, что MS Access может открывать базы данных, которые не являются Access; это может быть Microsoft SQL Server, Oracle или IBM DB2. (Кстати, база данных, которая является нормальной для Access, называется Microsoft JET.) Вы можете быть защищены от этой истины, когда создаете объект Query в Access - в этом случае вы используете JET SQL, даже если запрашиваете связанную таблицу .

Однако в VBA, когда вы используете DAO или ADO, вы говорите напрямую с любой системой баз данных, и в этом случае вы ДОЛЖНЫ использовать SQL этой конкретной системы.

ОК, короткий ответ: используйте%, как сказал cularis.

...