Ответ, вероятно, очень прост - я просто не могу найти подходящий поисковый запрос, я подозреваю.Ошибка MS Access 2010 VBA 3075 (поиск с апострофами)
У меня есть форма, которая открывает другую форму, отображающую любую запись сотрудника, которая соответствует поиску, как введенный. Вы можете искать по фамилии, имени или идентификатору сотрудника (используя отдельные кнопки); он дает вам небольшое окно сообщений, если ваш поиск не появляется.
Код работает отлично, за исключением обычной проблемы с обработкой апострофов в именах («O'Neill», «O'Brien» и т. Д.). Я нашел очень простую функцию обработки апострофа, но когда я пытаюсь использовать функция в поисковом запросе все еще вызывает ошибку времени выполнения 3075, и я не знаю, почему. Он только подбрасывает ошибку времени выполнения с помощью запросов, содержащих апостроф, поэтому я чувствую, что функция, возможно, не делает то, что я думаю.
Я рад развлечь решения, которые включают «использование этой функции, но добавление большего количества кавычек (или что-то еще)», а также целые новые идеи. Я бы предпочел использовать что-то , как, эта функция, тем не менее, потому что она настолько мала и, следовательно, будет намного быстрее и чище заменять код поиска по имени каждого места, которое оно появляется.
Это код, который работает отлично:
Private Sub btnSearchSurname_Click()
Dim frm As Form
Dim strSearch As String
strSearch = "[List_Employees.Surname] like '" & Me.EmpSurname & "*'"
strSearch = strSearch & " AND [CurrentEmployee] = " & True
DoCmd.OpenForm "Employee_Entry_Extended_Certs", , , strSearch, , acHidden
Set frm = Forms("Employee_Entry_Extended_Certs")
If frm.Recordset.RecordCount > 0 Then
frm.Visible = True
Else
MsgBox ("Employee not found. Try the 'all' button to see if they're inactive. If that doesn't work, please check for typos and try again.")
DoCmd.Close acForm, "Employee_Entry_Extended_Certs"
Call OpenPayrollCloseRest
End If
DoCmd.Close acForm, "Find_An_Employee"
Я пытаюсь использовать this simple public function to handle apostrophes:
Public Function adhHandleQuotes(ByVal varValue As Variant, Optional Delimiter As String = "'") As Variant
' Replace all instances of a string delimiter with TWO instances,
' thereby handling the darned quote issue once and for all. Also,
' surround the string with the delimiter, as well.
' Returns Null if the String was Null, otherwise
' returns the String with all instances of strDelimiter
' replaced with two of each.
adhHandleQuotes = strDelimiter & Replace(varValue, strDelimiter, strDelimiter & strDelimiter) & strDelimiter
End Function
Я изменил код поиска, чтобы использовать функцию, вставив три линии линии в месте из первой строки «strSearch =»:
Dim strSearch As String
Dim strTerm As String
strTerm = adhHandleQuotes(Me.EmpSurname)
strSearch = "[List_Employees.Surname] like '" & strTerm & "*'"
strSearch = strSearch & " AND [CurrentEmployee] = " & True
DoCmd.OpenForm "Employee_Entry_Extended_Certs", , , strSearch, , acHidden
И это диалоговое окно ошибки выполнения е окно:
Ваша функция 'adhHandleQuotes' использует' strDelimiter' в коде, но необязательным параметром является 'Delimiter'. Вы проверили, что возвращает 'adhHandleQuotes (Me.EmpSurname)'? – xificurC