Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Stringhe, apici ect. chi mi fa un po' di luce? (Bis)

31 views
Skip to first unread message

Filippo Vinciguerra

unread,
Apr 15, 2002, 6:50:35 AM4/15/02
to
Ho postato venerdì qualcosa del genere (aggiungo qualche correzione perché
il Week End porta consiglio)
se possibile vorrei qualche chiarimento

La pratica è una cosa, la teoria, si sa, un'altra.
Confesso di avere le idee piuttosto confuse sull'uso delle virgolette (o
doppi apici) e dell'apice semplice.
Per intenderci (") e (').
A volte vedo anche tre apici: quando e perché?
E questi tre apici sono i doppi seguiti dal singolo o il contrario, prima il
singolo e poi i doppi?
Aggiungo che se il codice non viene visualizzato in Curier ma con un
carattere TT non è facile distinguere tra i due caratteri.

Inoltre la leggibilità del codice è dura, tant'è che io uso spesso chr(34)
per le virgolette e chr(39) per l'apice.

Poi ci sono alcune cose che non capisco. Per esempio la funzione
arrotondaeuro come gira nel NG:
Function ArrotondaEuro2(varNr As Double, Optional varPl = 2) As Double
'varNr: numero da arrotondare
'varPI: numero di decimali (due predefinito)
varNr = Nz(varNr, 0)
ArrotondaEuro2 = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) / (10 ^
varPl)
End Function
Perché c'è Fix seguito dall concatenazione stringavuota & numero? A che
serve la stringa vuota prima?

