Ich bin in einigen Legacy-VB 6.0-Code (eine Access XP-Anwendung), um ein Problem mit einer SQL-Anweisung durch die Access App zu lösen. Ich brauche zu verwenden, für die Fälle, einfache Anführungszeichen mit zwei einfachen Anführungszeichen zu ersetzen, wo ein Kundenname einen Apostroph im Namen (zB „Arztpraxis“ hat:Stack-Überlauf beim Ersetzen von "mit" in VB 6.0
Replace(customerName, "'", "''")
, die den Apostroph werden entkommen, so dass ich die gültige SQL :.
SELECT blah FROM blah WHERE customer = 'Doctor''s Surgery'
Leider ist die Funktion ersetzen in eine Endlosschleife und Stapelüberlauf hervorruft, vermutlich weil es Funktion rekursiv wandelt jedes hinzugefügt Zitat mit weiteren 2 Anführungszeichen ersetzen Eg ein Quote von zwei ersetzt wird, dann ist das zweite Zitat auch ersetzt durch zwei und so weiter ...
---------------- BEARBEITEN ---------------
Ich habe bemerkt (dank Plakaten), dass die Funktion ersetzen in diesem Projekt ist individuell geschrieben:
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
Offenbar hat VB nicht immer ersetzen Funktion von seinem eigenen. Diese Implementierung muss fehlerhaft sein. Ich werde den Ratschlägen der Leute folgen und sie zugunsten der Implementierung von VB 6 entfernen - wenn das nicht funktioniert, werde ich meine eigenen schreiben, was funktioniert. Vielen Dank für Ihre Anregungen!
Stapelüberlauf? lol –
Konstruieren Strings wie dies anfällig für SQL-Injection Attacks ... –
Vereinbar ist es anfällig für SQL-Injektion. Die ganze Code-Basis ist schrecklich - ich habe es gerade auf einen Support-Vertrag genommen, weil der Entwickler oder die Firma, die es geschrieben hat, nicht mehr da ist ... wir wollen das Ding nicht umschreiben, sondern nur warten! –