Почему мое предложение WHERE не работает в поле со списком - PullRequest
1 голос
/ 03 апреля 2020

У меня есть поле со списком NameFilt. Я sh источник строки должен быть следующим:

SELECT DISTINCT VoucherListTbl.BuyerName
FROM VoucherListTbl
WHERE (((VoucherListTbl.BuyerName) Is Not Null)) OR (((VoucherListTbl.BuyerName)<>""));

т.е. показать все уникальные имена BuyerNames из моей таблицы и не включать никаких пробелов. Выше SQL генерируется в блоке запросов, нажав на 3 точки в источнике строки поля со списком в окне свойств, затем выберите поле BuyerName и затем введите «Не является нулевым или <>» в критериях. При щелчке по запуску в конструкторе запросов отображается ожидаемый результат.

При закрытии и сохранении построителя запросов и последующем щелчке в поле со списком в форме я получаю другой результат - все имена DISTINCT есть, но в начале списка есть пробел. Когда я пытаюсь использовать это SQL в моем коде VBA я получаю другой результат. Код:

Private Sub NameFilt_GotFocus()
Me.AllowEdits = True
Me.NameFilt.RowSource = "SELECT DISTINCT VoucherListTbl.BuyerName
FROM VoucherListTbl WHERE  (((VoucherListTbl.BuyerName) Is Not Null))
OR (((VoucherListTbl.BuyerName)<>""));"
   Me.NameFilt.Dropdown
End Sub

В результате в раскрывающемся списке со списком отображается только одна опция - пустое! В списке нет имен. Более того, если ГДЕ предложение удалено, т. е. код:

Private Sub NameFilt_GotFocus()
Me.AllowEdits = True
Me.NameFilt.RowSource = "SELECT DISTINCT VoucherListTbl.BuyerName FROM VoucherListTbl;"
Me.NameFilt.Dropdown
End Sub

Затем отображаются имена DISTINCT с пустым параметром в верхней части списка, который что можно ожидать

Не могли бы вы помочь, объяснив, почему предложение WHERE не будет работать для меня при вводе в код VBA Большое спасибо

1 Ответ

0 голосов
/ 03 апреля 2020

Если вы используете "" в "", это приведет к разрыву строки, и это является причиной неработающего условия WHERE. Кодируйте кавычки с "", т.е. конец вашей исходной строки должен выглядеть как <>""""));" или замените "" на '' и повторите попытку.

Обратите внимание, тот же запрос можно записать как

SELECT DISTINCT BuyerName
FROM VoucherListTbl 
WHERE IsNull(BuyerName,'')<>''
...