Un altro esempio che illustra la mia confusione:
Sul sito comune c'è una funzione di NicoS in cui tra l'altro si sostituisce
nella stringa di esempio [Sylvia's theme] l'apice (') con il doppio apice
(").
Prima domanda: ma se io cambio la stringa che non è altro che il parametro
di ricerca poi come fa la query a trovare i record?
La query è così intelligente da capire che i record contenenti la stringa
[Sylvia's theme]
corrispondono al criterio di selezione [Sylvia"s theme] (con i doppi apici
al posto del singolo)?
Oppure i due diversi caratteri Ascii 34 e Ascii 39 sono intercambiabili in
SQL? E' mai possibile?

Altra domanda:
Il codice della funzione di NicoS è (l'ho prelevato dal sito, con taglia e
incolla):
Public Function ComponiStringaPerSQL (ByVal stringa As String) As String
Dim n As Long, posiz As Long
Dim h As String
On Local Error Resume Next

If IsNull(stringa) Then
h = ""
GoTo Fine
End If
h = stringa: posiz = 1
n = InStr(posiz, h, "'")
/* apice singolo tra virgolette /*
While n > 0
h = Left$(h, n) & "'" & Right$(h, Len(h) - n)
/* stesso apice singolo tra virgolette /*
posiz = n + 2
n = InStr(posiz, h, "'")
/* sempre lo stesso apice singolo tra virgolette /*
Wend
Fine:
ComponiStringaPerSQL = h
End Function

Ma questo codice a me sembra che sostituisca all'apice "'" lo stesso apice
"'". Sbaglio?
L'istruzione non dovrebbe essere piuttosto (uso chr(34) per essere sicuro di
non fare confusione)
While n > 0
h = Left$(h, n) & chr(34) & Right$(h, Len(h) - n)
posiz = n + 2
n = InStr(posiz, h, "'")
Wend
in modo da sostituire ['] con ["]?
Come vedete ho le idee confuse
Mi piacerebbe che qualcuno me le chiarisse
Grazie a tutti
Filippo

Antonio Biso

unread,
Apr 15, 2002, 7:54:34 AM4/15/02
to
"Filippo Vinciguerra" <ma...@studiovinciguerra.it> ha scritto nel messaggio
news:a9eb35$1bc$1...@localhost.localdomain...

> Ho postato venerdì qualcosa del genere (aggiungo qualche correzione perché
> il Week End porta consiglio)
> se possibile vorrei qualche chiarimento
>
> La pratica è una cosa, la teoria, si sa, un'altra.
> Confesso di avere le idee piuttosto confuse sull'uso delle virgolette (o
> doppi apici) e dell'apice semplice.
> Per intenderci (") e (').

Dipende, l'argomento e i casi sono molti.
" serve in generale per distinguere una stringa, ' serve per esempio per
evidenziare una parte di stringa all'interno di una stringa.

> A volte vedo anche tre apici: quando e perché?
> E questi tre apici sono i doppi seguiti dal singolo o il contrario, prima
il
> singolo e poi i doppi?

Quando li vedi, copiali e incollali, poi ci passi il cursore sopra e vedi
cosa sono.

Esempio
dcount("*","Tab","Provincia='" & Prov & "'")
il criterio finale, con Prov = MI è
"Provincia='MI'"

> Poi ci sono alcune cose che non capisco. Per esempio la funzione
> arrotondaeuro come gira nel NG:
> Function ArrotondaEuro2(varNr As Double, Optional varPl = 2) As Double
> 'varNr: numero da arrotondare
> 'varPI: numero di decimali (due predefinito)
> varNr = Nz(varNr, 0)
> ArrotondaEuro2 = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) / (10 ^
> varPl)
> End Function
> Perché c'è Fix seguito dall concatenazione stringavuota & numero? A che
> serve la stringa vuota prima?

Vedi l'help su Fix

Antonio


Filippo Vinciguerra

unread,
Apr 16, 2002, 11:06:11 AM4/16/02
to
"Antonio Biso" <ch...@etruria.net> ha scritto nel messaggio
news:77zu8.38026$m41.1...@twister2.libero.it...

> "Filippo Vinciguerra" <ma...@studiovinciguerra.it> ha scritto nel messaggio
> news:a9eb35$1bc$1...@localhost.localdomain...
> Dipende, l'argomento e i casi sono molti.
> " serve in generale per distinguere una stringa, ' serve per esempio per
> evidenziare una parte di stringa all'interno di una stringa.
> CUT

Grazie per la risposta, comincio a vederci meglio ;).
C'è una cosa che ancora non mi è chiara, e mi riferisco all'ultima parte del
mio post, che è questa:

Sul sito comune c'è una funzione di NicoS in cui tra l'altro si sostituisce
nella stringa di esempio [Sylvia's theme] l'apice (') con il doppio apice
(").

In sostanza se compongo via codice una stringa per una query tipo
stringa = "SELECT * FROM Tabella WHERE Cognome ='" & Parametro & "';"
Se Parametro è per esempio "Rossi" va tutto Ok ma se è "D'Onofrio"
quell'apice, giustamente, crea problemi.
NicoS dice di cambiare D'Onofrio in D"Onofrio, così non si creano più guai
ma come fa poi la query a trovare il record che, ovviamente, contiene
D'Onofrio e non D"Onofrio?
Ripeto quindi la domanda?


La query è così intelligente da capire che i record contenenti la stringa
[Sylvia's theme]
corrispondono al criterio di selezione [Sylvia"s theme] (con i doppi apici
al posto del singolo)?
Oppure i due diversi caratteri Ascii 34 e Ascii 39 sono intercambiabili in
SQL? E' mai possibile?

Oppure è la stringa Parametro che se viene creata via codice con "D" & "'" &
Onofrio è accettata dalla Query senza dare più l'errore?
Grazie della prossima risposta.
Ciao
Filippo


Antonio Biso

unread,
Apr 17, 2002, 3:11:19 AM4/17/02
to
"Filippo Vinciguerra" <ma...@studiovinciguerra.it> ha scritto nel messaggio
news:a9heeb$988$1...@localhost.localdomain...

> "Antonio Biso" <ch...@etruria.net> ha scritto nel messaggio
> news:77zu8.38026$m41.1...@twister2.libero.it...
> > "Filippo Vinciguerra" <ma...@studiovinciguerra.it> ha scritto nel
messaggio
> > news:a9eb35$1bc$1...@localhost.localdomain...
> > Dipende, l'argomento e i casi sono molti.
> > " serve in generale per distinguere una stringa, ' serve per esempio per
> > evidenziare una parte di stringa all'interno di una stringa.
> > CUT
>
> Grazie per la risposta, comincio a vederci meglio ;).
> C'è una cosa che ancora non mi è chiara, e mi riferisco all'ultima parte
del
> mio post, che è questa:
>
> Sul sito comune c'è una funzione di NicoS in cui tra l'altro si
sostituisce
> nella stringa di esempio [Sylvia's theme] l'apice (') con il doppio apice
> (").
> In sostanza se compongo via codice una stringa per una query tipo
> stringa = "SELECT * FROM Tabella WHERE Cognome ='" & Parametro & "';"
> Se Parametro è per esempio "Rossi" va tutto Ok ma se è "D'Onofrio"
> quell'apice, giustamente, crea problemi.
> NicoS dice di cambiare D'Onofrio in D"Onofrio, così non si creano più guai

Nonononononoon nonono nonon
devi cambiarlo in D apice apice Onofrio
Questo perchè se tu devi rappresentare in una stringa il carattere " o '
devi raddoppiarlo.
Esempio.
La stringa "io sono un ""mago"""
se la stampi o la usi in qualche modo viene interpretata come
io sono un "mago"
stessa cosa per gli apici e per altri caratteri speciali.
Quindi due apici singoli vengono interpretati come un solo carattere apice
alla fine.

Antonio


Antonio Biso

unread,
Apr 17, 2002, 3:11:19 AM4/17/02
to
"Filippo Vinciguerra" <ma...@studiovinciguerra.it> ha scritto nel messaggio
news:a9heeb$988$1...@localhost.localdomain...

> "Antonio Biso" <ch...@etruria.net> ha scritto nel messaggio
> news:77zu8.38026$m41.1...@twister2.libero.it...
> > "Filippo Vinciguerra" <ma...@studiovinciguerra.it> ha scritto nel
messaggio
> > news:a9eb35$1bc$1...@localhost.localdomain...
> > Dipende, l'argomento e i casi sono molti.
> > " serve in generale per distinguere una stringa, ' serve per esempio per
> > evidenziare una parte di stringa all'interno di una stringa.
> > CUT
>
> Grazie per la risposta, comincio a vederci meglio ;).
> C'è una cosa che ancora non mi è chiara, e mi riferisco all'ultima parte
del
> mio post, che è questa:
>
> Sul sito comune c'è una funzione di NicoS in cui tra l'altro si
sostituisce
> nella stringa di esempio [Sylvia's theme] l'apice (') con il doppio apice
> (").
> In sostanza se compongo via codice una stringa per una query tipo
> stringa = "SELECT * FROM Tabella WHERE Cognome ='" & Parametro & "';"
> Se Parametro è per esempio "Rossi" va tutto Ok ma se è "D'Onofrio"
> quell'apice, giustamente, crea problemi.
> NicoS dice di cambiare D'Onofrio in D"Onofrio, così non si creano più guai

Nonononononoon nonono nonon

Filippo Vinciguerra

unread,
Apr 17, 2002, 5:02:44 AM4/17/02
to

"Antonio Biso" <ch...@etruria.net> ha scritto nel messaggio
news:A99v8.46947$SR5.1...@twister1.libero.it...

> "Filippo Vinciguerra" <ma...@studiovinciguerra.it> ha scritto nel messaggio
> news:a9heeb$988$1...@localhost.localdomain...
> > "Antonio Biso" <ch...@etruria.net> ha scritto nel messaggio
> > news:77zu8.38026$m41.1...@twister2.libero.it...
> > > "Filippo Vinciguerra" <ma...@studiovinciguerra.it> ha scritto nel
> messaggio
> > > news:a9eb35$1bc$1...@localhost.localdomain...
> > > Dipende, l'argomento e i casi sono molti.
> > > " serve in generale per distinguere una stringa, ' serve per esempio
per
> > > evidenziare una parte di stringa all'interno di una stringa.
> > > CUT
> >
> > Grazie per la risposta, comincio a vederci meglio ;).
> > C'č una cosa che ancora non mi č chiara, e mi riferisco all'ultima parte
> del
> > mio post, che č questa:
> >
> > Sul sito comune c'č una funzione di NicoS in cui tra l'altro si

> sostituisce
> > nella stringa di esempio [Sylvia's theme] l'apice (') con il doppio
apice
> > (").
> > In sostanza se compongo via codice una stringa per una query tipo
> > stringa = "SELECT * FROM Tabella WHERE Cognome ='" & Parametro & "';"
> > Se Parametro č per esempio "Rossi" va tutto Ok ma se č "D'Onofrio"

> > quell'apice, giustamente, crea problemi.
> > NicoS dice di cambiare D'Onofrio in D"Onofrio, cosě non si creano piů

guai
>
> Nonononononoon nonono nonon
> devi cambiarlo in D apice apice Onofrio
> Questo perchč se tu devi rappresentare in una stringa il carattere " o '

> devi raddoppiarlo.
> Esempio.
> La stringa "io sono un ""mago"""
> se la stampi o la usi in qualche modo viene interpretata come
> io sono un "mago"
> stessa cosa per gli apici e per altri caratteri speciali.
> Quindi due apici singoli vengono interpretati come un solo carattere apice
> alla fine.
>
> Antonio
>
E VAI
Finalmente ho capito
Grazie, grazie grazie
Filippo

0 new messages