Je suis à la recherche d'un code VB 6.0 hérité (une application Access XP) pour résoudre un problème avec une instruction SQL par l'application Access. Je dois utiliser remplacer des guillemets simples avec 2 guillemets simples pour les cas où un nom de client a une apostrophe au nom (par exemple « chirurgie du Docteur »:Dépassement de pile lors du remplacement de 'avec' 'dans VB 6.0
Replace(customerName, "'", "''")
qui va échapper à la seule citation, je reçois le SQL valide :.
SELECT blah FROM blah WHERE customer = 'Doctor''s Surgery'
Malheureusement, la fonction remplacer provoque un débordement de la boucle et pile infinie, sans doute parce qu'elle remplace la fonction convertit récursive chaque citation ajoutée avec 2 autres guillemets, par exemple une citation est remplacée par deux, puis cette deuxième citation est également remplacé par deux, et ainsi de suite ...
---------------- EDIT ---------------
J'ai remarqué (grâce aux affiches) que la fonction de remplacement utilisé dans ce projet est écrit sur mesure:
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'ont pas toujours remplacer la fonction de son propre. Cette implémentation doit être imparfaite. Un aller suivre le conseil de folk et l'enlever en faveur de la mise en œuvre de VB 6 - si cela ne fonctionne pas, j'écrirai le mien qui fonctionne. Merci à tous pour votre contribution!
débordement de pile? lol –
La construction de chaînes de ce type est sujette aux attaques par injection SQL ... –
D'accord, il est vulnérable à l'injection SQL. L'ensemble de la base de code est horrible - je l'ai juste pris sur un contrat de support, parce que le développeur ou l'entreprise qui l'a écrit n'est plus là ... nous ne voulons pas réécrire la chose, il suffit de la maintenir! –