Eliminazione di record massiva in Access in seguito a una query di selezione

Anonimo
2019-07-17T20:08:59+00:00

Ciao a tutti,

ho dovuto portare su Access una serie di file excel per poter gestire e classificare un DB clienti/fornitori. Condivido qui sotto le tabelle del DB. Noterete subito che il DB non è ottimizzato, perchè ci sono diverse relazioni ridondanti tra campi; questo è dovuto al fatto che dovendo creare un DB da tanti file excel molto elementari non volevo rischiare di perdere dati; perciò ho creato p.es. diverse tabelle di collegamento per gestire relazioni molti-a-molti ma ho dovuto lasciare attive le vecchie relazioni uno-a-molti per per non perdere i dati. Non sono un professionista, e non conosco una strada più semplice per creare un buon DB relazionale partendo da dati preesistenti e strutturati male.

In questo momento ho l'esigenza di eliminare alcuni record nella tabella "Anagrafiche" partendo dalla query di selezione "QS_ANAGR_DA_ELIM".

Il flusso è: dal DB esportiamo in formato excel una selezione di anagrafiche (indirizzi mail) in un'applicazione web che invia mail ai destinatari ->

in seguito al report della campagna marketing, vogliamo eliminare dal DB quelle anagrafiche che l'applicazione web dichiara non esser più valide.

Il campo che usiamo per identificare le anagrafiche (cioè il set di campi che definiscono il cli/for) è la mail.

Ho importato nel DB il report dell'applicazione web nella tabella "ANAGR_DA_ELIM". Questa tabella contiene le mail risultate non più valide. Confronto tale tabella con la tabella "Anagrafiche" mediante il campo mail (che si chiama "EMAIL_PRINC" in Anagrafiche, "ANAGR_DA_ELIM" nell'omonima tabella) mediante una query di selezione, "QS_ANAGR_DA_ELIM", in cui ho creato un join tra i due campi nelle rispettive tabelle. Ho portato il campo "EMAIL_PRINC" della tabella Anagrafiche nella griglia QBE, e il risultato della query di selezione è corretto. Pensavo quindi di poter cancellare semplicemente i record estratti dalla query con un semplice CANC.. Access però me li cancella dalla tabella "ANAGR_DA_ELIM", ma non dalla "Anagrafiche".

Dove ho sbagliato / omesso? Il ragionamento che ho fatto mi sembra corretto, ma il risultato finale non lo è, quindi evidentemente sbaglio perchè non sono riuscito a indicare ad Access da dove voglio che mi cancelli i record.

Qui sotto il DB in questione.

https://1drv.ms/u/s!AtZa5okJIOVOht5UbhUkl4SCnaZXFA?e=twTdZe

Grazie per l'attenzione

P.S. Mi scuso anticipatamente se risulta una domanda banale o se non sono stato chiaro..

Alberto

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2019-07-19T05:32:30+00:00

ciao Alberto,

[…]

Grazie Sandro, funziona perfettamente.

[…]

bene, mi fa piacere.

[…]

In sostanza hai creato direttamente una query di eliminazione usando il predicato distinctrow.

[...]

si serve per identificare la tabella da cui eliminare le righe nel momento in cui il join è impostato su campi non chiave, in predicati sql di questo tipo. ( delete action queries).

[…]

Ora mi studio come funziona. Farei bene a studiarmi un po' di SQL, se solo avessi un po' di tempo..

[…]

certo distinctRow ha anche altri scopi, non appena puoi approfondisci…! ;-)

[…]

Grazie di tutto. Se passi da Milano contattami, hai una colazione-premio.

[…]

Alberto

ogni tanto ci passo sempre di corsissima….! 

Grazie  apprezzo molto.

In bocca al lupo per il tuo progetto.

Ciao e buon we.

Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2019-07-18T06:19:38+00:00

Ciao Alberto,

[…]

Allora edito la query e inserisco quel codice SQL. Corretto?

[…]

certo, ottieni quanto chiedi.

la query cancella le righe dalla tabella, quindi sempre meglio su una copia backup del database.

Superfluo ricordarlo, ma non si sa mai….

ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-07-18T20:26:01+00:00

    Grazie Sandro, funziona perfettamente.

    In sostanza hai creato direttamente una query di eliminazione usando il predicato distinctrow.

    Ora mi studio come funziona. Farei bene a studiarmi un po' di SQL, se solo avessi un po' di tempo..

    Grazie di tutto. Se passi da Milano contattami, hai una colazione-premio.

    Alberto

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-07-18T06:02:31+00:00

    Ciao Sandro,

    Grazie per la risposta così rapida!

    Allora edito la query e inserisco quel codice SQL. Corretto?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-07-18T05:36:45+00:00

    ciao Alberto,

    prova come segue :

    DELETE

             distinctrow Anagrafiche.*

    FROM

             ANAGR_DA_ELIM INNER

    JOIN

             Anagrafiche ON ANAGR_DA_ELIM.ANAGR_DA_ELIM = Anagrafiche.[E-MAIL_PRINC];

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento