#ms-access #vba
#ms-access #vba
Вопрос:
В таблице данных MS Access возможно ли фильтровать те записи, значение которых равно нулю или пусто в определенном поле в моей таблице?
Ответ №1:
ДА.
WHERE myCol IS NULL OR LEN(myCol) = 0
Ответ №2:
В вашей инструкции SQL:
WHERE Nz(CompanyName, '') = ''
В свойстве filter вашей формы:
Nz(CompanyName, '') = ''
Решение, опубликованное Митчем Уитом, также будет работать. Я не уверен, какой из них обеспечит наилучшую производительность. Если вы используете решение Митча, а также используете другие условия в своем предложении Where, не забудьте вставить скобки, подобные этой:
WHERE (myCol IS NULL OR LEN(myCol) = 0) AND myCol2 = True
Ответ №3:
Использование функции в критерии означает, что вы не можете использовать индексы. Решение @Mitch Wheat будет использовать индекс для Is Null
теста, но не для Len()
теста.
Допустимое предложение WHERE было бы таким:
WHERE myCol Is Null OR myCol = ""
Но я бы рекомендовал отключить «разрешить строки нулевой длины», и тогда вам нужно будет выполнить только нулевой тест, который для индексированного поля будет чрезвычайно быстрым.
Как бы то ни было, меня крайне раздражает, что MS изменила значения по умолчанию для новых текстовых полей, чтобы включить разрешение ZLS. Это означает, что мне приходится изменять каждое из них, когда я использую конструктор таблиц для создания новых полей.