Newsgroup: it.comp.appl.access
Titolo: Questione virgolette in SQL da codice

Salve sono Fanciullo,
(A97)
da tempo cerco di capire la logica che sta dietro alle virgolette.
Porto un esempio:
"insert into tblLIBRI (idanno,annoS,  materia, ) select  """ & Me.csIDanno &
""", """ & Me.csannoS & """,  tblmaterie.materia,  from tblmaterie where
tblmaterie.idclasse = " & Me.idclasse & " ;"
Logicamente faccio questo: in una maschera carico dei record con
l'istruzione SQL
che riceve due valori che sono in due controlli nella maschera:
Me.csIDanno  è numerico
Me.csannoS  è testo
Anche  Me.idclasse  in fondo alla istruzione è numerico.
Quello che non capisco è perché ho dovuto usare per i primi due controlli
tre virgolette per ognuno, secondo le mie conoscenze avrei dovuto usarne
due per il dato numerico e tre per il dato testo.
" " & Me.csIDanno & " "
" " " & Me.csannoS & " " "
Grazie

 ha scritto nel messaggio 
news:5wu8i.27272$%k.11...@twister2.libero.it...

Ciao Fanciullo,
di norma le virgolette vanno usate solo per i campi di tipo testo non per 
quelli numerici, nel tuo caso devi distinguere tra le virgolette che 
racchiudono la stringa istruzione e quelle che invece servono a racchiudere 
il contenuto del campo testo, devi inoltre tenere presente che se devi 
inserire delle virgolette all'interno di una stringa le virgolette vanno 
raddoppiate altrimenti il parser non riconosce dove inizia e finisce la 
stringa stessa.
nel tuo esempio secondo me le 3 virgolette intorno ad idAnno sono di troppo 
mentre sono corrette quelle intorno a Me.csAnnoS
"insert into tblLIBRI (idanno,annoS,  materia, ) select  "  & Me.csIDanno & 
", """ & Me.csannoS & """,  tblmaterie.materia  from tblmaterie where
 tblmaterie.idclasse = " & Me.idclasse & " ;"
dove ci sono tre virgolette una è di apertura della stringa e l'altra è la 
virgoletta che racchiude il campo testo raddoppiata...
Spero di essermi fatta capire ....
Ciao
-- 
Cinzia [Office Access MVP]
_______________________
 
www.riolab.org
---------------------------------------- 

 Porto un esempio:
[...]
Una stringa SQL è racchiusa da virgolette ( " ).
Se entro tale stringa devi inserire altre virgolette, la cosa più
semplice è sostituire queste ultime con una sola virgoletta ( ' ).
SQL = "... [Nome] = ' " & VariabileTesto & " ' ... "
Bruno

 ha scritto nel messaggio
news:4662a03f$0$37206$4faf...@reader3.news.tin.it...

Capisco il discorso di Bruno,
ma rispondo a Cinzia
..........a parte che non so cosa sia il parser
............a parte che non capisco cosa voglia dire:
dove ci sono tre virgolette una è di apertura della stringa e l'altra è la
virgoletta che racchiude il campo testo raddoppiata...' che significa
raddoppiata???
Spero di essermi fatta capire ....
comunque ho scoperto:
select  "  & Me.csIDanno & ",...............funziona
select  " " & Me.csIDanno & " ",..............non funziona
select  " " "  & Me.csIDanno & " " ",...........non funziona
mahhhhhh secondo me ci vuole un cervello fine............grazie cmq

 ha scritto nel messaggio 
news:AaD8i.27716$%k.11...@twister2.libero.it...

Ciao Fanciullo,
ho detto che speravo... proprio perchè mi ero resa conto di essere stata un 
po criptica -:)
Allora ci riprovo... vediamo se va meglio....
Prima cosa il Parser è a grandi linee quella parte di Access che si 
preoccupa di analizzare la correttezza della sintassi di un'istruzione SQL o 
di una istruzione VisualBasic
Provo con un esempio senza variabili esterne pura sintassi SQL riprendendo 
il tuo esempio:
Data questa istruzione SQL:
insert into tblLIBRI (idanno, annoS,  materia, ) select  2, "2006" , 5 
from tblmaterie where  tblmaterie.idclasse = 1
Se la voglio eseguire ad esempio con DOCmd.RunSQL  scriverò:
DoCmd.RunSQL "insert into tblLIBRI (idanno, annoS,  materia, ) select  2, 
""2006"" , 5   from tblmaterie where  tblmaterie.idclasse = 1"
Ho preso l'istruzione SQL ho aggiunto una virgoletta all'inizio ed una in 
fondo e ho raddoppiato le virgolette che erano presenti intorno a 2006
(Invece di raddoppiare avrei potuto usare l'apice invece delle virgolette 
come diceva Bruno e avrei dovuto scrivere:
DoCmd.RunSQL "insert into tblLIBRI (idanno, annoS,  materia, ) select  2, 
'2006', 5   from tblmaterie where  tblmaterie.idclasse = 1"
Riscriviamola adesso usando  i campi della maschera per ricostruire la 
giusta stringa SQL:
DoCmd.RunSQL "insert into tblLIBRI (idanno,annoS,  materia, ) select  " & 
Me.csIDanno &
" """ & Me.csannoS & """,  tblmaterie.materia,  from tblmaterie where
tblmaterie.idclasse = " & Me.idclasse & " ;"
Meglio di così oggi ...  non mi viene...
Ciao!


>
Prego!
