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
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
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
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
Nonononononoon nonono nonon