Come detto da oregon, temo ci sia un misunderstanding... non ho riferimenti sul dialetto SQL di Access, ma una funzione del genere esiste ad esempio in SQLite, e quel codice sarebbe assolutamente corretto. Per ogni record, il DBMS prende il contenuto del campo campo ed elimina tutti i punti prima di confrontarlo con la clausola like. Ovvero, ovviamente non opera sul nome del campo, ma sul suo contenuto (come qualunque funzione che si possa richiamare in SQL).
Amaro C++, il gusto pieno dell'undefined behavior.
Ebbene, devo confessare di aver 'cannato di brutto'.
Il mio problema era dovuto al fatto che ero partito da un assunto 'diverso', e ciò mi aveva messo un bel 'bisteccone sugli occhi' impedendomi di vedere invece come stellinaxxx intendeva utilizzare la funzione.
Ancora una volta 'mi sono dimostrato' che prima di parlare bisogna verificare quello che si afferma con un test pratico; ma quello che mi fa imbestialire di più è che lo so, ma ogni tanto ci casco come un pivello.
Ben mi sta, anche se, ad onor del vero, in questo caso non avrei potuto fare test semplicemente perchè Replace non funziona sul mio Office 2010 (appena testato).
Quindi chiedo scusa a tutti, in primis a stellinaxxx, per il fraintendimento e mi rammarico di avere fatto 'sta figuraccia.
Tornando in topic:
purtroppo non sembra esistere soluzione al problema di: Funzione non definita...
Di norma non uso funzioni Access nelle query, l'unica che ho usato in passato fu Round in una procedura di aggiornamento listini che ha funzionato fino a che nel pc avevo Office 2007.
Dal momento in cui ho installato Office 2010 non funzionava più, quindi ho dovuto mettere mano al codice.
Non dipende dalla versione del database usato, ma dal motore della versione di Access presente nel computer, il che significa che se il cliente decide di aggiornare da Office 2003 ad Office 2010 si troverà questa 'bella' sorpresa, e ovviamente la prima cosa che farà è contattare noi, accusandoci con un: Non funziona più!
La causa è dovuto al fatto che Microsoft ha reso Private alcune funzioni che prima erano Public, di fatto rendendole accessibili solamente dall'interno dell'ambiente MSAccess.
Dall'esterno: ci si attacca al tram.
Insomma, i soliti graditi regali di Microsoft, alla faccia della compatibilità.
Questo promette di risolvere il problema:
Use sandbox mode in Access 2007 - Access - Office.com
http://office.microsoft.com/en-us/ac...010167429.aspx
Ma, a parte il fatto che non risolve nulla (appena testato) è comunque troppo invasivo perchè richiede la modifica al Registro di Windows, il che non è detto che sia sempre applicabile.
Per chi, come me, distribuisce programmi ai propri clienti non è detto che i permessi dell'utente consentano tale modifica al Registro, con il rischio di dover provvedere 'a mano' su ogni computer di ogni cliente.
codice:
select * from NomeTabella where replace(campo,'.', '') like'%valore%'
E bravo Oregon, tu hai capito.
A dire la verità io non cercavo aiuto circa il motivo per cui non funziona, perchè, come ho già detto, facendo delle ricerche, l'ho capito, vale a dire: è una funzione che vb net prende da access e quindi è legata alla versione di Access installata sul PC.
Io volevo sapere se c'è un'altro modo per raggiungere il medesimo risultato(non troppo arzigogolato, tipo scorrere tutti i record della tabella e ogni volta vedere se soddisfa la ricerca con e senza punti, cancellando dal dataset quelli che non la soddisfano e poi filtrare con un dataview solo i record non cancellati)
Forse c'è un equivoco ... i punti non sono nel nome dei campi ma nei dati contenuti nei campi ...
No MP tecnici (non rispondo nemmeno!), usa il forum.
Caro gibra, tutti qui hanno capito che sei tu che hai torto, leggiti i vari post di Oregon, MlItaly e Optime. Non c'è niente di male a dire che non conosci quella funzione.