Inserire dati da una tabella all'altra

di
Anonimizzato13253
il
9 risposte

Inserire dati da una tabella all'altra

Salve,
Mi trovo con questo problema:
Ho una tabella generata da un sistema esterno, in cui ci sono inseriti gli ordini con le sue righe d'ordine.
Chimata Tabella Dettaglio in cui sono presenti tutti i dati degli ordini
Anno
N° ordine
Commessa
Vari altri campi e poi questi campi vengono ripetuti per ogni riga ordine

Premetto che la tabella Dettaglio no la posso modificare, perche' viene aggiornata periodicamente dal sistema

Ho creato una tabella Prova1
in cui devo andare ad inserire solo la testa dell'ordine:
Anno
N° Ordine
Commessa
poi devo andare a completare questa tabella con degli altri campi che si dovranno compilare a mano
es. Data fine commessa
un dato di verifica "si o no"
ed ecc.

Ho provato con una query, ma non ci riesco.
UPDATE Dettaglio SET Dettaglio.D_AnnoOrdine = [Prova1]![D_AnnoOrdine], Dettaglio.D_NumOrdine = [Prova1]![D_NumOrdine]
WHERE (((Dettaglio.D_AnnoOrdine)>="2013"));

Qualcuno mi sa aiutare, non sono molto pratico di Access.
Grazie

