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!

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top