Я ищу какой-то устаревший код VB 6.0 (приложение Access XP), чтобы решить проблему с оператором SQL в приложении Access. Мне нужно использовать замену одинарных кавычек на 2 одинарных кавычки в тех случаях, когда в имени клиента указан апостроф (например, «Хирургия доктора»:
Replace(customerName, "'", "''")
Который будет экранирован одинарной кавычкой, поэтому я получу действительный SQL:
SELECT blah FROM blah WHERE customer = 'Doctor''s Surgery'
К сожалению, функция Replace вызывает бесконечный цикл и переполнение стека, предположительно потому, что она заменяет функцию рекурсивно, преобразует каждую добавленную кавычку с двумя другими кавычками Например. одна цитата заменяется двумя, затем вторая цитата также заменяется двумя, и так далее ...
---------------- EDIT ---------------
Я заметил (благодаря постерам), что функция замены, используемая в этом проекте, написана на заказ:
Public Function replace(ByVal StringToSearch As String, ByVal ToLookFor As String,
ByVal ToReplaceWith As String) As String
Dim found As Boolean
Dim position As Integer
Dim result As String
position = 0
position = InStr(StringToSearch, ToLookFor)
If position = 0 Then
found = False
replace = StringToSearch
Exit Function
Else
result = Left(StringToSearch, position - 1)
result = result & ToReplaceWith
result = result & Right(StringToSearch, Len(StringToSearch) - position - Len(ToLookFor) + 1)
result = replace(result, ToLookFor, ToReplaceWith)
End If
replace = result
End Function
Очевидно, у VB не всегда была собственная функция замены. Эта реализация должна быть ошибочной. Собираюсь последовать совету народа и убрать его в пользу реализации VB 6 - если это не сработает, я напишу свой, который работает. Спасибо всем за ваш вклад!