Я пытался выполнить запрос из MS ACCESS VBA. Мой запрос работает хорошо, когда я не добавляю конкатенированные поля. Когда я использую составное поле, как в приведенном ниже коде, получается пустой результат.
Есть ли работа вокруг?
lstStudentName.RowSource = "SELECT [sdtName] & ' ' & [sdtFatherName] & ' ' & [sdtLastName] AS sdtFullName, sdtID FROM tbl_sdt_Info " & _
" LEFT join tbl_sdt_Rounds ON tbl_sdt_Info.sdtID = tbl_sdt_Rounds.sdtID " & _
" WHERE IS NULL(tbl_sdt_Rounds.sdtID)"
Большинство сделало бы sdtID первым полем и установило бы ColumnWidths как 0";1.0" и установило бы первый столбец как BoundColumn. Это позволит просматривать и вводить первую букву имени, но sdtID будет значением списка.
Это сработало, однако дает мне все записи из обеих таблиц. Это не исключает записи с условием WHERE! Любые предложения, пожалуйста. Спасибо
Проблемы с вашим SQL:
Неправильное использование IS NULL — должно быть либо IsNull(tbl_sdt_Rounds.sdtID), либо tbl_sdt_Rounds.sdtID IS NULL. Последнее предпочтительнее, потому что это SQL, а IsNull() — это функция VBA.
Поскольку есть два поля sdtID, запрос не должен работать без префикса таблицы для указания поля. Я удивлен, что ты что-то понял.
Хотя, возможно, это не проблема, я бы предпочел сделать sdtID первым полем и установить ColumnWidths как 0 "; 1,0" и первый столбец как BoundColumn. Это позволит просматривать и вводить первую букву имени, но sdtID будет значением списка.
Никогда не помешает построить и протестировать объект запроса, а когда он заработает, реплицировать оператор SQL в VBA.
lstStudentName.RowSource = "SELECT tbl_sdt_Info.sdtID, sdtName & ' ' & sdtFatherName & ' ' & sdtLastName AS sdtFullName FROM tbl_sdt_Info " & _
"LEFT join tbl_sdt_Rounds ON tbl_sdt_Info.sdtID = tbl_sdt_Rounds.sdtID " & _
"WHERE tbl_sdt_Rounds.sdtID IS NULL;"
Ничего не должно получиться из-за неправильного использования IS NULL. Либо IsNull(tbl_sdt_Rounds.sdtID), либо tbl_sdt_Rounds.sdtID IS NULL. Последнее предпочтительнее, потому что это SQL, а IsNull() — это функция VBA.