Newsgroup: it.comp.appl.access
Titolo: Eliminare un record doppio, ricollegando altri record al supestite.

Prelevo una mia domanda da un altro tread (eliminare 1 di 2 record doppi 
DEL 17/01/05) nella quale forse non aveva visibilità.
Descrizione del problema:
Diverse tabelle collegate direttamente o indirettamente (attraverso 
tabelle intermedie) ad una tabella anagrafica.
Il collegamento avviene in questo modo:
ID_AN chiave primaria in TBL_AN collegata ad ID_ANA presente in tutte le 
tabelle collegate (quest'ultima non è PK in nessuna tabella).
Purtroppo chi introduce i dati a volte anziché cercare l'anagrafica la 
rigenera duplicandola.
Richiesta:
creare una macro che:
Identificare i record doppi e i due ID_AN coinvolti (Esempio ID_AN 999 
ID_AN 988) in anagrafica.
Cerchi e Sostituisca nel campo ID_ANA delle diverse tabelle collegate il 
valore 999 con 988 per collegare i dati collegati ad un unico record (il 
più vecchio).
Cancellare il record di anagrafica de-collegato (ID_AN 999)
Il tutto con un comando da collegare all'evento chiusura maschera 
introduzione dati per automatizzare il tutto.
Grazie
(PS) in questo ng avevo ricevuto alcuni mesi fà  (altro nick) una 
critica all'oggetto dei miei messaggi sono almeno un pò migliorato?

 Grazie
Ed in base a cosa si determina se due record della tabella TBL_AN sono
doppi, o tripli o quadrupli.
Una volta localizzati i record i record, va lasciato solo quello con ID_AN
minore?
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

 ha scritto nel messaggio
news:B7tId.4006$5k5....@twister2.libero.it...

Scusa, dal mio piccolo ti consiglio una cosa: perchè non evitare a monte che
chi introduce i dati possa scriverli?
Se metti la proprietà "solo in elenco" a sì, della casella combinata da cui
sceglie il valore, vedi che non puo' più scrivere ma è costretto a
scegliere...
Ciao.

 Ciao.
Purtroppo le persone "entrano" per cui bisogna introdurle, non sono 
riuscito a creare un filtro che non salvi una persona se i tre campi 
sono uguali (devo pensare anche ad ononimie vedi "Paolo Rossi" o nel mio 
comune "Marco Barbieri" o "Marco Vitali")
La soluzione da me pensata è in uscita dalla maschera una macro che 
faccia il lavoro di pulizia.
Ma come costruire le query?

 Ma come costruire le query?
Se rispondi ai quisiti che ti ho posto, chissà che una soluzione non si
trovi! ;-)
Visto che ci sono i problemi di ompnimia, non mi è chiaro quale sia il grado
di automatismo che vorresti introdurre.
Comunque sono anche io d'accordo è fare in modo che non si creino record
doppi relativi la stessa persona avvertendo l'operatore che esiste la
possibilità di doppione: l'operatore farà le dovute verifiche e se poi
confermerà l'inserimento di un nuovo record significa che si è davanti ad un
problema di omonimia: così eviti sicuramente normalizzazioni dell'archivio a
posteriori.


 posteriori.
Il problema è che l operatore non controlla, nella maschera di introduzione c è 
un filtro, che se vuole può usare per cercare la persona ma sai si perde tempo  
L inserimento potrebbe avvenire in tre o più tempi (Ingresso Fase 1, Fase 2, 
Fase 3, uscita) a volte in fase due o tre si ricrea la persona, per non parlare 
delle persone che  ricircolano  entrano, escono rientrano n volte (e per 
incasinare il tutto dopo una fase 1 hanno 2 o più fasi 3).
Inviato da 
www.mynewsgate.net

 ha scritto nel messaggio
news:200501251...@mynewsgate.net...

Scusami ma non sono d'accordo con quanto dici, che a mio avviso va contro
ogni elementare regola di data entry: non si deve caricare i dati con la
pala e poi andare con una fase batch a posteriori ad effettuare delle
correzioni più o meno automatiche per correggere gli errori che l'operatore
commette in fase di acquisizione dei dati.
Né è necessario richiedere all'operatore di lanciate manualmente una fase di
controllo che verifichi se già esiste un certo nominativo; prima di
registrare un nuovo nominativo da codice VBA (ad esempio con una funzione
DLookup o DCount) vai a verificare se in tabella esiste già un record con
gli stessi nome, cognome e data di nascita e se la verifica ti dà esito
positivo eviti di registrare il nuovo record e ti ricavi la chiave primaria
del record già esistente per registrarla come chiave esterna dei record
correlati; il tutto in modo, come tu dici, totalmente "trasparente"
all'operatore oppure coinvolgendolo in maniera più o meno consapevole.
Risolto il problema che ti permette di non avere più in futuro errori di
duplicazione puoi fare una procedura una tantum per ripulire la tabella
principale dai duplicati e per normalizzare le chiavi primarie dei record
dei record correlati.
Insomma, anche in questo caso la terapia migliore è quella della terapia
preventiva e non della chirurgia di amputazione. ;-)
