Microsoft Access VBA-Ошибка времени выполнения '3075'


Я столкнулся с ошибкой времени выполнения "3075". Я новичок в VBA! >.- Могу я узнать, где все пошло не так? Я не могу ее решить...

Например, если я ввожу имя "Салли" в текстовое поле (txtMainName), при нажатии на кнопку поиска появляется ошибка.

Ошибка:

Ошибка времени выполнения '3075':

Синтаксическая ошибка (отсутствует оператор) в выражении запроса 'и [имя основного заявителя] типа 'Салли'".

Public Sub Search_Record()

Dim stDocName As String
Dim stLinkCriteria As String
Dim stLinkCriteria1 As String
Dim stLinkCriteria2 As String


    stLinkCriteria = ""
    stDocName = "frmDisplayInfo"

    If (Me!txtMainName <> "") Then
        stLinkCriteria1 = "[Main Applicant Name] Like ' " & Me![txtMainName] & "'"
        stLinkCriteria = stLinkCriteria & " And " & stLinkCriteria1
    End If

    If (Me!txtIDNo <> "") Then
        stLinkCriteria2 = "[ID No] Like ' " & Me![txtIDNo] & "'"
        stLinkCriteria = stLinkCriteria & " And " & stLinkCriteria2
    End If

    '(*This part is highlighted*)
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    DoCmd.Maximize

End Sub
3 5

3 ответа:

Runtime error 3975 это Invalid operator, согласно быстрому поиску Google на access vba runtime error 3075 (который вы могли бы сделать сами).

Проблема в том, что вы присваиваете значение "" только stCriteria. Если выполняется первый оператор if, то stCriteria присваивается значение stCriteria AND stCriteria1, которое является недопустимым. То же самое происходит, если выполняется второй оператор if. (На самом деле, если оба они действительно запущены, stCriteria теперь содержит AND stCriteria1 AND stCriteria2, что еще хуже.)

Решение заключается в изменении кода чтобы добавить только AND, Если это необходимо:

stLinkCriteria = ""
stDocName = "frmDisplayInfo"

If (Me!txtMainName <> "") Then
    stLinkCriteria = "[Main Applicant Name] Like ' " & Me![txtMainName] & "'"
End If

If (Me!txtIDNo <> "") Then
    If stLinkCriteria <> "" then
        stLinkCriteria = stLinkCriteria & " AND "
    End If
    stLinkCriteria2 = "[ID No] Like ' " & Me![txtIDNo] & "'"
    stLinkCriteria = stLinkCriteria & " And " & stLinkCriteria2
End If

Для дальнейшего использования, способ решить такого рода проблемы состоит в том, чтобы фактически исследовать значение переменной (в данном случае stCriteria) непосредственно перед выполнением строки, вызывающей ошибку (здесь это строка DoCmd.OpenForm). Это можно сделать, установив точку останова в строке, где произошла ошибка, запустив приложение до тех пор, пока не будет достигнута точка останова, а затем изучив значение переменной. Это показывает вам точно , что содержит переменная, что может раскрыть проблему.

Из логики кажется, что ваша stLinkCriteria начинается с "и", что вызывает ошибку:

Вы, вероятно, должны поставить:

If (Me!txtMainName <> "") Then

    stLinkCriteria1 = "[Main Applicant Name] Like ' " & Me![txtMainName] & "'"

    if stLinkCriteria <> "" then                   <==== add this

       stLinkCriteria = stLinkCriteria & " and "   <==== and this

    end if                                         <==== and this

    stLinkCriteria = stLinkCriteria & stLinkCriteria1  <=== change this

End If    

Надеюсь, что это работает - в противном случае логика выглядит хорошо.

Я получаю эту ошибку из дополнительного пространства между точкой и именем Поля в:

DoCmd.RunSQL "UPDATE  cp  INNER JOIN [char_lib] ON [cp]. [library_id]  = [char_lib].[id] set..
Примечание Для Microsoft: пожалуйста, создавайте более точные и полезные сообщения об ошибках. Спасибо. Я не сомневаюсь, что ты все сделаешь правильно.