Есть довольно много проблем с этим фрагментом кода.
- Во-первых, большинство ваших переменных явно не объявлены как типы, поэтому по умолчанию это
Variant
. - Далее, Class является зарезервированным словом в Access и, вероятно, вызовет у вас проблемы.
- Если элемент управления не имеет выбора, вы используете
LIKE '*'
для выбора данных. В этом нет необходимости, так как применение фильтра не означает, что все записи будут возвращены в любом случае. - Поскольку он не возвращает значение, вы можете создать его как
Sub
, а не Function
. - Основная проблема заключается в том, как вы объединяете различные части вместе.
Я бы переписал код следующим образом:
Sub sSearch()
Dim strSearch As String
If Not IsNull(Forms!frmStudentList!cboClass) Then
strSearch = strSearch & " AND [Class]='" & Forms!frmStudentList!cboClass & "' "
End If
If Not IsNull(Forms!frmStudentList!cboStateProvince) Then
strSearch = strSearch & " AND [StateProvince]='" & Forms!frmStudentList!cboStateProvince & "' "
End If
If Not IsNull(Forms!frmStudentList!cboAcademicYear) Then
strSearch = strSearch & " AND [AcademicYear]='" & Forms!frmStudentList!cboAcademicYear & "' "
End If
If Left(strSearch, 4) = " AND" Then
strSearch = "WHERE " & Mid(strSearch, 6)
End If
strSearch = "SELECT * FROM qryStudentSearch " & strSearch
Forms!frmStudentList.RecordSource = strSearch
Forms!frmStudentList.Requery
End Sub
В каждом В этом случае я предполагаю, что связанный столбец каждого поля со списком является текстом, поэтому необходимо использовать одинарные кавычки вокруг данных. Если столбец связан с цифрой c, то можно убрать одинарные кавычки.
С уважением,