在VB 6.0中替换'with''时堆栈溢出

Jam*_*len 2 stack-overflow string vb6 ms-access replace

我正在研究一些遗留的VB 6.0代码(Access XP应用程序)来解决Access应用程序的SQL语句问题.对于客户名称中包含撇号的情况,我需要使用带单引号的替换单引号(例如"Doctor's Surgery":

Replace(customerName, "'", "''")
Run Code Online (Sandbox Code Playgroud)

哪个会逃脱单引号,所以我得到了有效的SQL:

SELECT blah FROM blah WHERE customer = 'Doctor''s Surgery'
Run Code Online (Sandbox Code Playgroud)

不幸的是,Replace函数导致无限循环和堆栈溢出,可能是因为它替换函数递归地将每个添加的引用转换为另外2个引号.例如,一个引号被两个替换,然后第二个引号也被两个替换,依此类推......

- - - - - - - - 编辑 - - - - - - - -

我注意到(感谢海报)这个项目中使用的替换函数是自定义编写的:

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
Run Code Online (Sandbox Code Playgroud)

显然,VB并不总是具有自己的替换功能.这种实施必须是有缺陷的.要遵循民间的建议并将其删除以支持VB 6的实现 - 如果这不起作用,我将编写自己的工作.谢谢各位的意见!

Bin*_*ier 8

您确定它不是Replace功能的专有实现吗?

如果是这样,它可以被VB6的替换取代.

我不记得它出现在哪个版本(它不是在Vb3中,而是在VB6中)所以如果原始代码库是vb3/4,它可能是手动编码版本.

编辑

我刚看到你的编辑,我是对的!

是的,你应该能够删除该功能,然后它将使用in build VB6替换功能.