Domanda

Sto cercando un codice VB 6.0 legacy (un'applicazione Access XP) per risolvere un problema con un'istruzione SQL dall'app Access. Devo utilizzare la sostituzione di virgolette singole con 2 virgolette singole per i casi in cui il nome di un cliente ha un apostrofo nel nome (ad es. & Quot; Doctor's Surgery " ;:

Replace(customerName, "'", "''")

Che sfuggirà alla singola citazione, quindi ottengo l'SQL valido:

SELECT blah FROM blah WHERE customer = 'Doctor''s Surgery'

Sfortunatamente la funzione Sostituisci provoca un loop infinito e un overflow dello stack, presumibilmente perché sostituisce ricorsivamente ogni citazione aggiunta con altre 2 virgolette. Per esempio. una citazione viene sostituita da due, quindi anche quella seconda viene sostituita da due e così via ...

---------------- --------------- EDIT

Ho notato (grazie ai poster) che la funzione di sostituzione usata in questo progetto è scritta su misura:

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

Apparentemente, VB non ha sempre avuto una sua funzione di sostituzione. Questa implementazione deve essere imperfetta. Seguirò il consiglio della gente e lo rimuoverò a favore dell'implementazione di VB 6 - se questo non funziona, scriverò il mio che funziona. Grazie a tutti per il vostro contributo!

È stato utile?

Soluzione

Sei sicuro che non sia un'implementazione proprietaria della funzione Sostituisci?

In tal caso, può essere semplicemente sostituito da Sostituisci di VB6.

Non ricordo in quale versione appariva (non era in Vb3, ma era in VB6) quindi se la base di codice originale era vb3 / 4 potrebbe essere una versione codificata a mano.

Modifica

Ho appena visto la tua modifica, avevo ragione!

Sì, dovresti riuscire a rimuovere quella funzione, quindi utilizzerà la funzione di sostituzione VB6 in build.

Altri suggerimenti

Utilizziamo un'applicazione VB6 che ha la possibilità di sostituire "con" o rimuoverli completamente.

Potresti anche camminare tra le lettere, costruendo una seconda stringa e inserendo ciascuna 'as' '.

Ho appena provato questo in Access e funziona benissimo (senza 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top