我正在研究一些传统的VB 6.0代码(Access XP应用程序)来解决Access应用程序的SQL语句问题。对于客户名称中有撇号的情况,我需要使用带有2个单引号的单引号替换(例如“Doctor's Surgery”:
Replace(customerName, "'", "''")
哪个会逃脱单引号,所以我得到了有效的SQL:
SELECT blah FROM blah WHERE customer = 'Doctor''s Surgery'
不幸的是,Replace函数导致无限循环和堆栈溢出,可能是因为它替换函数以递归方式将每个添加的引号转换为另外2个引号。例如。一个引号被两个替换,然后第二个引号也被两个替换,依此类推......
---------------- 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的实现 - 如果这不起作用,我将编写自己的工作。谢谢大家的意见!
答案 0 :(得分:8)
您确定它不是Replace功能的专有实现吗?
如果是这样,它可以被VB6的替换替换。
我不记得它出现在哪个版本(它不是在Vb3中,而是在VB6中)所以如果原始代码库是vb3 / 4,它可能是手动编码版本。
修改强>
我刚看到你的编辑,我是对的!
是的,您应该能够删除该功能,然后使用in build VB6替换功能。
答案 1 :(得分:2)
我们使用VB6应用程序,可以选择替换'with`或完全删除它们。
您还可以浏览字母,构建第二个字符串并将每个字符串插入“as”。
答案 2 :(得分:2)
我刚刚在Access中尝试了这个并且它工作正常(没有stackoverflow):
Public Function ReplaceSingleQuote(tst As String) As String
ReplaceSingleQuote = Replace(tst, "'", "''")
End Function
Public Sub TestReplaceSingleQuote()
Debug.Print ReplaceSingleQuote("Doctor's Surgery")
End Sub