Newsgroup: it.comp.programmare.win32
Titolo: caratteri ' (apice singolo) in SQL

Buonasera a tutti.
Sto realizzando un gestionale (BCB5, ma non credo che sia importante il
framework di sviluppo) in cui faccio uso (a dir la verità non proprio
massivo) di queries SQL che vanno ad agire su un DBMS Interbase (ultima
versione open source, scaricata da Borland).
Il problema è il seguente: nel momento in cui all'interno di uno qualunque
dei campi stringa l'utente inserisce un item che contenga un apostrofo (es.:
un cognome come D'Antoni), se voglio filtrare la tabella con una query del
tipo
Select * from tabella T where T.cognome="d'antoni" (1)
ottengo come risultato un bell'errore.
Dalla doc di interbase leggo che vengono supportati solo apici singoli nelle
queries in cui si adoperino operatori di confronto.
Ovviamente, però, la stessa query (1), modificata come
Select * from tabella T where T.cognome='d'antoni'
è non corretta (l'apice di D'Antoni chiude il confronto prima del tempo,
cosicché la parte restante " antoni' " non viene interpretata e in output ho
di nuovo errore).
Qualcuno si è già scontrato con questo problema?
Sapete dirmi come posso risolverlo?
Grazie a tutti
Alessio

Più o meno è la prima cosa funesta che si incontra quando si
fanno query... 
Prova a sostituire a ogni apice "'" facente parte della
stringa due apici "''".
così D'inverno diventa D''inverno, una licenza poetica
che piace ai compilatori ;-)
JJ
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Il problema è il seguente
Scusa, stai programmando un gestionale con SQL e non conosci le basi???
:-OOO 
-- 
Luc.

Sapete dirmi come posso risolverlo?
Quando si passano dei parametri stringa alle query le tecniche
alternative sono 2: 
1. raddoppi gli apici con una funzione apposita;
2. usi i parametri;
Io seguo la seconda strada.  In BCB faresti qualcosa del tipo:
Q->Close;
Q->SQL->Text = "select * from TABELLA where COGNOME = :COGNOME";
Q->ParamByName("COGNOME")->AsString = "d'Antoni";
Q->Open;
-- 
Andrea Laforgia - a.laforgia(at)
libero.it
"There are three kinds of people in this world; 
 those who are good at maths and those who aren't".


Grazie mille del consiglio. Davvero utile.
A dir la verità già conoscevo la tecnica del "raddoppio-apici", ma mi
interessava sapere se ci fosse una soluzione migliore.
E , in effetti, quella che utilizza ParamsByName (almeno per l'utilizzo che
ne devo fare io), lo è di sicuro.
Alessio

 Alessio
Grazie di non averlo detto prima!!!!


 Grazie di non averlo detto prima!!!!
Hai ragione, scusami.
Grazie ovviamente anche a te, per aver comunque provato a darmi una mano.
Chiunque spenda anche un po' del suo tempo per cercare di aiutare un collega
in difficoltà è degno di merito (anche se, come in questo caso, il collega
ha dimenticato un piccolo particolare :-) )
Grazie ancora a tutti.
Alessio

 ha scritto nel
messaggio news:%NJJa.131256$pR3.2...@news1.tin.it...
[cut]
ora non conosco bene il tuo tipo di db ... ma ti consiglio vivamente di
usare escape su tutti i caratteri particolari, e anche di farti un check di
tutto quello che usi come input utente e di controllare che non ci siano
parole riservate SQL e che non abbiano tentato di chiuderti la query sql
cercando di fare una multi query, questi sono controlli standard per
paracularsi dall'sql injection e dai bad type.
ciao