Newsgroup: it.comp.appl.access
Titolo: Apici e doppi apici contemporanei

 
Quando in una variabile stringa sono contenuti apici e doppi apici (Istituto 
"G.Leopardi", via dell'AltoVolta...) la regola di racchiudere la stringa tra 
apici o tra virgolette doppie non ha più effetto, tipicamente si produce un 
errore di runtime. Esiste una soluzione diversa che non sia quella della 
sostituzione degli apici o delle virgolette all'interno della stringa?
Ciao, Carlo 


Ciao. Prova con
sql = "SELECT * FROM tMiaTabella WHERE Indirizzo = " & Chr(39) & Chr(39) &
strIndirizzo & Chr(39) & Chr(39)
Non ho la possibilità di testarlo su qs. macchina. Spero che funzioni. Ciao.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


Grazie per la risposta ma non funziona.
Ciao, Carlo 

 Ciao, Carlo
Hai provato con il Replace dei doppi apici con 2 singoli Apici..!
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Prova a replaceare gli apici e a confrontare le stringhe repleaceate
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it

 ha scritto nel messaggio 
news:43e057e4$0$4159$4faf...@reader3.news.tin.it...

Prova così:
'---
Dim strDati As String
strDati = "questa e' una stringa con apice singolo e " & Chr(34) & " 
doppio."
'--> converto gli apici singoli in #39
strDati = Replace(strDati, "'", "#39", 1)
'--> converto i doppi apici in #34
strDati = Replace(strDati, Chr(34), "#34", 1)
Debug.Print strDati
'--> riConverto gli apici singoli da #39 a '
strDati = Replace(strDati, "#39", "'", 1)
'--> converto i doppi apici da #34 a "
strDati = Replace(strDati, "#34", Chr(34), 1)
Debug.Print strDati
'---
Ciao.
-- 
Sergio MAZZA 

Carlo Costarella ha scritto:

Utilizzare i dati in formato esadecimale (o al massimo ascii) invece che 
in formato testo?
Ti crei 2 funzioni, una che li trasforma in esadecimale ed un'altra che 
li converte in testo, prima di salvarli nel DB li converti con quella 
funzione e quando li carichi nella maschera li riconverti con la 
funzione che fà l'operazione inversa (da hex a txt).
Non ho mai provato, è solo un'idea! ;-)
Per le query poi una select <tuoi campi> from <tua tabella> where ecc..
per il carattere " cerchi 22 e per il carattere ' cerchi 27
Non mi viene in mente altro >:-)
byEz
P.S.: effetto collaterale è che la dimensione del campo che ospita i 
dati convertiti è doppia :-(
-- 
Claudio(BS)
L'unico problema per l'uomo non sta nella difficoltà delle sue imprese
ne' nella quantità di denaro necessario per compierle, ma nella durata
della sua esistenza. (Claudio 14.02.2004)
NB. Protezione antispam
Per rispondere aggiungere claudio

 Sergio MAZZA
Ciao Sergio, grazie della risposta.
Il replace funziona nel senso che sostituisce i caratteri ma passando la 
nuova stringa o anche facendo un riReplace non restituisce piů nulla o da un 
errore di runtime.
Ecco perchč chiedevo un metodo diverso dal replace.
Ciao, Carlo 


Sě ma non va.
Ciao, Carlo

 -- 
Grazie MA
non funziona.
Ciao, Carlo 

 ha scritto nel messaggio 
news:43e057e4$0$4159$4faf...@reader3.news.tin.it...

 In pratica se scrivo:
& "'" & DestinazioneCA & "'"
dove DestinazioneCA è una stringa che contiene solo virgolette ("), 
funziona.
Se scrivo
& """" & DestinazioneCA & """"
dove DestinazioneCA contiene apici (') funziona
ma se DestinazioneCA contiene apici e virgolette non funziona a prescindere 
dai delimitatori di stringa usati e nemmeno con il replace.
Ciao, Carlo 


hai anche provato a cercare su di un campo con replace
Cioè nella query che confronti ti fai il replace e us i quello per il
confronto


 _ _
Stavo provando giusto questo.
Ti faccio sapere.
Ciao, Carlo 

 wrote in message 
news:43e057e4$0$4159$4faf...@reader3.news.tin.it...

Prova con questa funzione:
--------------------------------------
Public Function FSR(SR As Variant) As Variant
'
' Formattazione Stringa di Ricerca.
' Bruno Campanini - 06-04-2005
'
'
' SR può essere Data, Stringa, Numero
' Se SR è Stringa può contenere qualunque carattere,
' inclusi Chr(34) = "   e   Chr(39) = '
'
' La sintassi sarà sempre ed unicamente:
' (Where) "[TableField]=" & FSR(SR)
'
' Occorre tener presente che SR potrà essere scritta
' nella sua forma normale se collocata in un campo di Form.
' Ad esempio:   Trattoria "L'Isola del Tesoro" con alloggio
'
' Qualora venga passata via codice la medesima dovrà essere
' formattata raddoppiando le eventuali virgolette Chr(34) = "
' contenute nel suo interno, indi racchiusa per intero
' entro DUE virgolette. Nel rispetto della convenzione VB.
' Così sarà:   "Trattoria ""L'Isola del Tesoro"" con alloggio"
'
SR = Replace(SR, Chr(34), """ & Chr(34) & """)
If IsDate(SR) Then
    SR = Chr(35) & Format(SR, "mm-dd-yy") & Chr(35)
ElseIf IsNumeric(SR) Then
Else
    SR = Chr(34) & SR & Chr(34)
End If
FSR = SR
End Function
----------------------------------
Ciao
Bruno 

 ha scritto nel messaggio news:43e057e4$0$4159$4faf...@reader3.news.tin.it...

Ciao Carlo,
la questione sembra stare nel fatto che l'interprete sql permette di utilizzare sia i doppi apici (") che la singola apice (')come
delimitatori delle costanti stringa, quindi quando si trovano entrambi all'interno di un comando sql si può verificare il problema
che hai sperimentato.
Un tratto di codice come il seguente funziona utilizzando come delimitatore il doppio apice ( ... Indirizzo=""" & indirizzo & """"
... )
--
    Dim cnn As ADODB.Connection
    Dim rc As ADODB.Recordset
    Dim indirizzo As String
    Set cnn = Application.CurrentProject.Connection
    Set rc = New ADODB.Recordset
    indirizzo = "Istituto """"G.Leopardi"""", via dell'AltoVolta"
    ' indirizzo conterrà -> Istituto ""G.Leopardi"", via dell'AltoVolta
    rc.Open "SELECT * FROM TA_Anagrafiche WHERE Indirizzo=""" & indirizzo & """", cnn, adOpenForwardOnly, adLockReadOnly, adCmdText
    ' il comando sql eseguito è -> SELECT * FROM TA_Anagrafiche WHERE Indirizzo="Istituto ""G.Leopardi"", via dell'AltoVolta"
--
oppure lo si può modificare utilizzando il singolo apice come delimitatore (... Indirizzo='" & indirizzo & "'" ...):
--
    Dim cnn As ADODB.Connection
    Dim rc As ADODB.Recordset
    Dim indirizzo As String
    Set cnn = Application.CurrentProject.Connection
    Set rc = New ADODB.Recordset
    indirizzo = "Istituto ""G.Leopardi"", via dell''AltoVolta"
    ' indirizzo conterrà -> Istituto "G.Leopardi", via dell''AltoVolta
    rc.Open "SELECT * FROM TA_Anagrafiche WHERE Indirizzo='" & indirizzo & "'", cnn, adOpenForwardOnly, adLockReadOnly, adCmdText
    ' il comando sql eseguito è ->  SELECT * FROM TA_Anagrafiche WHERE Indirizzo='Istituto "G.Leopardi", via dell''AltoVolta'
--
Praticamente ci si deve preoccupare di raddoppiare all'interno della costante stringa solo i caratteri che si è deciso di utilizzare
come delimitatore delle costanti stringa (in questo caso nella where).
Se la stringa la si prende da una casella di testo si può sottoporla al replace per il raddoppio senza nemmeno controllare se nella
stringa siano presenti o meno i caratteri da raddoppiare.
Ciao,
Mat.



Ok, soluzione trovata.
Ho utilizzato sommandoli, i suggerimenti di tutti.
Il replace viene utilizzato due volte: la prima per il campo nella query e 
la seconda per la clausola where.
Questo perchè uso AXP ma con il 97? Sarebbe bastato prevedere un 
delimitatore di testo diverso come per esempio una coppia di doppi punti e 
virgola (;; stringa ;;).
Ringrazio , Sergio, MA, Alex, Potone, Claudio, Bruno e yronium
Ciao, Carlo 

 Ciao, Carlo
Mantenendo i doppi apici come delimitatore di stringa dovrebbe essere
sufficiente raddoppiare quelli presenti all'interno del testo:
& """" & Replace(DestinazioneCA, """", """""") & """"
Ciao.
-Marco-
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Ciao, Carlo
Scusa ma non ho capito...
Ciao.
-- 
Sergio MAZZA 

 Ciao, Carlo
Con il '97 sul sitocomune c'č, Sezione General - 6.55 Effettuare 
sostituzioni di una sottostringa all'interno di una stringa per n volte.
Oppure con VBscript c'č il replace...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:drq0ts$9kh$1...@area.cu.mi.it...

Il replace va fatto anche nel campo della query oltre che nel criterio dello 
stesso campo; se lo faccio solo nel criterio non funziona.
La tua funzione è quella che ho utilizzato e che mi ha poi risolto il 
problema ma applicata sia al campo che al suo criterio.
Ciao, Carlo

 Ciao, Carlo
Ok; ora ho capito...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:drq1qn$bfr$1...@area.cu.mi.it...

Ciao Sergio
sě in Vbscript o usando metodi alternativi come quello del sito comune ma in 
A97 non esiste il replace.
In effetti, come si desume dal primo post, cercavo una soluzione alternativa 
al "replace". A quanto sembra non č possibile.
Il tuo aiuto č stato comunque determinante.
Ciao, Carlo 

 Ciao, Carlo
Ho trovato anche questo: 
http://support.microsoft.com/default.aspx?scid=kb;en-us;109330
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Ok.
Ciao, Carlo 


Ho letto un pò tutti i post...ora indipendentemente da quello che puoi avere 
nella tua casella per racchiudere e restituire il contenuto tra virgolette 
puoi utilizzare questa formula
variabile = "'" & Me.TuaCasella & "'"  ( virgolette apice virgolette )
l'unico caso dove ti restituisce errore è il caso in cui Me.TuaCasella = 
'PIPPO' ossia racchiusa tra apici ma in questo caso puoi sostituire gli 
apici con le virgolette o assegnare alla variabile un'altro valore con un 
if...then
es.
    If Me.TuaCasella Like "'*'" Then
    variabile = "''" & Me.TuaCasella & "''" (virgolette apice apice 
virgolette)
    else
    variabile = "'" & Me.TuaCasella & "'"  ( virgolette apice virgolette )
    End If
Spero di essermi spiegato e di aver capito la tua domanda....
Ciao
Roberto

 ha scritto nel messaggio 
news:43e0c780$0$4172$4faf...@reader3.news.tin.it...

Ciao Roberto
non uso una casella di testo ma, da codice, apro un recordset che tra gli 
altri contiene un campo con una stringa al cui interno si fa uso di 
virgolette e/o apici (Visita l'Albergo dell'allegria "Mari e Monti"). Questo 
campo deve restituire solo un determinato valore (where) che ha i caratteri 
incriminati....
Dopo tutte le prove fatte l'unica strada è stata quella di sostituire apici 
e virgolette con un altro carattere usando il replace. Stesso procedimento, 
ovviamente, da applicare alla stringa di ricerca.
Grazie per il tuo interessamento.
Ciao, Carlo 

 caratteri incriminati....
Non vorrei apparire inutilmente insistente, ma quella funzione che
ti ho inviato risolvette proprio il problema di un
WHERE ... Trattoria "L'Isola del Tesoro" con alloggio,
caso molto simile al tuo contenente " e '.
Ciao
Bruno 

 ha scritto nel messaggio 
news:43e0ded7$0$4170$4faf...@reader3.news.tin.it...

Sě Bruno la tua funzione č molto completa prevedendo anche numeri e date.
Si puň benissimo usare magari, come dici, raddoppiando le virgolette qualora 
ve ne fossero.
Semplicemente č arrivata prima la funzione di Sergio....
Public Function SostituisciApici(ss As String) As String
'contributo di Sergio Mazza
Dim strDati As String
'--> converto gli apici singoli in #39
strDati = Replace(ss, "'", "#39", 1)
'--> converto i doppi apici in #34
strDati = Replace(strDati, Chr(34), "#34", 1)
SostituisciApici = strDati
End Function
...che, con alcune modifiche, ha dato il risultato sperato.
Ti ringrazio comunque del tuo validissimo contributo.
Ciao, Carlo