9 Risposte

  • Re: Inserire dati da una tabella all'altra

    Neanche io sono pratico di SQL, ma credo che si tratti di applicare una "query di accodamento". Leggo un UPDATE che mi fa sospettare una "query di aggiornamento"...non so...vado a naso. Io ti dico come fare in visualizzazione struttura query.
    1. Apri una query in visualizzazione struttura
    2. Importa la tabella che non puoi modificare
    3. Trascina nella parte inferiore almeno i campi interessati, cioè Anno, N Ordine, Commessa...se vuoi aggiungere altri campi (facoltativo)
    4. Clicca in alto sul tasto "Tipo di query" e scegli "Query di accodamento"
    5. Ti verrà chiesto su quale tabella vuoi accodare i record della query, quindi digita il nome Prova1
    6. Imposta i campi dove devono essere accodati Anno, N Ordine, Commessa (ovviamente gli omonimi)
    7. Esegui la query una volta sola.
  • Re: Inserire dati da una tabella all'altra

    Cosi avevo provato e funzionava, il problema e' che ogni settimana la tabella Dettagli viene aggiornata dal sistema e quindi se eseguo di nuovo la query, mi accoda tutti i dati e non solo quelli nuovi.

    Inoltre i devo filtrare e ottenere solo la prima riga dati e non tutte (che corrispondono ad ogni riga dell'ordine).

    l'istruzione che ho postato prima non e' nient'altro che il comando sql di una query di aggiornamento.
    Che se la eseguo mi da errore di violazione di chiavi.
  • Re: Inserire dati da una tabella all'altra

    Si tratta di modificare qualche dettaglio nella query di accodamento.

    pacman71 ha scritto:


    Cosi avevo provato e funzionava, il problema e' che ogni settimana la tabella Dettagli viene aggiornata dal sistema e quindi se eseguo di nuovo la query, mi accoda tutti i dati e non solo quelli nuovi.
    Fra i campi che hai (forse N Ordine), ce ne sarebbe uno che procede progressivamente Crescente? Se sì, sfrutta un filtro (rigo Criterio) su quel campo del tipo:
    >di un certo valore

    pacman71 ha scritto:


    Inoltre i devo filtrare e ottenere solo la prima riga dati e non tutte (che corrispondono ad ogni riga dell'ordine).
    Anche qui devi trovare un filtro adatto.

    Se ci dai un po' di liste dati di esempio potremmo capire meglio come funziona il tuo meccanismo.
  • Re: Inserire dati da una tabella all'altra

    D_AnnoOrdine D_NumOrdine D_RigaOrdine D_DataOrdine D_CdFornitore D_DesFornitore D_Commessa D_Acquisitore D_Cdparte
    1997 | 002265 | 001 | 27/11/1998 | F01026 | Pippo | EN6029 | TRAV | 19980323
    1997 | 002265 | 002 | 27/11/1998 | F01026 | Pippo | EN6029 | TRAV |
    1997 | 002265 | 003 | 27/11/1998 | F01026 | Pippo | EN6029 | TRAV |
    1997 | 002265 | 004 | 27/11/1998 | F01026 | Pippo | EN6029 | TRAV |
    1997 | 002265 | 005 | 27/11/1998 | F01026 | Pippo | EN6029 | TRAV |
    1997 | 002265 | 006 | 27/11/1998 | F01026 | Pippo | EN6029 | TRAV |
    1997 | 002265 | 007 | 27/11/1998 | F01026 | Pippo | EN6029 | TRAV |
    1997 | 002265 | 008 | 27/11/1998 | F01026 | Pippo | EN6029 | TRAV |
    1997 | 002265 | 009 | 27/11/1998 | F01026 | Pippo | EN6029 | TRAV |
    1997 | 002265 | 010 | 27/11/1998 | F01026 | Pippo | EN6029 | TRAV |
    1997 | 002265 | 011 | 27/11/1998 | F01026 | Pippo | EN6029 | TRAV |
    1997 | 003542 | 001 | 04/03/1999 | 273531 | Pluto | EN6029 | TRAV | 19980112
    1997 | 003542 | 002 | 04/03/1999 | 273531 | Pluto | EN6029 | TRAV |
    1998 | 000619 | 001 | 23/02/1999 | 203454 | Paperino | EN6029 | TRAV | 19980706
    1998 | 000619 | 002 | 23/02/1999 | 203454 | Paperino | EN6029 | TRAV | 19980706
    questi sono i dati della tabella Dettaglio
    Nell'Altra Tabella vorrei queste colonne da importare ed altre colonne che verranno digitate a mano:
    D_AnnoOrdine D_NumOrdine D_RigaOrdine D_CdFornitore D_DesFornitore D_Commessa
    1997 | 002265 | 001 | F01026 | Pippo | EN6029
    1997 | 003542 | 001 | 273531 | Pluto | EN6029
    1998 | 000619 | 001 | 203454 | Paperino | EN6029

    Ricordando che la tabella dettaglio, viene aggiornata da un sistema settimanalmente e quindi vorrei non dover fare questo lavoro ogni settimana.

    Spero di essere stato abbastanza esauriente, altrimenti fammi tutte le domande del caso.
  • Re: Inserire dati da una tabella all'altra

    Quest'ultima descrizione mi sembra esauriente.

    1. Per filtrare solo la prima riga, basta sfruttare il campo D_RigaOrdine con il criterio Like "001".
    2. Per filtrare solo quelli "da una certa data in poi", questo concetto devi chiarircelo meglio, perchè si tratterebbe di impostare un Criterio un po' più complesso che vada a far leva sulla Data Odierna Corrente che nelle espressioni si esprime Date().
    Dai un'occhiata a questo link per trovare la giusta espressione
    http://office.microsoft.com/it-it/access-help/esempi-di-criteri-di-query-HA010066611.aspx
    3. Una alternativa al punto 2. sarebbe quello di...lasciami ragionare per passi:
    - Una query che filtra solo gli 001 da Dettaglio (Query1)
    - Una "query ricerca dati non corripondenti" fra Query1 e Prova1 (Query2)
    - Trasforma Query2 in "query di accodamento". Se avrà record li accoderà, se non ci sono record dentro non accoderà nulla. Per automatizzare periodicamente il tuo accodamento, puoi decidere con una macro (o codice VBA) di eseguire Query2 di accodamento.
  • Re: Inserire dati da una tabella all'altra

    Premetto che potrebbe andare bene la soluzione che mi hai proposto e cerco di spiegartela come l'ho fatta:
    creata 1°query con i campi che mi servivano, filtrando il numero di riga like "001", ho messo anche un filtro anche sull'anno >= "2013", quindi ho l'elenco delle sole righe che mi interessavano.

    Creata 2°query di accodamento e mi crea la mia bella tabellina come la volevo.
    fin qui tutto ok

    adesso pero' iniziano i problemi
    lancio per la prima volta la 2°query e mi crea tutti i dati, visto che la tabella era vuota.
    se pero' la rieseguo mi accoda gli stessi dati e quindi mi ritrovo con una situazione doppia.
    Faccio esempio: alla prima esecuzione si creano 800 righe alla seconda mi ritrovo con 1600.
    Come posso ovviare?
  • Re: Inserire dati da una tabella all'altra

    Forse la mia esposizione ha creato qualche incomprensione. Va interpretata così:

    I punti 1. e 2. possono essere rappresentati da una sola query dove filtri 3 Criteri (con quello che hai aggiunto tu):
    Like "001"
    >=2013
    ???una espressione ancora da decifrare che gioca sulle date sfruttando Date().

    In alternativa ai punti 1. e 2. congiunti, proponevo interamente la soluzione nel punto 3. Nell'esporre il punto 3. ho preferito creare 2 query. Con un po' di destrezza probabilmente è possibile fare tutto in una query sola...ma ho preferito darti delle indicazioni logiche passo passo.

    Ripensandoci bene, la soluzione 3. dovrebbe funzionare meglio perchè, anche in caso di accidentale esecuzione più di una volta, la seconda volta, avendo già accodato prima, la "ricerca dati non corrispondenti" dovrebbe dare 0 record, quindi non accoderà nulla.
  • Re: Inserire dati da una tabella all'altra

    Ciao,
    Io per non saper ne leggere ne scrivere, ho usato proprio la seconda soluzione con 2 query:
    la prima una semplice query con cui ho filtrato le date e la prima riga di ogni ordine, e la con la seconda ho fatto la query di accodamento.

    al primo avvio della seconda query (la query di accodamento), funziona tutto, ma se la rilancio, mi accoda gli stessi valori del primo avvio, quindi mi ritrovo con: es. 100 righe la prima volta e 200 la seconda e cosi via se la lancio 4 volte mi ritrovo con 400 righe, cosa che non deve verificarsi, perche' non posso avere i valori doppi per evitare problemi di sovrapposizione.
  • Re: Inserire dati da una tabella all'altra

    Attento alla query di accodamento. Essa svolge due funzioni: la prima è quella di "query ricerca dati non corrispondenti". Provala così prima di eseguirla come "query di accodamento".
    Forse tu hai dei problemi nel decidere su quali campi occorre confrontare Query1 con Prova1. La procedura guidata di creazione "query ricerca dati non corrispondenti" opera su un solo campo...rileggendo con attenzione il tuo caso, forse occorre confrontare su più campi. A questo punto mi sfugge qualcosa che non conosco bene, potresti:
    A) Osservare la visualizzazione struttura della query dati non corrispondenti e provare a intuire come aggiustare anche per gli altri campi. Ho dato un'occhiata e la struttura indica i campi corrispondenti con un join e nella griglia ripropone il campo con una espressione "Is Null". Prova a aggiungere altre linee di join per più campi da verificare e aggiungi altri campi con "Is Null"
    B) Prova a sfruttare un solo campo, possibilmente univoco o particolarmente strategico che ti permetta di avere una ricerca dati non corrispondenti corretta. Se tale campo non ce l'hai, potresti sempre crearlo.
Devi accedere o registrarti per scrivere nel forum
9 risposte