Newsgroup: it.comp.appl.access
Titolo: Replace in una stringa SQL

Un filtro SQL combinato mi esegue una ricerca basandosi su una serie
di caselle.
Nell'esempio sottostante il campo CodiceV si basa su una stringa
inserita nel campo sort3 (appunto l'elenco dei codici articolo)
Case 3
           strSQL = strSQL & " CodiceV like ""*" & sort3 & "*"""
Purtroppo sono stati inseriti degli spazi nel campo CodiceV in alcuni
articoli e io vorrei eliminarli per consentire comunque una ricerca
completa.
Quindi, se l'utente digita 10M M, vorrei venissero trovati anche gli
articoli 10MM.
Ma la funzione replace non viene accettata nella stringa SQL e anche
eseguendo filtri su un campo che utilizza replace in una query creata
a titolo di prova, non mi consente di inserire un filtro.
Quindi credo ci sia proprio un problema personale nell'interpretazione
di "Replace".
VI invio la stringa "errata", sperando che possiate modificarla per
renderla funzionante.
Case 3
           strSQL = strSQL & " Replace(CodiceV) like ""*" & sort3 &
"*"""
Grazie anticipatamente.

 ha scritto nel messaggio 
news:1e4bb6d2-6a36-4778...@b1g2000hsg.googlegroups.com...

Ciao ennioMarzocchi,
la sintassi corretta di Replace è Replace(stringaInCuiCercare, 
stringaDaCercare, stringaDaSostituire) quindi   dovrebbe essere
strSQL = strSQL & " (Replace([CodiceV],"" "","""") like  ""*" & sort3 
&  "*"")"
a  meno di errori nel bilanciamento delle virgoleete e delle parentesi
-- 
Cinzia [Office Access MVP]
_______________________
 
www.riolab.org
http://accessdaziacin.live.spaces.com
---------------------------------------- 

ennioma...@puntocart.com
 ha scritto:



Trovi la risposta sul sito di Karl 
www.donkarl.com/it
 non mi ricordo a che
numero, cerca un po' tu.
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 - Mostra testo tra virgolette -
quando faccio così mi darei delle martellate in testa.
La sintassi corretta era così come l'hai scritta tu Cinzia, al posto
delle doppie virgolette usavo le singole (e dire che avevo controllato
la mail due volte).
Ma non va.
La stringa SQL si basa su una Query.
Se io creo un campo nella query e scrivo
strCodiceV:Replace([CodiceV];" ";"")
sostituendo alle virgole il punto e virgola tutto è ok, ovvero
visualizzo i CodiciV senza spazi.
Ma se mi azzardo a scrivere nei criteri del campo strCodiceV la
dicitura 10 M , non mi consente di filtrare il dato.
Ecco, credo che il problema risieda nell'impossibilità di effettuare
un filtro in un campo che è basato su "Replace" sia che si tratti di
SQL che di una query salvata.
Sbaglio?

 ha scritto nel messaggio 
news:g0e81q$r1p$1...@news.newsland.it...

Credo che se usi VBA la stringa non č priprio scritta correttamente
Io userei la funzione Trim ...
strSQL = strSQL & " " & Trim(CodiceV) & " like ''*'' " & sort3 & "''*''"
cosě dovrebbe funzionare...
Ma se Trim(CodiceV) deve risultare testo basta che sposti le virgolette...
Ciao
-- 
Roberto da Parma 

 - Mostra testo tra virgolette -
No, così non va.
Sia perchè trim lavora sugli spazi esterni, mentre il mio problema
sono gli spazi dentro la stringa, sia perchè CodiceV in questo caso
punta alla maschera e non al campo della query.
Ho una proposta:
Create un campo in una query già esistente utilizzando replace e
provate a fare un filtro nel criterio ordinamento di quel campo.
Se riuscite a fare un filtro sul campo mi fate un bel copia incolla
della stringa SQL della query e poi ci penso io ad adattarla...
Ancora grazie!
Per Marco: al momento non ho trovato l'esatta corrispondenza di ciò
che cerco.
Ciao.

della stringa SQL della query e poi ci penso io ad adattarla...
 >>>>>>>>>>>>>>>>>>
Ciao Ennio,
questa a me funziona benissimo
SELECT CLIENTI.*, Replace([Societa]," ","") AS Espr1
FROM CLIENTI
WHERE (((Replace([Societa]," ","")) Like "*" & [cosa?] & "*"));


 WHERE (((Replace([Societa]," ","")) Like "*" & [cosa?] & "*"));
Che versioni di Access hai? Sul 2000 non va, è il solito problema delle
nuove funzioni introdotte dopo A97 che non si possono usare nelle query,
bisogna richiamarle attraverso Public function appositamente create in un
modulo. Si vede che da una certa versione in poi lo hanno corretto.
Ma questo non c'entra col problema originale dato che lui usa il Replace
in VBA, la stringa SQL viene composta con il valore a cui sono già stati
tolti gli spazi, il problema stava solo nella sintassi.
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnala
 gli abusi ad 
ab...@newsland.it
Io vi ringrazio e... non so cosa dirvi.
Nei clienti ho creato questa query
SELECT CLIENTI.*, Replace([DescrizioneCliente]," ","") AS Espr1
FROM CLIENTI
WHERE (((Replace([DescrizioneCliente]," ","")) Like "*" & [cosa?] &
"*"));
così come indicato da Cinzia (e così come è giusto che sia).
Ma se creo questa query:
SELECT VARIANTI.*, Replace([CODICEV]," ","") AS Espr1
FROM VARIANTI
WHERE (((Replace([CODICEV]," ","")) Like "*" & [cosa?] & "*"));
non va più.
CodiceV è uno stramaledettissimo campo testo, così come
DescrizioneCliente.
Ho il dubbio che ci sia qualcosa alla tabella Varianti di "difettoso".
Farò ulteriori prove.
P.S.: Uso Office 2003 e database Access versione 2003.
Grazie per il supporto.
Ciao

 - Mostra testo tra virgolette -
AGGIORNAMENTO:
Ho sostituito alla [descrizioneCliente] il nome [indirizzo]
nell'esempio di cui sopra (quello relativo ai clienti) e mi dà errore
(tipi non corrisondenti nell'espressione critierio) e mi inserisce
dopo qualche secondo il contenuto nome? su tutte le celle. Stessa cosa
con Comune, Provincia, etc.
Eppure sono tutti campi testo è sempre un campo testo...
Torno a scrivere [descrizionecliente] e tutto torna a funzionare.
Vi invio la stringa, chissà mai non abbia fatto una baggianata:
SELECT CLIENTI.*, Replace([indirizzo]," ","") AS Espr1
FROM CLIENTI
WHERE (((Replace([indirizzo]," ","")) Like "*" & [cosa?] & "*"));

 ha scritto nel messaggio 
news:9c483cf4-65a4-41f0...@25g2000hsx.googlegroups.com...


Ciao Ennio,
l'errore è probabilmente dovuto al fatto che il campo Indirizzo non è 
sempre pieno, al contrario del campo DescrizioneCliente, per cui 
cambierei così la select:
SELECT CLIENTI.*, Replace(nz([indirizzo], "")," ","") AS Espr1
FROM CLIENTI
WHERE (((Replace(nz([indirizzo], "")," ","")) Like "*" & [cosa?] & 
"*"));
-- 


 ha scritto nel messaggionews:9c483cf4-65a4-41f0...@25g2000hsx.googlegroups.com...

Sì, grazie Cinzia.
Una volta modificata nella query tutto ha cominciato a "girare".
Scrivo la stringa (una parte) relativa all'SQL in VBA perchè ci sono
due particolari da mettere in evidenza:
strSQL = strSQL & " CodiceV like ""*" & sort3 & "*"""
strSQL = strSQL & " or Replace(nz(CodiceV,''),"" "","""") like ""*" &
sort3 & "*"""
La prima riga cerca l'articolo com'è scritto esattamente e la seconda
invece li cerca utilizzando replace (se ometto la prima riga non mi
restituisce tutte le righe che voglio.
Seconda precisazione: Se invece di scrivere nz(CodiceV,'') scrivo
nz(CodiceV,"") non va.
Uso le virgolette ovunque, ma all'interno di NZ devo mettere gli
apici.
Forse ci sono alternative, ma, insomma, se qualcuno si trova nei guai
per questo particolare, fatevi il copia incolla di questa stringa così
siete a posto.
Oppure inseritene una più corretta in sostituzione di questa.
Grazie a tutti per la disponibilità.

 - Mostra testo tra virgolette -
CORREZIONE:
strSQL = strSQL & " Replace(nz(CodiceV,''),"" "","""") like ""*" &
Replace(Nz(sort3, ""), " ", "") & "*"""
Precisazione in merito all'nz: in codiceV gli apici, in sort3 le
virgolette.
(viceversa mi restituisce un errore).
Ciao.