Importare dati da Excel in tabelle con relazioni

di
Anonimizzato12012
il
30 risposte

30 Risposte - Pagina 2

  • Re: Importare dati da Excel in tabelle con relazioni

    OsvaldoLaviosa ha scritto:


    Non capisco perchè non vuoi/puoi operare direttamente sulle tabelle permanenti, dopo il primo passaggio. Perdona la mia mentalità spudoratamente Access-iana.
    ?? scusa qual'è il primo passaggio ?

    Help mi sto perdendo in minkiate
  • Re: Importare dati da Excel in tabelle con relazioni

    Finora io l'ho capita così: tu hai
    - una tabella Excel (anzi foglio Excel)
    - una tabella Access provvisoria che ha la stessa faccia del foglio Excel
    - 2 tabelle Access permanenti, serie, correlate e coerenti alla logica Access.

    Il tuo problema è quello di trasferire dal foglio Excel dei dati che alla fine devono essere inseriti in maniera coerente alla logica Access nelle 2 tabelle permanenti, perchè così è più giusto che sia (io sono d'accordo). Per fare questo hai pensato bene di diluire la fatica facendo passare i dati attraverso la tabella provvisoria (ci può stare).
    Una volta fatto questo passaggio la prima volta, io butterei via il foglio Excel e la tabella provvisoria e continuerei in futuro a lavorare con le 2 tabelle permanenti.
  • Re: Importare dati da Excel in tabelle con relazioni

    Ed hai capito giusto,

    per quanto riguarda la tabella provvisoria la creo con l'imporazione automatica di access, in questo modo indipendentemente dalla posizione del file xsl su un nas o sul desktop io punto con le querry ad un oggetto interno al DB una volta 'digerita' la posso anche buttare

    il problema è che oggi ho una tabella provvisoria costruita in quel modo, a marzo ne avrò un altra e tra 90 giorni un altra ancora, questo accrocchio serve a evitare di fare il dataenter e a tenere i dati puliti ed organizzati come si deve.

    in mezzo ci sono io che costruisco XD
  • Re: Importare dati da Excel in tabelle con relazioni

    Finalmente, allora avevo capito bene dall'inizio. Io penso che ci sono molti modi per fare tutto quel passaggio. Bomberdini ha detto la sua, ma un po' non l'hai capita, in verità non l'ho afferrata neanche io, ma mi fido.
    Questa la mia soluzione molto spartana, per utenti principianti, ma ugualmente efficace.
    Dopo il passaggio da foglio Excel in tabella Access Provvisoria, tu hai il seguente scenario nella tabella Provvisoria:
    1 / Francesco / Totti / Roma
    2 / Francesco / Baccini / Genova
    3 / Nichi / Vendola / Bari
    4 / Giulio / Andreotti / Roma
    5 / Giorgio / Gaber / Milano
    6 / Antonello / Venditti / Roma
    7 / Antonio / Cassano / Bari

    Siccome le Città possono ripetersi (attualmente sono testo), pensi bene di strutturare come hai detto: la struttura delle 2 tabelle permanenti va bene.
    Come trasferire i dati dalla tabella provvisoria nelle 2 permanenti?
    1) Crea una "query ricerca duplicati" (esiste una procedura guidata) che cerca duplicati nella tabella Provvisoria sul campo Città, solo sul campo Città. Alla fine delle procedura nomina la query "CittàUnaVolta"
    2) Apri in visualizzazione struttura la query e troverai un campo dove trovi scritto >1
    3) Sostituisci >1 con >0 (in questo modo vedi anche le Città che compaiono soltanto una volta)
    4) Salva la query
    5) Apri la query "CittàUnaVolta" e seleziona la colonna Città. Tutta la colonna diventerà nera, Copia, chiudi la query
    6) Apri la tabella Città, seleziona la colonna Città e Incolla. Vedrai la lista delle Città con IDCittà vicino progressivo. (Questa operazione di Copia/Incolla si poteva realizzare anche con una query di accodamento sfruttando la stessa query "CittàUnaVolta")
    7) Vai in visualizzazione struttura tabella Provvisoria e aggiungi un campo Numerico che chiamerai IDCittà (non ti preoccupare se lo vedrai vuoto, aprendo la tabella)
    Salva la struttura tabella Provvisoria
    9) Apri una nuova query in visualizzazione struttura e importa le tabelle Provvisoria e Città.
    10) Unisci con una linea di join il campo Provvisoria.Città verso Città.Città
    11) Nella griglia in basso devi trascinare tutti i campi di entrambe le tabelle
    12) Imposta Ordinamento Crescente al campo Città.Città
    13) Salva con nome la query "X"
    14) Apri la query X, seleziona la colonna Città.IDCittà che diventerà tutta nera, Copia, chiudi la query X
    15) Apri tabella Provvisoria e Ordina Crescente il campo Città
    16) Seleziona la colonna IDCittà, Incolla
    17) Vai alla finestra Relazioni e imposta la relazione Città.IDCittà uno-a-molti con Provvisoria.IDCittà
    18) Vai in visualizzazione struttura tabella Provvisoria e elimina il campo Città (testo), Salva
    19) Rinomina la tabella Provvisoria in "Anagrafica" oppure "Persone".
    20) Come vedi non ho neanche utilizzato la prima tabella permanente, che puoi tranquillamente cancellare
    21) Cancella pure il foglio Excel e tutte le query precedentemente impostate
    22) D'ora in poi utilizza sempre queste 2 tabelle per inserire i tuoi dati.

    Ovviamente questa procedura la fai una volta sola. Ho fatto un test e funziona.
  • Re: Importare dati da Excel in tabelle con relazioni

    La mia non voleva essere una critica anzi mi scuso se e' stata intesa cosi

    Penso pero' che possa essere controproducente approcciare un problema
    se prima non si hanno chiari alcuni concetti che prescindono dal problema...

    Detto cio, qualunque cosa stiamo qua
  • Re: Importare dati da Excel in tabelle con relazioni

    Bene

    allora non ho letto per tempo i due messaggi precenti, comunque, mi sono concentrato sulla query di aggiornamento che aggiorna i dati già esistenti prelevandoli dalla tabella temporanea e li riporta nei record della tabella di archivio

    ?! domanda a Bomberdini
    la querry di check dovrebbe contenere un numero di righe pari al numero di righe in cui compare almeno un record non congruo tra le due tabelle giusto ???

    nel DB dove sto facendo le prove ho: 1485 righe per la tabella provvisoria e 1485 per quella definitiva
    essendo il contento delle tabelle identico, la querry mostra tutte le colonne delle due tabelle ed ha sempre 1485 righe.

    se può interessare questo è il codice che ho usato: (NB i nomi delle tabelle e i riferimenti sono stati cambiati perchè faccendo prove, può capitare di aver necessita di rifare tuto)

    cmq questa è la query di check che ho usato:
    • SELECT Foglio1.[Codice Interno Articolo], Articoli.[Codice Interno Articolo], Foglio1.[Riferimento Articolo], Articoli.[Riferimento Articolo], Foglio1.[Descrizione Articolo], Articoli.[Descrizione Articolo], Foglio1.[Costo Ultimo Acquisto Per Magazzino], Articoli.[Costo Ultimo Acquisto Per Magazzino], G_Merceologico.ID, Articoli.G_Merceologico_ID
      FROM (Foglio1 INNER JOIN Articoli ON Foglio1.[Codice Interno Articolo] = Articoli.[Codice Interno Articolo]) INNER JOIN G_Merceologico ON Foglio1.[Descrizione Gruppo Merceologico Acquisto] = G_Merceologico.[Descrizione Gruppo Merceologico Acquisto];
    e questa è la query che ho usato per l'aggiornamento della tabella di archivio
    • UPDATE [Confronto Provvisoria-Archivio] 
      SET [Confronto Provvisoria-Archivio].Articoli.[Codice Interno Articolo] = [Confronto Provvisoria-Archivio]![Foglio1]![Codice Interno Articolo], [Confronto Provvisoria-Archivio].Articoli.[Riferimento Articolo] = [Confronto Provvisoria-Archivio]![Foglio1]![Riferimento Articolo], [Confronto Provvisoria-Archivio].Articoli.[Descrizione Articolo] = [Confronto Provvisoria-Archivio]![Foglio1]![Descrizione Articolo], [Confronto Provvisoria-Archivio].Articoli.[Costo Ultimo Acquisto Per Magazzino] = [Confronto Provvisoria-Archivio]![Foglio1]![Costo Ultimo Acquisto Per Magazzino], [Confronto Provvisoria-Archivio].G_Merceologico_ID = [Confronto Provvisoria-Archivio]![ID]
      
      WHERE ((([Confronto Provvisoria-Archivio]![Articoli]![Codice Interno Articolo])<>[Confronto Provvisoria-Archivio]![Foglio1]![Codice Interno Articolo])) OR ((([Confronto Provvisoria-Archivio]![Articoli]![Riferimento Articolo])<>[Confronto Provvisoria-Archivio]![Foglio1]![Riferimento Articolo])) OR ((([Confronto Provvisoria-Archivio]![Articoli]![Descrizione Articolo])<>[Confronto Provvisoria-Archivio]![Foglio1]![Descrizione Articolo])) OR ((([Confronto Provvisoria-Archivio]![Articoli]![Costo Ultimo Acquisto Per Magazzino])<>[Confronto Provvisoria-Archivio]![Foglio1]![Costo Ultimo Acquisto Per Magazzino])) OR ((([Confronto Provvisoria-Archivio]![G_Merceologico_ID])<>[Confronto Provvisoria-Archivio]![ID]));
    le mille righe di criteri impostati servono a modificare solo le righe in cui compare un record non congruo evitando che al lancio della query vengano riscritte in automatico 1485 righe.


    Tabella Città

    OsvaldoLaviosa ha scritto:


    Ovviamente questa procedura la fai una volta sola. Ho fatto un test e funziona.
    purtroppo il controllo sarà da ripetere ogni volta che sarà necessario aggiornare i dati

    perchè se:

    OsvaldoLaviosa ha scritto:


    1 / Francesco / Totti / Roma
    2 / Francesco / Baccini / Genova
    3 / Nichi / Vendola / Bari
    4 / Giulio / Andreotti / Roma
    5 / Giorgio / Gaber / Milano
    6 / Antonello / Venditti / Roma
    7 / Antonio / Cassano / Bari
    nel aggiornamento successivo potrebbe uscire un cristiano da Padova


    quello dei nomi città univoci, è un problema che affronterò appena avrò sistemato le query che servono per allungare e aggiornare la tabella 'archivio'

    la tabella città dovro integrarla analogamente a come mi hai suggerito tu, ma con l'utilizzo di query e procedure automatizzate.

    perchè il file xls di cui abbiamo parlato non è una tabella statica e immutabile nel tempo, ma sono tante ed avranno in comune solo l'intestazione delle colonne.

    il motivo per cui desdero 'automatizzare' tutto nel limite delle mie capacità è frutto di una nozione molto semplice KISS - keep it simple stupid
    questo perchè credo che sia più semplice redare un DB (magari con qualche vizio di forma), piuttosto che fare il data enter (cosa che mi terrorizza)

    il PC è fatto per lavorare, ma non può zapare, quindi devo trovargli qualche cosa da fare
  • Re: Importare dati da Excel in tabelle con relazioni

    Ciao sulla query di check,

    ti consiglio di usare una LEFT JOIN sulla tabella master che nel tuo caso e' quella permanente.

    In questo caso se hai un record che non soddisfa il join ti troverai una riga con la parte dei dati della tabella di sinistra compilati e quella di destra lasciata in bianco

    In questo modo noterai subito chi non joina

    Per rendere la precedente query left join invece di inner join ti bastera' aprire la query in visualizzazione struttura, dovresti vedere le 2 tabelle collegate da una linea.

    Fai doppio click su quella linea ti apre una finestra e li metti :

    "includi tutti i dati di (tabella master per te) e solo quelli di eccetera" e la query diventera LEFT o RIGHT join a seconda di dove sta di posizione la tabella master
  • Re: Importare dati da Excel in tabelle con relazioni

    Mons ha scritto:


    Tabella Città
    OsvaldoLaviosa ha scritto:
    Ovviamente questa procedura la fai una volta sola. Ho fatto un test e funziona.

    purtroppo il controllo sarà da ripetere ogni volta che sarà necessario aggiornare i dati

    perchè se:
    OsvaldoLaviosa ha scritto:
    1 / Francesco / Totti / Roma
    2 / Francesco / Baccini / Genova
    3 / Nichi / Vendola / Bari
    4 / Giulio / Andreotti / Roma
    5 / Giorgio / Gaber / Milano
    6 / Antonello / Venditti / Roma
    7 / Antonio / Cassano / Bari

    nel aggiornamento successivo potrebbe uscire un cristiano da Padova
    Mi stai dicendo allora che vuoi tenerti come zavorra il foglio di Excel e la tabella Provvisoria.
    Il problema del cristiano da Padova è reale e altrettanto molto comune, ma ha una risoluzione molto più snella di tutto questo casino che state combinando con query lunghissime (scusa Bomberdini non ce l'ho con te), quando, nella peggiore delle ipotesi, si fa molto prima a fermare la tabella Persone, aprire Città, digitare Padova, chiudi e riapri Persone e riprendi a digitare. Ovviamente anche agire così è molto macchinoso, ma la risoluzione più elegante a questo problema va affrontata con una maschera Persone, un pulsante che apre Città dove digitare una eventuale nuova Città, poi un pulsante di ritorno che operi tutte quelle azioni a catena che ho descritto prima. Basta solo un po' di applicazione a mettere in piedi questo meccanismo e soltanto così (stiamo parlando di appena 2 tabelle correlate) entri a pieno titolo in ambiente Access.
    Piuttosto, ci sarebbe un altro piccolo problemino da affrontare. Hai detto che hai 1485 Persone e vattele a ricordare tutte chi sono, magari domani rischi di digitare un'altra volta Giorgio Gaber. Questo tu non lo devi permettere alla tabella Persone. Per fare questo consiglio un INDICE MULTICAMPO UNIVOCO nella tabella Persone impostato sulla combinazione campi Nome e Cognome. Così facendo, se domani digiti per dimenticanza un'altra volta Giorgio Gaber, Access ti invierà un messaggio di errore in cui in sostanza ti dice che quel nominativo non lo puoi digitare violando un principio di univocità che tu avevi preimpostato.

    Scusa Bomberdini se sto ignorando il tuo discorso, non l'ho capito (non è necessario che me lo rispieghi), ma spero che anch'esso vada nella direzione che sto indicando io.
    Ammetto di aver impostato il mio discorso autonomamente, cercando di capire il problema nel suo complesso.
  • Re: Importare dati da Excel in tabelle con relazioni

    Grazie per la risposta Osvaldo

    riguardo alla costruzione delle maschere, so che sono un ottima soluzione, ma non deve essere applicata in questo caso, sulle maschere vado già meglio, nella fase di importazione dei dati (questi dati) E' ASSOLUTAMENTE VIETATO INTERVENTO DI DATA ENTER

    per quanto riguarda questo discorso

    OsvaldoLaviosa ha scritto:


    Hai detto che hai 1485 Persone e vattele a ricordare tutte chi sono, magari domani rischi di digitare un'altra volta Giorgio Gaber. Questo tu non lo devi permettere alla tabella Persone.
    voglio precisare che quello nome/cognome/città è un esempio di tipo accademico e mi serve per esprimere meglio come intendo utilizzare i dati

    nell database di prova
    (mooolto piccolo 1485 record, questo per farti capire perchè non ci devono essere maschere o data enter che elaborino i dati che finiranno in una tabella di anagrafica)
    ho un campo 'codice interno' che è la chiave primaria utilizzata dal origine dati, riportando per analogia nel caso di nome/cognome/citta questo campo corrisponderebbe al CODICE FISCALE

    problema del foglio di exell
    ... sinceramente ti cheido di spiegarmi meglio questo 'problema' perchè io non lo vedo

    ho un origine dati che genera questo maledetto foglio di xls
    ottengo il file di XLS, mi passano il file via email,usb,floppy,nave o poste italiane non è importante il foglio di Exell non entra in Access come origine dati, lo importo ogni volta che ne ottengo una nuova versione (facendo una 'copia carbone')in una tabella nativa di access, (che grazie alla possibilità di salvare le procedure di importazione si chiamerà sempre TABELLAPROVVISORIA DI IMPORTAZIONE, tutte le query che costruisco puntano a quela tabella

    una volta importato il file XLS posso buttarlo
    una volta 'lavorati' e tradoti i dati posso buttare TABELLAPROVVISORIA DI IMPORTAZIONE

    EVENTO-> nuovo file di XLS

    una volta importato il file XLS posso buttarlo
    una volta 'lavorati' e tradoti i dati posso buttare TABELLAPROVVISORIA DI IMPORTAZIONE

    EVENTO-> nuovo file di XLS

    una volta importato il file XLS posso buttarlo
    una volta 'lavorati' e tradoti i dati posso buttare TABELLAPROVVISORIA DI IMPORTAZIONE

    capito
  • Re: Importare dati da Excel in tabelle con relazioni

    Mons ha scritto:


    voglio precisare che quello nome/cognome/città è un esempio di tipo accademico e mi serve per esprimere meglio come intendo utilizzare i dati

    nell database di prova
    (mooolto piccolo 1485 record, questo per farti capire perchè non ci devono essere maschere o data enter che elaborino i dati che finiranno in una tabella di anagrafica)
    ho un campo 'codice interno' che è la chiave primaria utilizzata dal origine dati, riportando per analogia nel caso di nome/cognome/citta questo campo corrisponderebbe al CODICE FISCALE
    Questo discorso non cambia la sostanza. Quello che finora avremmo chiamato IDPersona può essere tranquillamente sostituito dal Codice Fiscale essendo entrambi campi con valori univoci, quindi uno dei due può essere scelto come chiave primaria.

    Mons ha scritto:


    problema del foglio di exell
    ... sinceramente ti cheido di spiegarmi meglio questo 'problema' perchè io non lo vedo

    ho un origine dati che genera questo maledetto foglio di xls
    ottengo il file di XLS, mi passano il file via email,usb,floppy,nave o poste italiane non è importante il foglio di Exell non entra in Access come origine dati, lo importo ogni volta che ne ottengo una nuova versione (facendo una 'copia carbone')in una tabella nativa di access
    Questo è un altro problema che non hai mai esplicitato a chiare lettere. Ho sempre capito che il foglio di Excel fosse uno soltanto, il tuo, e basta. Purtroppo hai una rete di persone che ritiene convenevole scambiarsi quel tipo di dati in quella maniera. Siamo in un forum Access e mi sento di rispondere che ciò è errato in partenza. Penso che tu e tutti i tuoi amici utenti (via e-mail, pen-drive ecc...) dovreste usare come metro di paragone le tabelle di Access. Ma ho capito che il discorso sarebbe ancora più complicato, ecco perchè ci hai posto il tuo problema. A te piacerebbe se tutti questi passaggi fossero automatizzati: occorrerebbero lunghe liste in codice Visual Basic che fossero compatibili tanto per Excel quanto per Access: qua mi trovi totalmente impreparato.
    Io, volgarmente, di fronte a un problema come il tuo, mi limiterei a Copiare/Incollare di sana pianta le colonne da Excel in Access, almeno quelle testo Nome e Cognome......per le Città, potrei risponderti "idem" se solo considerassi il fatto che i NomiCittà sono anch'essi (per pura coincidenza) univoci. Credo, non ne sono sicuro al 100%, che se fai Copia/Incolla anche per le Città da testo-Excel in numerico-Access, l'operazione passa lo stesso, a patto che il campo Persone.IDCittà venga impostato come casella combinata che guarda Città.IDCittà e mostri esattamente il campo Città.
  • Re: Importare dati da Excel in tabelle con relazioni

    Molto bene !

    allora, mi prendo due righe per ricapitolare quello che vorrei fare
    ricevo periodicamente un file XLS contente dei dati proventi da un altro sistema, ogni volta il file può presentare nuove righe o alcune di esse potrebbero aver subito dei cambiamenti e altre potrebbero non essere più nell elenco.

    lo scopo è quello di raccogliere tutti i dati proveti da XLS e eleborali in Access per metterli in una tabella di 'anagrafica' in seconda forma normale.

    e ovviamente deve funzionare tutto in automatico (a prova di pirla)

    - ----- -

    l'importazione in modalità carta carbone del foglio di excell la fa access in automatico, basta salvare i passaggi

    sono riuscito a fare la query di controllo 'nuovi record' + quella di accodamento (funziona)
    sono riuscito a fare la query di controllo 'recod modificati' (funziona 70%) + quella di modifica (funziona)
    devo ancora fare la querry per accodare nuovi elementi alle tabelle legate da chiavi esterne
    (campo città) (0%)

    automatizzare il tutto, è stato semplicissimo, basta adare su macro inserire nel ordine correto: importazioni salvate..., le query per l'aggionamento e salvare

    per eseguire tutto basta richiamare la macro
    -------------------------------------------

    Problema query (quella al 70%)

    TAB A (provvisoria)
    TAB B (Archivio)

    *anche se i valori contenuti in TAB A cabiano ad ogni importazione le due tabelle hanno in comune una chiave candidata,differente da ID_TAB X che permette l'identifcazione correta dei valori da usare per l'aggiornamento delle singole righe.

    attualmente la query restituisce solo le righe delle tue tabelle in cui la chiave candidata è identica e almeno uno dei 'parametri accessori' risulta differnte

    non vengono però mostrate le righe dove anche solo uno dei parametri accessori contiene il valore 'NULL'

    come posso includere anche i record che presentano questo difetto ?

    Grazie in anticipo
  • Re: Importare dati da Excel in tabelle con relazioni

    Nuovo Post.

    allora provo a riassumere con esempi più chiari

    Tabelle da excell contiene i dati provenienti da un altro sistema (il contentuto e il numero di righe può variare,in ogni singolo file l'intestazione delle colone no) (viene gestito un solo file x volta )

    FILE EXCEL
    • 
      [DATI.XLS]
      
      NOME       | COGNOME    | CODFISCALE       | CITTA        |
      -----------+------------+------------------+--------------+
      Steven     | Seagal     | STEFANOGABIANO19 | Boston
      Mario      | Rossi      | REDMARYXXXXXXX88 | Parma
      Francesco  | Totti      | FRENKTOTXXXXXX96 | Roma
      Francesco  | Baccini    | FRANKKISSXXXXX10 | Genova
      Nichi      | vendola    | NIKYSELLXXXXXX88 | Bari
      Giulio     | Andreotti  | GIULIOANDREOTT11 | Roma
      Giorgio    | Gaber      | GHEORGHGABERXX44 | Milano
      Antonello  | Venditti   | ANTONYSELLERSX97 | Roma
      Antonio    | Cassano    | ANTONYCASSABOX12 | Bari
      
      
      
      tipo di dato: testo
    la tabella viene importata integralmente in access
    il risultato è questo:

    Tabella provvisoria access
    • 
      [TABPROV]
      
      ID  |NOME       | COGNOME    | CODFISCALE       | CITTA        |
      ----|-----------+------------+------------------+--------------+
      00  |Steven     | Seagal     | STEFANOGABIANO19 | Boston
      01  |Mario      | Rossi      | REDMARYXXXXXXX88 | Parma
      02  |Francesco  | Totti      | FRENKTOTXXXXXX96 | Roma
      03  |Francesco  | Baccini    | FRANKKISSXXXXX10 | Genova
      04  |Nichi      | vendola    | NIKYSELLXXXXXX88 | Bari
      05  |Giulio     | Andreotti  | GIULIOANDREOTT11 | Roma
      06  |Giorgio    | Gaber      | GHEORGHGABERXX44 | Milano
      07  |Antonello  | Venditti   | ANTONYSELLERSX97 | Roma
      08  |Antonio    | Cassano    | ANTONYCASSABOX12 | Bari
      
      ID: chiave primara automatica
      NOME: Testo, non indicizzato
      COGNOME: testo, non indicizzato
      CODFISCALE: testo (chiave primaria candidata) indicizzato SI duplicati ammessi NO
      CITTA: Testo, non indicizzato
    ora attraverso alcune query vorrei elaborare automaticamente la tabella access in due nuove tabelle la prima contente dati NOME COGNOME CODFISCALE e ID_Città e la seconda dovrà contenere solo ID + Città

    il contenuto delle due tabelle sarà il seguente:

    Tabella nomi access
    • 
      [TABNOMI]
      
      ID  |NOME       | COGNOME    | CODFISCALE       | ID_CITTA     |
      ----|-----------+------------+------------------+--------------+
      0X  |Steven     | Seagal     | STEFANOGABIANO19 | 1 (Boston)
      0Y  |Mario      | Rossi      | REDMARYXXXXXXX88 | 2 (Parma)
      0Z  |Francesco  | Totti      | FRENKTOTXXXXXX96 | 3 (Roma)
      0A  |Francesco  | Baccini    | FRANKKISSXXXXX10 | 4 (Genova)
      0B  |Nichi      | vendola    | NIKYSELLXXXXXX88 | 5 (Bari)
      0C  |Giulio     | Andreotti  | GIULIOANDREOTT11 | 3 (Roma)
      0D  |Giorgio    | Gaber      | GHEORGHGABERXX44 | 6 (Milano)
      0E  |Antonello  | Venditti   | ANTONYSELLERSX97 | 3 (Roma)
      0F  |Antonio    | Cassano    | ANTONYCASSABOX12 | 5 (Bari)
      
      ID: chiave primara automatica numerica (NB. [TABNOMI].[ID] non è riconducibile a [TABPROV].[ID])
      NOME: Testo, non indicizzato
      COGNOME: testo, non indicizzato
      CODFISCALE: testo (chiave primaria candidata) indicizzato SI duplicati ammessi NO
      CITTA: chiave estena, numerico
    Tabella Città
    • 
      [TABCITTA]
      
      ID_CITTA  | CITTA     |
      ----------|-----------+
      01        | Boston
      02        | Parma
      03        | Roma
      04        | Genova
      05        | Bari
      06        | Milano
      
      ID_CITTA: chiave primara automatica numerica
      CITTA: Testo indicizzato Si dupplicati ammessi NO
    query
    N.B.
    • per andare a scrivere o aggiornare un record della tabella [TABNOMI] partendo dalla tabella [TABPROV] è necessario ricostruire il parametro corretto da copiare in [TABNOMI].[ID_CITTA]
      es.
      [TABPROV].[CITTA]= (Boston)
      [TABNOMI].[ID_CITTA]= (1)

    allora, 2 query per accodamento, 1 restituisce tutte le righe della tabella [TABPROV] non presenti nella tabella [TABNOMI] la seconda li accoda nella tabella [TABNOMI]

    2 querry per l'aggiornamento

    Aiutatemi su questa query
    la prima deve restituire i record in cui [TABNOMI].[CODFISCALE]=[TABPROV].[CODFISCALE] e almeno uno degli altri parametri risulta differente o NULL

    la seconda deve sostituire gli elementi trovati
  • Re: Importare dati da Excel in tabelle con relazioni

    La nuova descrizione è molto più chiara. Resetto tutto e ripartiamo da capo.
    1) Il passaggio automatico da FoglioExcel in TABPROV sei riuscito a farlo: Giusto? Andiamo avanti.
    2) Il secondo passaggio da fare è quello di controllare se in TABPROV ci siano o meno Città Nuove che potrebbero non esserci in TABCITTA. Finchè non risolvi prima questo, non puoi subito accodare da TABPROV a TABNOMI. Allora:
    3) Query ricerca duplicati in TABPROV.Città: usa la procedura guidata, dicendo di visualizzare soltanto il campo Città. La query si chiamerà "ProvCittàUno". Vai in visualizzazione struttura ProvCittàUno e modifica il campo dove vedi scritto >1, da >1 in >0. Salva la query.
    4) Query ricerca dati non corrispondenti fra ProvCittàUno e TABCITTA: usa la procedura guidata sfruttando il campo Città. Salva con nome "ProvCittàUno non Città"
    5) Query di accodamento che prende "ProvCittàUno non Città" e accoda in "TABCITTA.Città": si chiamerà "PC1inC" (significa ProvCittàUno in Città). In questo modo hai aggiornato TABCITTA.
    6) Query di accodamento così congeniata:
    6.1 Importa in visualizzazione struttura nuova query: TABPROV e TABCITTA
    6.2 Unisci una linea di join da TABCITTA.Città in TABROV.Città
    6.3 Trascina nella griglia i campi TABROV.Nome, TABPROV.Cognome, TABPROV.CodFiscale, TABCITTA.ID_Città
    6.4 Questi 4 campi devono essere accodati alla TABNOMI rispettivamente in TABNOMI.Nome, TABNOMI.Cognome, TABNOMI.CodFiscale, TABNOMI.ID_Città
    6.5 Salva con nome la query di accodamento "TABPROVinTABNOMI"

    Il punto 6.2 fa leva sul fatto che il campo TABCITTA.Città è univoco (Indicizzato Sì, Duplicati non ammessi).
    Però temo che ci siano delle controindicazioni a tutto il discorso perchè tu hai detto che gradisci le tabelle TABCITTA e TABNOMI il più possibile integre e correttamente relazionate. Si dà il caso che tu, volta per volta, ricevi un FoglioExcel compilato da altre mani (immagino da utenti diversi). Che succede se una città come "Pieve di Cadore" viene digitata nel FoglioExcel
    oggi "Pieve di Cadore"
    domani "Pieve in Cadore"
    dopodomani "Pieve Cadore" ?
    Tu rischi di avere tre ID_Città diversi associati a una stessa Città (nella realtà).
    Oppure il contrario, esistono Comuni con lo stesso nome ma di province diverse.
    Questo è un puro problema di digitazione a monte. Tienine da conto, in quanto tu vorresti automatizzare tutto per evitare il Data-Enter manuale.
  • Re: Importare dati da Excel in tabelle con relazioni

    Query per accodamento Città : FATTO

    Osservazioni varie
    Soluzione dei poveri:
    il problema delle 'nuove citta' da inserire in [TABCITTA] prima di procedere con la 'digestione' dei dati può essere risolto in modo molto rapido e poco elegante, essendo un campo 'protetto' ( duplicati non ammessi) access protegge in automatico da valori duplicati quindi è possibile fare una query di accodamento direttamente [TABPROV].[CITTA] -> [TABCITTA].[CITTA]
    ho fatto alcune prove e in questo modo funziona lo stesso, ma per qualche motivo che non ho capito se una città è gia presente (ES ROMA) e viene infilata nella querry di aggiornamento il DB restituisce un errore per valore duplicato e dice (es 0 record aggiunti) però brucia un ID della tabella tante volte tanti quanti sono gli errori riportati dall' inserimento.

    visto che sono avido e non voglio spercare ID in vano ho fatto tutte le query per 'scremare i valori duplicati'

    OsvaldoLaviosa ha scritto:


    3) Query ricerca duplicati in TABPROV.Città: usa la procedura guidata, dicendo di visualizzare soltanto il campo Città. La query si chiamerà "ProvCittàUno". Vai in visualizzazione struttura ProvCittàUno e modifica il campo dove vedi scritto >1, da >1 in >0. Salva la query.
    ovviamente ho fatto altri esperimenti la colonna dove c'è il campo >1 impone una condizione 'esclusiva' che il campo deve rispettare, visto che funziona su un contatore progressivo se si mette >0 perde di significato, quindi è possibile cancellare tutta la colonna provato funziona

    OsvaldoLaviosa ha scritto:


    una città come "Pieve di Cadore" viene digitata nel FoglioExcel
    oggi "Pieve di Cadore"
    domani "Pieve in Cadore"
    dopodomani "Pieve Cadore" ?
    fortunatamente nel mio caso per fare le cose a prova di prila mi aiuta il fatto che i dati provengono da un altro sistema
    faccio un esempio di cosa può verificarsi

    vengono importati due nuovi record per una coppia di cognugi
    • [DATI.XLS]
      
      NOME       | COGNOME    | CODFISCALE       | CITTA        |
      -----------+------------+------------------+--------------+
      dina       | lampa      | LAMPADINAXXXXX37 | Pieve di Cadore
      dario      | lampa      | LAMPADARIOXXXX78 | Pieve in Cadore
      
      
    se si tratta di un errore saranno corretti a monte nel altro sistema e alla nuovo invio del file XLS il signor Lampa Dario andrà ad abitare a ' Pieve di Cadore' nella tabella città rimarra il record 'Pieve in Cadore' a cui non sarà collegato nessun dato.





    la querry di accodamento per le nuve righe [TABPROV] -> [TABNOMI] funziona già, anche se credo di aver usato una querry leggrmente differente

    la querry di aggiornamento (70%) [TABPROV] -> [TABNOMI] la riguardo con calma domani.
  • Re: Importare dati da Excel in tabelle con relazioni

    Mons ha scritto:


    il problema delle 'nuove citta' da inserire in [TABCITTA] prima di procedere con la 'digestione' dei dati può essere risolto in modo molto rapido e poco elegante, essendo un campo 'protetto' ( duplicati non ammessi) access protegge in automatico da valori duplicati quindi è possibile fare una query di accodamento direttamente [TABPROV].[CITTA] -> [TABCITTA].[CITTA]
    ho fatto alcune prove e in questo modo funziona lo stesso, ma per qualche motivo che non ho capito se una città è gia presente (ES ROMA) e viene infilata nella querry di aggiornamento il DB restituisce un errore per valore duplicato e dice (es 0 record aggiunti) però brucia un ID della tabella tante volte tanti quanti sono gli errori riportati dall' inserimento.
    È ovvio che Access ti invii quel messaggio di errore. Con quella query di accodamento, Access incontra "Roma" che esiste già e non può accodare in TABCITTA.Città. Come aggravante al problema, si crea proprio quel fastidioso salto della numerazione progressiva. Per ovviare a ciò, leggi bene il punto 2), poi i miei punti 3) e 4) vanno visti insieme. Forse sarebbe più logico eseguire prima il punto 4) e dopo il 3), ma la sostanza non cambia.

    Il sostituire il >1 in >0 è una bella scorciatoia che ho trovato io. Il primo passaggio (quello che genera il >1) proprio per definizione di "trova duplicati" va a cercare i record duplicati (le Città doppioni). Ma se da TABPROV appare soltanto un "Foggia", tu devi tenere conto anche di "Foggia", se non sostituisci >1 in >0 la query escluderà "Foggia".
Devi accedere o registrarti per scrivere nel forum
30 risposte