Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con apice e sql

Ciao a tutti, ho un problema, quando in un programma va in esecuzione una
query di sql e ricerco una stringa dove è presente un apice, il programma
mi da un errore, come posso fare .........
esempio:
stringa="......un'altra volta......."
......where xxx='" & stringa & "'
.........
Ciao
--------------------------------
Inviato via 
http://usenet.iol.it

 ha scritto nel messaggio
news:151Z26Z69Z60Y1...@usenet.iol.it...


 .........
raddoppia gli apici prima di lanciare la query
stringa=replace(stringa,"'","''")
--
ciao, j.
www.sundaysw.com

Se vuoi saaperne di più ....
io mi sono costruito questa funzione
Public Function ControllaStringa(ByRef Stringa As String) As String
    Dim LenStringa As Long: Dim i As Long: Dim k As Long
    Dim Carattere As String: Dim Buffer As String
        i = InStr(Stringa, Chr$(39))
    If i > 0 Then
                    Buffer = Mid$(Stringa, 1, i - 1)
                    LenStringa = Len(Stringa)
            For k = i To LenStringa
                    Carattere = Mid$(Stringa, k, 1)
                    If Carattere = Chr$(39) Then Carattere = Chr$(39) &
Chr$(39)
                    Buffer = Buffer & Carattere
            Next k
    ControllaStringa = Buffer ' (Doppio Apice)
    Else
        ControllaStringa = Stringa ( nel caso nella stringa non trovo
L'apice, Restituisco la Stringa Originale.)
    End If
End Function
By Utente Win2k

ed usare Replace?
--
__________________
www.sasim.net
* Server IRC : 
irc.azzurranet.org
 --> Canale: #it_lang_vb
* Sito Comune Ng: 
http://www.it-lang-vb.net
* Manifesto del Ng: 
http://www.it-lang-vb.net/docs/Manifesto.txt
* I vecchi messaggi su: 
http://groups.google.com/


        > quando in un programma va in esecuzione
        > una query di sql e ricerco una stringa
        > dove è presente un apice, il programma
        > mi da un errore, come posso fare?
Di fronte ad un problema analogo ho risolto creando una funzione che
sostituisce un altro carattere al posto dell'apice nella stringa
incriminata. In particolare sostituisco il carattere Chr(146), che è la
virgoletta singola inglese chiusa, per intenderci, quella che Word
sostituisce all'apice mentre si digita ( ' ).
Questo carattere ha il pregio di essere un'alternativa grafica dell'apice,
ma di venir considerato come un carattere qualsiasi dall'interprete SQL.
Usando una ricorsione pura, la funzione potrebbe suonare come:
Public Function SubstApice(ByVal S as String) as String
    Dim I as Long
    I = InStr(S,"'")
    If I = 0 Then
        SubstApice = S
    Else
        SubstApice = Left(S,I-1) & Chr(146) & SubstApice(Mid(S,I+1))
    End If
End Function
Se il tuo programma gestisce completamente il database anche nella fase di
inserimento dei dati, ti consiglio di fare questo controllo durante
l'inserimento nel database, in modo tale che i campi testo di tutte le
tabelle non contengano mai l'apice, ma sempre l'apostrofo ( ' = Chr(146)).
Ad esempio:
    Dim R as Recordset
    ...
    R.AddNew
    ...
    R("Città") = SubstApice(txtCittà.Text)
    ...
    R.Update
    ...
Questa soluzione è certamente più efficiente, perché nella gestione di un
database, le fasi di scrittura sono molto minori di quelle di lettura.
Dunque la funzione SubstApice verrebbe richiamata solo durante i nuovi
inserimenti e mai nelle ricerche.
Spero di esserti stato utile.
Gemini.