Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

di il
19 risposte

Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

Buongiorno a tutti.
ho più copie di uno stesso database access 2003.
la prima copia me la tengo sul pc fisso e registro tutti i dati che vengono caricati durante la giornata sulle altre copie di database (queste altre copie vengono tenute su delle chiavette e vengono aggiornate in giro per la città. Poi mi vengono consegnate e mi scarico i dati.)
ho creato una query di accodamento per importare i dati aggiornati sul pc fisso. Vorrei evitare il copia e incolla.
Il problema è il seguente:
i dati sono registrati su due tabelle in relazione tra loro. Quando vado ad importare mi importa solo il rigo della prima tabella, trascurando i record della seconda tabella. (ad esempio, la prima tabella fornitori viene messa in relazione con tabella prodotti. Alla fine mi importa solo il primo rigo dei fornitori. )
ringrazio anticipatamente.
Marcello.

19 Risposte

  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    Devi fare due query:
    SQL: INSERT INTO SELECT
    https://www.w3schools.com/sql/sql_insert_into_select.asp

    La prima importa i fornitori, la seconda i prodotti.
    Ovviamente, se le chiavi primarie sono autoincrementate devi escludere dall'accodamento perché il sistema le genera in automatico, in questo caso devi elencare tutti i campi (meno la PK).

    Però potrebbe non essere così semplice, dipende da:
    - la relazione che c'è fra le due tabelle
    - se un fornitore è già presente o meno.

    Se tutti record sono nuovi, allora non ci dovrebbero essere problemi.
  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    Ho guardato il collegamento che mi hai incollato, però contempla l'accodamento di due tabelle che hanno campi similari . (non fa altro che aggiungere i dati dei consumatori a quelli dei fornitori)
    il mio caso è differente. ho due tabelle , in relazione uno a molti, dove sono elencati da una parte i fornitori, e nell'altra i prodotti che vengono distribuiti dai fornitori.

    Inoltre, come da te suggerito, quando ho creato la query di accodamento ho incluso tutti i campi tranne le chiavi principali (che sono autoincrementanti).
    Comunque sia mi incolla solo i record che appartengono alla prima tabella, ovverosia dei fornitori. I prodotti non me li incolla.
  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    O non hai letto con attenzione, oppure non hai capito.

    Ho parlato di DUE query!
    Il collegamento è quello giusto, fidati.

  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    Puoi descrivere tutti i campi di entrambe le tabelle e la relazione?
    Puoi raccontare meglio cosa devi accodare, magari con qualche record di esempio?
    Anche per me resta il dubbio: e se ti trovi di fronte a un IDFornitore nuovo?
  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    OsvaldoLaviosa ha scritto:


    Puoi descrivere tutti i campi di entrambe le tabelle e la relazione?

    l'ha già indicato: uno- a-molti; sapere i campi a cosa serve? A nulla.

    OsvaldoLaviosa ha scritto:


    Puoi raccontare meglio cosa devi accodare, magari con qualche record di esempio?

    deve accodare dei record, nulla di strano...

    OsvaldoLaviosa ha scritto:


    Anche per me resta il dubbio: e se ti trovi di fronte a un IDFornitore nuovo?

    Lo dovrà inserire, mi pare ovvio e scontato.
  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    Ecco un esempio di ciò che devo accodare:

    - id_fornitore - cognome_fornitore - nome_fornitore - part_iva_fornitore - citta_fornitore
    (AUTO_INCR) BIANCHI MARIO 000001111122223333 PAVIA
    - id_prodotto - NOME_PRODOTTO - PREZZO_EURO - MARCA
    (AUTO_INCR) DETERSIVO 5 DASH
    (AUTO_INCR) AMMORBIDENTE 3 VERNEL


    - id_fornitore - cognome_fornitore - nome_fornitore - part_iva_fornitore - citta_fornitore
    (AUTO_INCR) ROSSI MATTEO 00000333333444444 MILANO
    - id_prodotto - NOME_PRODOTTO - PREZZO_EURO - MARCA
    (AUTO_INCR) SAPONE_MANI 2 PALMOLIVE
    (AUTO_INCR) SAPONE_VISO 1 CLEO

    in questa maniera, quando vado a importare tramite query di accodamento, mi importa solo i due record dei fornitori, inserendo i dati di BIANCHI e di ROSSI.
  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    A me mi serve importare anche un solo fornitore per volta . solo che se importo solo un fornitore che ha , ad esempio 5 prodotti , mi importa per le stesse volte il nome del fornitore. Senza elencare i prodotti.
    spero di essere stato chiaro.
    grazie in anticipo
  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    marcello111 ha scritto:


    spero di essere stato chiaro.
    Per nulla.
    Devi mostrare le 2 query di accodamento, non possiamo indovinare da soli cosa hai scritto, non trovi?
  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    La query di accodamento che uso è la seguente:

    INSERT INTO fornitori (cognome_fornitore, nome_fornitore, part_iva_fornitore, citta_fornitore)
    SELECT fornitori1.cognome_fornitore, fornitori1.nome_fornitore, fornitori1.part_iva_fornitore, fornitori1.citta_fornitore
    FROM fornitori1 INNER JOIN prodotti1 ON fornitori1.id_fornitori=prodotti1.id_fornit

    questa sopra è la query di accodamento che mi accoda effettivamente i fornitori.
    come faccio per fare aggiungere i prodotti della tabella prodotti? Nella visualizzazione struttura aggiungo tutti i campi che mi interessano (dei prodotti) ma quando vado ad applicarla, mi cancella tutti i campi della tabella prodotti.
    come posso fare?

    p.s. : la tabella fornitori1 è quella che importa dai database che mi consegnano. dopodichè a questa applico la query di accodamento per accodare nella tabella fornitori.
  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    Perché mostri solo UNA query?

    Inoltre non è ben chiaro la questione sulla tabella fornitori1 che, a quanto sembra, è una seconda tabella del tuo db.
    Ma hai detto che devi importare dal db esterno?
  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    In pratica quello che sto facendo è questo:
    - importare da altri database "esterni" le due tabelle in relazione tra loro (tabella fornitori1 con tabella prodotti1) - questo perchè nel mio database non posso nominare due tabelle allo stesso modo.

    -dopodichè ho creato , all'interno del mio database principale, n.1 query solamente. Quella di accodamento che ti ho mostrato prima.

    esiste una soluzione più semplice a quella che ho scelto io? se ti va di suggerirmela va bene. anche perchè tanto lo hai capito per cosa mi serve.
  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    Ovviamente stai facendo un doppio lavoro, quindi inutile.
    Considerando anche il fatto che non potrai mai 'mantenere' le chiavi (PK e FK) che hai attualmente nelle due tabelle del db esterno; andranno ricreate dal sistema nel db locale, ex novo.

    Le 2 INSERT INTO (fornitori e prodotti) le puoi eseguire direttamente dal database esterno utilizzando la sintassi:
    INSERT INTO tabellaDestinazione (column1, column2, column3, ...)
    SELECT column1, column2, column3, ...
    FROM tabellaOrigine IN 'percorso_completo_database_mdb_esterno'
    WHERE condizione;
    Ora, come ti avevo già anticipato, vi sono due questioni da capire:
    1) accodamento FORNITORI
    a) se il fornitore è sempre nuovo, oppure
    b) il fornitore potrebbe già esistere
    Nel secondo caso devi utilizzare la condizione WHERE per escludere quelli già presenti.

    2) accodamento PRODOTTI
    devi prima acquisire l'IDFornitore creato, o esistente) per mettere in relazione il prodotto con il relativo fornitore,
    perché è palese che la PK della tabella Fornitori del db esterno non avrà alcuna utilità.
    Spero per te che tu abbia almeno un campo CodiceFornitore che ti permette di 'allineare' i Prodotti (del db esterno) con i relativi Fornitori (del db locale).

    Dato che tali informazioni non sono a noi note, non so se questa operazione sia fattibile senza l'ausilio di codice VBA.

  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    Buongiorno,
    ho applicato quello che mi hai detto.
    ho creato due query che mi accodano, una i record della tabella fornitori e l'altra i record della tabella prodotti.
    ho anche assegnato un numero distintivo per ogni record del fornitore ( li uso come fossero sempre diversi) in modo che , in un modo che devo ancora studiare, i record dei prodotti si vanno a sistemare nei relativi fornitori.
    sono tanto così dalla soluzione, ma siccome nella tabella prodotti ci sono chiavi esterne legate a tabelle dove sono contenuti i nomi dei prodotti, questo mi genera errore. se ho capito bene, nel trasferimento dei record prodotti, vengono spostati i numeri della chiave esterna. non so se sono stato chiaro. e questo mi genera un errore di violazione di chiave. come lo posso correggere e fare accettare i record dalla tabella??
  • Re: Creazione query di accodamento record appartenenti a due tabelle in relazione tra loro.

    In pratica sono molto vicino alla soluzione, ma qualche dettaglio mi impedisce di concludere il processo.
Devi accedere o registrarti per scrivere nel forum
19 risposte