Débordement de pile lors du remplacement de 'par' 'dans VB 6.0
-
06-07-2019 - |
Question
Je cherche dans un code VB 6.0 hérité (une application Access XP) pour résoudre un problème lié à une instruction SQL de l'application Access. Je dois utiliser remplacer les guillemets simples par 2 guillemets simples dans les cas où le nom d'un client a une apostrophe dans le nom (par exemple, "Doctor's Surgery":
Replace(customerName, "'", "''")
Qui échappera à la citation simple, je reçois donc le code SQL valide:
SELECT blah FROM blah WHERE customer = 'Doctor''s Surgery'
Malheureusement, la fonction Remplacer provoque une boucle infinie et un débordement de pile, probablement parce qu'elle remplace la fonction, convertit récursivement chaque citation ajoutée en 2 autres guillemets. Par exemple. une citation est remplacée par deux, puis cette deuxième citation est également remplacée par deux, et ainsi de suite ...
---------------- ÉDITER ---------------
J'ai remarqué (grâce aux affiches) que la fonction de remplacement utilisée dans ce projet est personnalisée:
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
Apparemment, VB n’avait pas toujours de fonction de remplacement. Cette mise en œuvre doit être imparfaite. Je vais suivre le conseil des gens et le retirer en faveur de la mise en œuvre de VB 6 - si cela ne fonctionne pas, j'écrirai le mien qui fonctionnera. Merci à tous pour votre contribution!
La solution
Êtes-vous sûr que ce n'est pas une implémentation propriétaire de la fonction Remplacer?
Si tel est le cas, il peut simplement être remplacé par Remplacer de VB6.
Je ne me souviens plus de la version dans laquelle il est apparu (ce n'était pas dans Vb3, mais dans VB6). Par conséquent, si la base de code d'origine était vb3 / 4, il pourrait s'agir d'une version codée à la main.
MODIFIER
Je viens de voir votre montage, j'avais raison!
Oui, vous devriez pouvoir supprimer cette fonction, elle utilisera ensuite la fonction de remplacement de la version VB6 de la version.
Autres conseils
Nous utilisons une application VB6 permettant de remplacer "par" ou de les supprimer complètement.
Vous pouvez également parcourir les lettres, créer une seconde chaîne et les insérer "comme".
Je viens d'essayer cela dans Access et cela fonctionne bien (pas de 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