agrisi ha scritto:
Ho un database contenente dei nomi di vie, ma questo è stato scritto da diverse persone quindi non sono unificati i nominativi.
...
C'è un modo per farlo senza dover modificare tutti i dati uno ad uno?
Il mio è un punto di vista aggiuntivo rispetto a quanto già esposto dagli altri utenti, non in contrapposizione.
Non so realizzarlo "da solo" con Access ma siccome faccio questa operazione anche per lavoro posso dirti come funziona nel gestionale (commerciale) che uso. Spesso mi riferirò a questa operazione di standardizzione con il termine "normalizzazione" che in questo caso non fa riferimento alle "forme normali" della teoria relazionale, anche se in un certo senso viene fatta per raggiungere quello, seppur a posteriori.
Chiamo tblPrincipale quella dove hai i dati con i nomi delle vie non normalizzati, tblVie quella in cui attualmente hai i nomi "ufficiali" con apposita PK e tblDecodifica quella "di appoggio" il cui uso si capisce nel resto del post. E' tutto limitato alla denominazione della via, quindi non considero il fatto che nello stesso campo possano esserci anche i numeri civici.
Nella tabella tblPrincipale deve essere aggiunto un campo che sarà FK con tblVie.
La struttura di tblDecodifica è questa
CampoPK (nome a discrezione) - contatore chiave primaria
DescVia - testo
CodVia - numerico (che sarà in relazione con la PK di tblVie, senza integrità referenziale per ora)
Popolare la tabella tblDecodifica con una SELECT DISTINCT del campo che contiene il nome della via in tblPrincipale.
Creare una maschera associata a tblDecodifica (frmDecodifica), con la possibilità di filtrare per contenuto parziale, ad esempio con una casella di testo in cui indicare il criterio di filtro, in modo da poter limitare il record selezionabili ed un pulsante che selezioni tutti i record visualizzati.
Nella casella di testo è possibile quindi scrivere "Nuova" (per rifarmi all'esempio citato in apertura del thread) e ottenere l'elenco dei nomi che contengono quel valore. Se tutti i record restituiti sono associabili ad un unica via, premere il citato pulsante "Seleziona tutto", altrimenti selezionare quelli che si vogliono normalizzare, aprire una maschera (frmVie) in modalità acDialog dove selezionare dalla tabella tblVie il nome (ma in realtà la relativa PK) corretto e tramite apposito pulsante che "chiude" (ma in realtà la nasconde e basta) inserire la PK di tblVie nel campo CodVia dei record che erano rimasti selezionati in frmDecodifica. Valutare se è sufficiente questo per inserire definitivamente il codice della via o se si vuole dare un'ulteriore possibilità di scelta, lasciando ad un apposito pulsante in frmDecodifica la conferma dei codici. Sempre in questa maschera si possono aggiungere varie funzioni (nel senso di operazioni disponibili): limitare la visualizzazione ai record non ancora normalizzati (quelli che hanno la FK con tblVie impostata a zero), la possibilità di cancellare una normalizzazione inserita (ad esempio Corso Porta Nuova normalizzato associandolo a Corso Porta Palio perché si era usato "Porta" come criterio di filtro e non si era notata la presenza di via diverse). frmVie a sua volta può prevedere un criterio di filtro, già in fase di apertura (con lo stesso criterio della casella di testo di frmDecodifica) ma anche uno autonomo.
Non è facilissimo da fare ma nemmeno così difficile. Ci sono sicuramente accorgimenti o problemi che spunteranno in corso di realizzazione e che non ho previsto e quindi spiegato anticipatamente come affrontare qui.
La prima fase di normalizzazione sarà la più lunga, purtroppo, non come metterci mano uno alla volta, si confida nel fatto che alcune denominazioni di via non conformi si ripetano (come aveva evidenziato @Alex). Spero di aver reso un po' l'idea.
Vàluta l'uso nella tblVie di un record - via residuale, del tipo "Via non identificata".