Newsgroup: it.comp.www.asp
Titolo: apostrofo maledetto

Non riesco a capire come deve intervenire per risolvere il problema!
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing
operator) in query expression ''d'amico','d'onofri''.
/blacklight/gestione.asp, line 90
==============================================
Praticamente prende dei dati da un DB(db1) dove esistono dei dati con
apostrofi e li deve inserire in un'altro DB (db2)
nel db1 ho usato questo modo che però non funziona su db2 restituendo
l'errore sopra citato
nome=replace(nome,"'","''")  eccetera
SQL = SQL & "VALUES ('" & nome & "', eccetera
e i dati li inserisce e li visualizza perfettamente
====================================================
un pezzo di codice del db2 dove mi dà l'errore
elseif request.querystring("azione") = "Aggiorna" then
SQL ="select * from db1 where ID = "&request.querystring("ID")&""
Rs.Open SQL, conn
 SQLINS="INSERT INTO db2 (data, nome, cognome, citta, telefono,
mail, rubrica, annuncio) "
===Ho anche provato a mettere qui
nome=replace(nome,"'","''") oppure nome=replace(Rs("nome"),"'","''")
anche aggiungendo ,1 ma mi dà sempre lo stesso errore=====
SQLINS = SQLINS & "VALUES ('" & Rs("data") & "','" & Rs("nome") & "','"
& Rs("cognome") & "','" & Rs("citta") & "','" & Rs("telefono") & "','" &
Rs("mail") & "','" & Rs("rubrica") & "','" & Rs("annuncio") & "')"
conn.Execute(SQLINS)
SQLCANC ="delete * from db1 where ID = "&request.querystring("ID")&""
conn.Execute(SQLCANC)
eccetera
Grazie Roberto


Dal messaggio risulta chiaro che ti vengono raddoppiate le virgolette
sbagliate,
in particolare  ''d'amico' dovrebbe essere 'd''amico' perche' possa
funzionare.
Io ti consiglio di verificare il codice della SQL *prima* di darla in pasto
al database, magari fattela stampare a video invece di eseguirla, cosi' sei
in grado di correggerla/controllarla.
Davide

Be' il mio consiglio e' di intercettare "client side" i caratteri proibiti
(apostrofo,%) e di sostituirli o con "&chr(nn)&"
(dove nn e' il codice ASCII del carattere che vuoi aggiungere alla stringa)
oppure con la formattazione ISO per i caratteri speciali in HTML, ad
esempio, cosi' l'apostrofo diventa &rsquo; quest'ultima soluzione e'
l'ideale se devi visualizzare i dati su pagine web.
Volendo puoi anche eseguire il parsing delle stringhe sul server, ma cio'
comporta un bel rallentamento del server stesso.
Ciaoo
Nettuno

Vorrei sapere come fare una di queste cose visto che sono un neofita
Grazie
Nettuno ha scritto:


 [cut]
non e' molto chiaro pero':
SQL ="select * from db1 where ID = "&request.querystring("ID")&""
Rs.Open SQL, conn
' e questo va bene 
'poi mi immagino
do while not rs.eof
        SQLINS="INSERT INTO db2 (data, nome, cognome, citta, telefono,
        mail, rubrica, annuncio) "
        'et quindi 
        nome=replace(Rs("nome"),"'","''")
        ' et quindi 
        SQLINS = SQLINS & "VALUES ('" & Rs("data") & "','" & nome &
"','"
	 & Rs("cognome") & "','" & Rs("citta") & "','" & Rs("telefono") & "','"
&
	 Rs("mail") & "','" & Rs("rubrica") & "','" & Rs("annuncio") & "')"
	 conn.Execute(SQLINS)
	rs.movenext
loop
P.S : mi sembra che l'errore lo becchi sul "cognome" (et quindi la
gestione sul nome non serve)
P.S.1 : attenzione stesso problema puoi averlo su tutti i campi (i.e.
citta=paterno')
P.S.2 : e speriamo che Bochicchio stavolta lo passi (la roba automatica
non sempre funziona, ho tagliato quasi tutto post e non si capisce piu'
nulla)

 proibiti
Per "intercettare client-side" devi fare un po' di scripting lato client,
quello che
solitamente viene chiamato DHTML.
Se ti interessa vedi 
www.soft-land.org
 c'e' la prima parte di un articolo
che tratta
per l'appunto questo problema.
Davide

 apostrofi e li deve inserire in un'altro DB (db2)
Personalmente ho risolto il problema degli apostrofi in un modo non
elegantissimo ma funzionale.
Ogni volta che mi interfaccio con un database utilizzo due funzioni:
 Function cambiaSpeciali(stringa)
    Dim newStringa
    newStringa = Replace(stringa, "'", "XXX")
    newStringa = Replace(newStringa, "&", "YYY")
    cambiaSpeciali = newStringa
 End Function
 Function rimettiSpeciali(stringa)
    Dim newStringa
    newStringa = Replace(stringa, "XXX", "'")
    newStringa = Replace(newStringa, "YYY", "&")
    rimettiSpeciali = newStringa
End Function
Prima di passare i dati alla query di inserimento o di update uso la prima.
Esempio:
    indirizzo = cambiaSpeciali(Request.form("indirizzo"))
    SQL = "INSERT INTO tabella (indirizzo) VALUES ('" & indirizzo & "')"
Mentre ogni volta che devo pubblicare sulla pagina Web il contenuto del
campo uso la seconda. Esempio:
    <%= rimettiSpeciali(indirizzo) %>
Ovviamente se andate a leggere direttamente nel database troverete una
stringa tipo:
    "Via San Tommaso dXXXAquino"
pero' siccome la gran parte delle operazioni, anche di modifica,  le farete
su pagine Web il workaround restera' invisibile.
Saluti
Roberto Trama
http://www.capriweb.com

Errata Corrige:
nella mia precedente risposta avevo detto che per pubblicare il risultato
dal db usavo la funzione rimettiSpeciale(stringa) in questo modo:
    <%= rimettiSpeciali(indirizzo) %>
ovviamente doveva essere:
    <%= rimettiSpeciali(Rs("indirizzo")) %>
dato che il risultato sta in un RecordSet.
Mi scuso per l'errore, tuttavia la sostanza del ragionamento non cambia.
