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

I've encountered the run time error '3075'. I'm a novice in VBA! >.< Can i know where did it went wrong? I can't solve it...

Например, если я ввел имя «Sally» в текстовое поле (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
5
добавлено отредактировано
Просмотры: 1
de
Что представляет собой содержимое stLinkCriteria (содержащее фактическое значение, not , что вы думаете ) содержит), когда вы получить DoCmd.OpenForm ? (Установите точку останова в строке OpenForm , запустите ее до этой точки и посмотрите, что stLinkCriteria , когда вы туда попадете).
добавлено автор Ken White, источник

3 ответы

Runtime error 3975 is Invalid operator, according to a quick Google search on access vba runtime error 3075 (which you could have made yourself).

Проблема в том, что вы присваиваете "" значение 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 ). Вы делаете это, устанавливая точку останова на строке, где происходит ошибка, запускаете приложение до тех пор, пока не будет достигнута точка останова, а затем проверьте значение переменной. Это показывает вам точно , что содержит переменная, которая может выявить проблему.

6
добавлено
Да, да. Я исправлю это. Благодарю. :-)
добавлено автор Ken White, источник
Я не знаю. Ничего в вашем вопросе не спрашивали о отображении результатов, а это новый вопрос.
добавлено автор Ken White, источник
Огромное спасибо! Это работает, но я думаю, что вы пропустили «Конец If». Объяснение ясное, теперь я могу понять, что пошло не так.
добавлено автор GuessWho, источник
назад, где я остановился ... как я могу отображать мои записи? текстовое поле не показывает результаты, которые я хочу ...
добавлено автор GuessWho, источник

Из логики кажется, что ваша 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    

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

3
добавлено
Огромное спасибо! Оно работает!
добавлено автор GuessWho, источник

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

DoCmd.RunSQL "UPDATE  cp  INNER JOIN [char_lib] ON [cp]. [library_id]  = [char_lib].[id] set..

Примечание для Microsoft: создайте более точные и полезные сообщения об ошибках. Благодарю. Я не сомневаюсь, что вы поправитесь.

0
добавлено