Pagina 3 di 3 primaprima 1 2 3
Visualizzazione dei risultati da 21 a 29 su 29
  1. #21
    Bravo Oregon, hai mostrato una discussione dove spiegava il motivo per cui non funziona, cioè che quando si accede al database via oledb funziona solo un limitato numero di funzioni, ma usandole direttamente da Access funzionano tutte.
    Comunque ripeto: con Access 2010 funziona anche da VB NET tramite oledb.
    Se hai la possibilita puoi verificarlo direttamente.
    Comunque ho capito che utilizzerò il metodo che ho spiegato in un post precedente.
    Ringrazio tutti coloro che hanno cercato di aiutarmi veramente e da qui in avanti non mi infilerò più in sterili polemiche, semplicemente ignorando chi non ha l'obiettivo di aiutare le altre persone.

  2. #22
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,327
    Magari dico una stupidaggine, è da parecchio che ho smesso di usare Access (per il bene mio e di tutta l'altra gente)...

    Potresti provare a costruire una Query di Access (quindi, da dentro l'ambiente Microsoft Access) di questo tipo:

    codice:
    SELECT *, Replace(campo, '.', '') AS CampoRicerca
    FROM NomeTabella
    La salvi, ad esempio, come "QryTabella".

    Da dentro al programma, invece di riferirti direttamente alla tabella, ti riferisci alla query, in questo modo:

    codice:
    SELECT * FROM QryTabella WHERE CampoRicerca LIKE '%valore%';
    Ripeto, non so se sia fattibile (ma dovrebbe esserlo, essendo che le query di Access dovrebbero essere l'equivalente delle View di tutti gli altri DBMS) e di sicuro è una gran scocciatura se le tabelle su cui fare ricerche di questo tipo sono molte (dover creare una View/Query per ciascuna tabella).

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #23
    Quote Originariamente inviata da gibra Visualizza il messaggio
    Appunto! MItaly, mi hai appena dato ragione!
    Infatti la regola è che:

    prende il contenuto del campo campo
    È esattamente quello che vuole fare, come ribadito più volte; nel primo post ammetto che era poco chiaro e anch'io non avevo ben capito, ma poi si è chiarita perfettamente.
    Ammesso, e non concesso, che in Access puoi scrivere i nomi dei campi come ti pare basta che poi nelle query questi siano inclusi tra parentesi quadre, non ha comunque senso fare il Replace sul nome del campo, lo si deve fare sul contenuto.
    È ben quello che sta facendo! Infatti se specifichi il nome di un campo (che in Access, come in praticamente ogni altro DBMS, si può specificare senza quadre, se questo non introduce ambiguità) nella clausola WHERE, questo viene interpretato come il contenuto di quel campo sul record che è correntemente in esame; ma queste sono le basi di SQL, che so per certo che conosci a menadito, per cui non capisco da dove nasca l'equivoco (specie quando già in quattro ti abbiamo fatto notare che hai preso un abbaglio sull'uso che intende fare di quella query).
    Tra l'altro, poi, è lo stesso stellinaxxx che afferma di volerla usare per tale scopo:
    stellinaxxx vuole fare una specie di fuzzy-matching sul contenuto di una certa colonna; ovvero, nel DB in una certa colonna i nomi di diverse organizzazioni (sparo a caso) sono memorizzati con i punti tra le lettere delle sigle (ad esempio S.p.A., A.S.L., U.S.L.), e vuole che la ricerca matchi anche quando l'utente inserisce, come stringa da cercare, l'equivalente senza punti (SpA, ASL, USL). Per fare questo invece di fare un confronto del tipo
    codice:
    select * from NomeTabella where campo like '%valore%'
    (dove campo è una colonna di NomeTabella)
    vuole fare
    codice:
    select * from NomeTabella where replace(campo,'.', '') like '%valore%'
    ovvero, ad essere confrontato tramite la like non è il contenuto della colonna campo "così come è memorizzato nel DB", ma per ogni record il confronto avviene tra '%valore%' e il contenuto del campo campo "epurato" dai punti.
    Suggerirei di prestare più attenzione a quello che si legge, e si scrive.
    Non posso che essere d'accordo con questo suggerimento.

    In ogni caso, incidente chiuso, si torna in-topic, altrimenti non ne usciamo più.
    Ultima modifica di MItaly; 10-10-2013 a 20:24
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #24
    Ottimo chiarimento MItaly, senza aggiungere altro.

    LeleFT era una bella idea, l'ho provata ma ha dato lo stesso risultato: "Funzione Replace non definita nell'espressione"

  5. #25
    potresti provare con una regular expression

  6. #26
    Con la regular expression posso fare la ricerca nel database e fare in modo che vengano fuori i dati privi dei punti.
    Io invece ho bisogno di questo(ti faccio un'esempio):

    1)L'utente ha una textbox dove cercare un'ente
    2)Nella textbox digita USL
    3)Poi da l'invio per far partire la ricerca
    4)Come risultato della ricerca deve esserci U.S.L. che è memorizzato con i punti nella tabella
    5)In più aggiungo che deve poter trovarlo anche digitando U.S.L.

    Io o fatto così:
    Ricerca tramite dataset di tutti i record della tabella
    Ogni record mi chiedo se soddisfa i criteri di ricerca (sia con che senza punti)
    Se non ne soddisfa nemmeno uno dei 2 elimino il record dal dataset
    Dopodichè filtro il dataset utilizzando

    codice:
    dataview1.RowStateFilter = DataViewRowState.Unchanged 'faccio rimanere solo quelli non eliminati


    Per ora è il massimo che sono riuscita a fare

  7. #27
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quote Originariamente inviata da stellinaxxx Visualizza il messaggio
    Devo insistere!!!
    codice: select*fromNomeTabellawherereplace(campo,'.', '') like'%valore%'
    In questo modo se in un campo ho memorizzato una sigla tipo U.S.L. e voglio dare modo all'utente pigro di cercarla mettendo nella textbox USL, con questa funzione la troverà lo stesso.
    E ripeto: FUNZIONA!!! Sul PC dove è installato Office 2010 FUNZIONA, mentre sull'altro no, dicendo che non riconosce la funzione REPLACE.
    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.

  8. #28
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da gibra Visualizza il messaggio
    Ebbene, devo confessare di aver 'cannato di brutto'.
    Lo avevamo capito ... ... ma può capitare ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #29
    Ti ringrazio gibra. So che qui dentro sei uno dei più bravi e mi scuso per qualche mia risposta un po' piccata.
    A questo punto direi che il tuo post ha definitivamente messo fine a questa discussione.
    Un ringraziamento a tutti quelli che sono intervenuti.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.