Как я могу устранить ошибку времени выполнения 3075 через - PullRequest
0 голосов
/ 02 мая 2020

У меня проблема с запуском этого кода. Это дает мне синтаксическую ошибку (отсутствует оператор) в выражении запроса

Function SearchCriteria()

Dim class,StateProvince,strAcademicYear As As String 
Dim task, strCriteria As String 

If isNull(Forms!frmStudentList!cboClass) Then
   Class = "[Class] LIKE '*' "
Else
   Class = [Class] = " & Forms!frmStudentList!cboClass
End If
If isNull(Forms!frmStudentList!cboStateProvince) Then
   StateProvince = "[StateProvince] LIKE '*' "
Else
   StateProvince = [StateProvince] = " & 
Forms!frmStudentList!cboStateProvince
End If
If isNull(Forms!frmStudentList!cboAcademicYear) Then
   StrAcademicYear = "[AcademicYear] LIKE '*' "
Else
   StrAcademicYear = [AcademicYear] = '" & 

Forms!frmStudentList!cboAcademicYear & "'"
End If
strCriteria = Class & "AND" & StateProvince & "AND" & StrAcademicYear
task = "SELECT * FROM QryStudentSearch WHERE & Criteria
Forms!frmStudentList.RecordSource = task
Forms!frmStudentList.Requery

End Function 

1 Ответ

0 голосов
/ 02 мая 2020

Есть довольно много проблем с этим фрагментом кода.

  • Во-первых, большинство ваших переменных явно не объявлены как типы, поэтому по умолчанию это 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, то можно убрать одинарные кавычки.

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...