Newsgroup: it.comp.appl.access
Titolo: filtro query con doppi apici e caratteri speciali

allora,
 
ho una list box in una maschera che mi deve filtrare basandosi su altre 
selezioni nelle maschera stessa
il filtro quindi è fatto in questo modo
Like nz([Forms]![Spare Parts Management]![Modello];"*")
 
in modo che se non c'è selezione in maschera mi da tutto, altrimenti mi 
filtra secondo la selezione
 
tra i valori che possono uscire fuori però, ce ne sono alcuni di questo tipo
6" 900# MAINLINE BALL VALVE
 
ora il doppio apice e il cancelletto gli da fastidio in quanto la sintassi 
in questi casi prevede di raddoppiare i doppi apici e mettere tra quadre il 
cancelletto
 
il filtro sarebbe, a stringa costante
 
like nz("6"" 900[#] MAINLINE BALL VALVE";"*")
e questo funziona
 
ho pensato allora di crearmi una funzione che presa la stringa filtro, la 
lavora restituendo, se serve, quella forma (potevo anche mettere 
direttamente due replace, ma ho preferito così e il discorso non cambia, ho 
provato)
 
NON FUNZIONA
Like sistema_stringa([Forms]![Spare Parts Management]![Modello])
 
con sistema stringa che ritorna "*" se la stringa di partenza è nulla 
altrimenti la ritorna uguale o modificata sui doppi apici o il cancelletto
 
non va, non mi filtra
ho testato cosa restituisce la funzione con un debug e restituisce
6"" 900[#] MAINLINE BALL VALVE
 
ma non gli piace
nè gli piace se restituisco io la stringa già circondata da doppi apici cioè
"6"" 900[#] MAINLINE BALL VALVE"
 
 
Che fare?
 
Antonio 
 
 

...
 
Ciao Antonio,
 
perché cosě tratta l'asterisco come una stringa fissa invece di un jolly.
Quindi lascia perdere l'asterisco nella funzione e prova cosě:
 
sistema_stringa([Forms]![Spare Parts Management]![Modello])
 OR [Forms]![Spare Parts Management]![Modello] Is Null
 
v.a. 
http://www.donkarl.com/it?FAQ3.14
 
 
-- 
Ciao
Karl
*********
Access FAQ: 
www.donkarl.com/it
 
 
 

 ha scritto nel messaggio 
news:a6b3on...@mid.individual.net...

no karl l'asterisco non c'entra.
ho provato anche a toglierlo proprio per isolare il problema della modifica 
della stringa e il ritorno in query, ma niente, non la usa come filtro
ho provato anche senza il like, ma solo con la chiamata di funzione cosě che 
ci fosse = stringa_risultato. Niente, se i doppi apici e il cancelletto non 
ci sono, funziona, altrimenti non va
 
il problema non č tanto sul cancelletto quanto sui doppi apici
 
xxx""yyyy   o "xxx""yyy"
 
come stringa risultato non le prende
 
se le scrivo direttamente nella query senza la chiamata di funzione, come 
stringa costante, FUNZIONA!!!
 
sigh...
 
Antonio 
 
 

 come stringa costante, FUNZIONA!!!
 
Perché scritto direttamente nella query * " [ sono caratteri simbolici.
Invece tutto che mandi con la funzione nella query viene preso come
stringa fissa (letterale), anche le due virgolette.
Cioè almeno per l'esempio attuale la tua funzione potrebb'essere
abbastanza povera, p.e.
 
Public Function sistema_stringa(varCtl As Variant) As Variant
 
    sistema_stringa = varCtl
 
End Function
 
e la chiamata come già scritta:
 
sistema_stringa([Forms]![Spare Parts Management]![Modello])
 OR [Forms]![Spare Parts Management]![Modello] Is Null
 



 
Karl, lascio per il momento il discorso is null
 
la mia funzione restituisce questa stringa
6"" 900 MAINLINE BALL VALVE
 
ho verificato con una debug.print e quello è il risultato
 
nella query c'è
sistema_stringa([Forms]![Spare Parts Management]![Modello])
NON FUNZIONA
 
Prendo allora la stringa, e la incollo pari pari nella query così invece di 
un filtro dinamico, è un filtro con stringa costante
ovviamente lui la circonda di doppi apici quindi da
6"" 900 MAINLINE BALL VALVE diventa "6"" 900 MAINLINE BALL VALVE"
 
FUNZIONA!
 
per scrupolo ho provato a far restituire alla funzione direttamente la 
stringa circondata da doppi apici
"6"" 900 MAINLINE BALL VALVE"
 
ma non funziona lo stesso
 
sigh
 
Antonio 
 
 

Ciao Antonio, ti scrivo la risposta di Giorgio Rancati per un problema simile al tuo:
Bisogna stare attenti quando il valore testuale contiene un carattere che è anche delimitatore, come ad esempio:
[Prodotto] = "Disco da 3"1/2"
Qusto filtro renderà errore perchè il motore del database incontra un primo valore testuale "Disco da 3" e poi qualcosa che non può decifrare 1/2"
Per risolvere bisogna raddoppiare il carattere che corrisponde al delimitatore testuale
[Prodotto] = "Disco da 3""1/2"
proprio come si fa in VBA, in questo modo il motore del database sa che il valore da cercare è Disco da 3"1/2
per chiarezza aggiungo la composizione di StLinkCriteria da VBA
 
[Prodotto] = "Disco da 3""1/2"
da VBA:
StLinkCriteria = "[Prodotto] = " & Chr(34) & Replace(Me.txtProdotto,Chr(34),Chr(34)+Chr(34)) & Chr(34)
Ciao Vladimiro


... poi ripeti tutto che hai già scritto due volte...
 
Quindi anch'io rispondo con la ripetizione. :-)
 
Nel primo paragrafo della mia risposta precedente (vedi sopra)
ho provato di descrivere la causa per il comportamento. Non
l'ho descritto comprensibile o non mi credi?
 
Poi ho scritto una soluzione = una singola riga di codice
come funzione. L'hai provato con questa riga?
Ti costa 1 minuto, meno che ripetere tutto una quarta volta. ;-P


 ha scritto nel messaggio 
news:aec1e830-7a28-43db...@googlegroups.com...

Vladimiro, grazie della tua risposta, ma io ho fatto proprio così
La funzione che ho introdotto era proprio per raddoppiare i doppi apici
e ho tentato sia facendo restituire alla funzione
Disco da 3""1/2
che
"Disco da 3""1/2"
 
ma in entrambi i casi non funziona
 
se metto nella query direttamente
"Disco da 3""1/2"
 
funziona perfettamente
 
...
 
Antonio 
 
 

 Ti costa 1 minuto, meno che ripetere tutto una quarta volta. ;-P
 
Ho provato, funziona.
 
sinceramente non è che non ti credessi, non avevo capito quello che mi 
dicevi e il ritorno della funzione senza elaborazione di quanto passato mi 
era sembrato una dimenticanza
 
Grazie
 
Antonio