Newsgroup: it.comp.lang.visual-basic
Titolo: query sql e apici

ho una query che mi fa un select su una tabella.
funziona tutto correttamente tranne ad esempio quando cerco: WHERE cognome='d'alessio'
spero di essermi spiegato.
come faccio con i nomi che contengono caratteri speciali?
c'č una specie di escape e unescape automatico per ciň?

Ciao,
Io ho risolto il problema sostituendo il carattere ' con `  nei campi testo
del db.
es. 'd`Alessio'

 es. 'd`Alessio'
Grrrrrrrazie della risposta grrr
ma non mi piace per nulla..
dovrei far cambiare una marea di nomi e aggiungere controlli su parecchi campi.
la terrò comunque in considerazione in mancanza di una soluzione vera e propria.
esistono gli escape e gli unescape.
possibile che in visual basic non si possano utilizzare?
ohi.. sklerooo :o)

Lucio ebbe il coraggio di dire:
 (è solo quoting automatico)

Basta che raddoppi gli apici quando inserisci il campo!
Non cè bisogno di cambiare carattere.
WHERE cognome='d''alessio'
Quindi devi farti un replace(stringa,"'","''")
MIk

x Mik
che intendi dire con
Lucio ebbe il coraggio di dire:
fai il sapiutello?

 fai il sapiutello?
no, è la sua frase di rito di apertura :o)
io ho trovato questo:
WHERE     (Cognome LIKE '%d[escape'']alessio%')
--
comunque il probl non sono solo gli apici.
vorrei permettere l'inserimento di tutti i caratteri non validi con una corretta conversione degli escape e senza farmela a mano..
possibile che un metodo non ci sia? oioi.. :)

Lucio ebbe il coraggio di dire:
 (è solo quoting automatico)

e il bello è che l'ho scritto!!!!!!!!!!!!!!!!!!
MIk



 (è solo quoting automatico)
Lucio, cosa c'e' scritto tra parentesi ?
Dovresti forse informarti sul significato della parola quoting :)
Akuma

 WHERE     (Cognome LIKE '%d[escape'']alessio%')
Ma che altri caratteri ci sono che non vanno bene??
MIk

 Ma che altri caratteri ci sono che non vanno bene??
teoricamente nessun altro
praticamente quando si ha a che fare con utonti.........
ho trovato qualcosa:
http://gladstone.uoregon.edu/~jallen/string_utils.html
mi faccio 2 funzioni e vediamo come va ;-)

è suffuciente:
tro = 'd'alessio'
WHERE cognome like tro

 WHERE cognome like tro
hai provato a vedere che ti restituisce la query quando si trova la stringa che fa:
WHERE cognome like'd'alessio'
è la query che restituisce errore :o)

 ma cosè tro?
string suppongo. cmq guardatevi il link che ho postato qua sopra.
funziona e non rallenta (o almeno con i pc d'oggi non ci son problemi) :o)

...

Devi semplicemente raddoppiare gli apici presenti nella stringa della
preposizione where cosě da diventare: WHERE cognome='d''alessio'
Ciao. Stefano.

...

E' sufficiente scrivere cosě:
Stringa = "D'ALESSIO"
Sql = "SELECT * FROM Tabella WHERE cognome = " & Chr$(34) & Stringa & Chr$(34)
Ho provato e funziona!  
Ciao!
Stefano

 Stefano

 Ho provato e funziona!
a me sql non me l'accetta come valida
anche se la scrivo come dici, poi il risultato della stringa sql sarà:
SELECT * FROM tabella WHERE cognome LIKE 'd'alessio'
--
cosa avete contro la funzione di escape ed unescape?
non si notano rallentamenti visibili e mi funziona con tutti i caratteri :-D
non potevo chiedere di meglio.. anzi.. io pensavo che visual basic ce le
avesse già incluse ed invece me le son dovute creare...

 > Stefano
In questo caso dovrebbe essere sufficiente scrivere così (è un
estratto di un programma che ho fatto e funziona):
Riga = "Msgbox " & Chr(34) & "ERRORE N° " & Chr(34) & " & Err & " &
Chr(34)& " " & Chr(34) & " & Err.Description"
Print #2, Riga
In questo caso "Riga" conterrà questo valore e viene scritta così nel
file:
         Msgbox "ERRORE N° " & Err & Err.Description
Nel caso di BAR "AL TEATRO" dovrebbe essere sufficiente scrivere così:
Stringa = "BAR " & Chr(34) & "AL TEATRO" & Chr(34)
Ma sono pronto ad essere smentito, ho sempre avuto problemi a gestire
ste stringhe, soprattutto nel controllo dei null!

 ste stringhe, soprattutto nel controllo dei null!
Temo di no, ma, a mia volta, non insisto perchè non ho verificato (con le ",
intendo).
Mi par di ricordare che i delimitatori di stringa (esterni, da intendersi
come "contenitori") abbiano una specie di "priorità", ovvero se usi " come
delimitatori esterni non avrai problemi con ' interni, ma dovrai raddoppiare
le " interne e, viceversa, se usi come delimitatori esterni ' (come
normalmente facciamo), non avrai problemi con " interni, ma dovrai
raddoppiare i ' interni.
Credo anche che (forse solo SQL Server) sia possibile definire quale debba
essere il default.
C'è anche da dire (ma dovrei cercare per citare un esempio reale) che
ADO+SQL Server (forse è più corretto parlare di standard SQL ANSI) non ami
molto le " interne, per esempio in un CASE WHEN nome_campo<>"" e che
pretenda gli apicini.

 pretenda gli apicini.
C'è da precisare che io ho sempre usato database di Access97 e
connessione DAO e questi codici che ho scritto funzionano...
Probabilmente con SqlServer e/o ADO possono dare problemi, non
saprei...
Stefano

 Probabilmente con SqlServer e/o ADO possono dare problemi
infatti.
magari domani mattina faccio un paio di prove per darvi il problema che mi
viene fuori.
comunque semra che stiate ignorando la soluzione che ho trovato, cioč quella
di crearsi due sempli funzioncine di escape ed unescape al fine di evitare
l'inserimento nel database di valori dannosi.