Cancellazione record su più tabelle

di il
9 risposte

Cancellazione record su più tabelle

Devo fare un pulsante per eliminare un ordine avente id_ordine_testata desiderato

Il problema è che se uso la procedura guidata per la creazione del pulsante ma non funziona in quanto ci sono record in tabelle correlate compilati. Quindi per eliminare l'ordine dovrei entrare nelle due tabelle correlate, eliminare i record in entrambe e così facendo riesco ad eliminare

le tre tabelle sono:
ordine_testata - quella principale con chiave id_ordine_testata senza duplicati
ordine_posizioni_torta - id_ordine_testata chiave 1 a molti con id_ordine_testata
ordine_posizione_prodotto - ordine_testata chiave 1 a molti con id_ordine_testata

Mi pare di aver capito che devo creare una query di delete che devo richiamare con il pulsante, corretto ? oppure si può fare direttamente con un vba al pulsante?

9 Risposte

  • Re: Cancellazione record su più tabelle

    asnaldo ha scritto:


    Mi pare di aver capito che devo creare una query di delete che devo richiamare con il pulsante, corretto ?
    Sì, io farei così. Nella query prevedi un criterio:
    [Maschere]![NomeMaschera]![CampoID]
  • Re: Cancellazione record su più tabelle

    Mmm non funge.. mi dice "specifica la tabella contenente i record da eliminare."
    DELETE ordine_testata.id_ordine_testata, *
    FROM (ordine_testata INNER JOIN ordine_posizioni_torta ON ordine_testata.[id_ordine_testata] = ordine_posizioni_torta.[id_ordine_testata]) INNER JOIN ordine_posizione_prodotto ON ordine_testata.[id_ordine_testata] = ordine_posizione_prodotto.[ordine_testata]
    WHERE (((ordine_testata.id_ordine_testata) Like [Inserisci numero ordine]));
    
  • Re: Cancellazione record su più tabelle

    Io non so leggere in SQL, evidentemente non l'hai indicata. Leggi la guida in linea "query di eliminazione" che ti può suggerire su cosa fare in visualizzazione struttura.
  • Re: Cancellazione record su più tabelle

    Ma in realtà se faccio visualizza foglio dati funziona e mi chiede id ordine da eliminare e mi fa vedere i record. Ma se invece la eseguo mi compare l'errore : "specifica la tabella contenente i record da eliminare." Anche eseguita come query di selezione funziona..
    DELETE *
    FROM (ordine_testata INNER JOIN ordine_posizioni_torta ON ordine_testata.[id_ordine_testata] = ordine_posizioni_torta.[id_ordine_testata]) INNER JOIN ordine_posizione_prodotto ON ordine_testata.[id_ordine_testata] = ordine_posizione_prodotto.[ordine_testata]
    WHERE (((ordine_testata.id_ordine_testata)=[inserisci numero ordine]));
    help
  • Re: Cancellazione record su più tabelle

    Quando crei la relazione fra le tabelle utilizzando uno a molti applica l'integrità referenziate (quelle spunte che ci sono) ed eliminerà automaticamente quei record dove è presente quella chiave che hai eliminato.
  • Re: Cancellazione record su più tabelle

    asnaldo ha scritto:


    Il problema è che se uso la procedura guidata per la creazione del pulsante ma non funziona in quanto ci sono record in tabelle correlate compilati. Quindi per eliminare l'ordine dovrei entrare nelle due tabelle correlate, eliminare i record in entrambe e così facendo riesco ad eliminare
    Letta così, forse un pò superficialmente, assomiglia al problema che ho avuto anch' io. Nel mio caso avevo flaggato solo "applica integrità referenziale", mentre non avevo flaggato le due opzioni successive.... Flaggando tutto, ti dovrebbe poter far cancellare...
  • Re: Cancellazione record su più tabelle

    BetaRunner ha scritto:


    Quando crei la relazione fra le tabelle utilizzando uno a molti applica l'integrità referenziate (quelle spunte che ci sono)...
    Per applicare l'integrità referenziale è sufficiente la spunta sulla prima voce, non su tutte.

    BetaRunner ha scritto:


    ed eliminerà automaticamente quei record dove è presente quella chiave che hai eliminato.
    Questo avviene se si spuntano tutte e tre le voci. Si tratta di un'automatizzazione di alcune azioni che sarebbero comunque possibili con l'uso di codice (o query) appositamente studiate.

    Filippo70 ha scritto:


    Letta così, forse un pò superficialmente, assomiglia al problema che ho avuto anch' io. Nel mio caso avevo flaggato solo "applica integrità referenziale", mentre non avevo flaggato le due opzioni successive....
    Anch'io l'ho letta così. Non so se effettivamente succederà, non mi affiderei mai ad una procedura guidata basata su una query parametrica dove c'è un LIKE che con l'asterisco restituisce tutti i record. Corre l'obbligo di precisare che

    Filippo70 ha scritto:


    Flaggando tutto, ti dovrebbe poter far cancellare...
    ... ti dovrebbe poter far cancellare... tutto, forse pure troppo. L'importante è sapere il rischio che si corre.
  • Re: Cancellazione record su più tabelle

    Integrità referenziale certo che c'è ma cmq l'eliminazione non me l'ha fà..
    devo provare a flaggare tutte e tre le voci ?

    dato che non riuscivo con la query di eliminazione ho provato con sql ma non ne esco..
  • Re: Cancellazione record su più tabelle

    Io ti consiglio di flaggare tutte e 3 le voci.
    Anche se non mi pare che il problema risieda lì.
    Devi leggere attentamente le istruzioni passo passo della guida in linea sull'argomento "query di eliminazione". È vero che non parla in SQL, ma talvolta molte soluzioni le trovi più a portata di mano in visualizzazione struttura.
Devi accedere o registrarti per scrivere nel forum
9 risposte