Вы не можете использовать IF EXISTS
в Access. EXISTS () допускается, но только как оценочное выражение, а не как процедурное. Выражение EXISTS () возвращает True или False (в форме -1 и 0).
Представьте, что вы могли бы использовать процедурное выражение ... где вы пытаетесь напечатать результат? Нет места для вывода результатов печати.
Пожалуйста, опишите более четко, какую проблему вы пытаетесь решить, и где вы хотите, чтобы результаты появились, и мы можем помочь вам лучше.
Если предположить, что вы хотите, чтобы запрос возвращал «Да» или «Нет», то это может сделать это для вас:
SELECT Iif(EXISTS (SELECT * FROM MyTable), "Yes", "No") AS MyTableHasRows
FROM Numbers
WHERE Num = 1;
Однако здесь есть проблема: Access не допускает операторов SELECT, которые не ссылаются на таблицу. (SQL Server позволяет это, и Oracle предлагает выбрать поддельную таблицу DUAL.) Одним из способов решения этой проблемы является выбор из таблицы, которая имеет только одну строку. Мой запрос выше выбирает из таблицы чисел, которая находится в моей тестовой базе данных, где только одна строка имеет Num = 1
. Выбор из таблицы с множеством строк заставляет двигатель выполнять дополнительную работу без всякой причины.
Если вы хотите выполнить эту проверку в коде, вот наиболее эффективный способ, который я могу себе представить:
If CurrentDb().OpenRecordset("SELECT Top 1 * FROM MyTable").RecordCount > 0 Then
Debug.Print "Yes"
Else
Debug.Print "No"
End If
Это логически идентично EXISTS и будет работать лучше, чем COUNT (*), который должен просматривать каждую строку в таблице.