+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

[Access]Caricare dati in più tabelle con unica query???

  1. #1
    mrmaxi non è in linea Novello
    Non vorrei che il titolo del post fosse fuorviante, perché magari qualcuno ha una soluzione più semplice per risolvere il problema, che è il seguente.

    Partendo da un file Excel (in realtà i file sono molti e tutti con dati diversi, ma trovata la soluzione per uno il resto è scontato) che contiene moltissimi dati formattati come segue (lo scrivo come fosse un file ASCII ma sappiate che è un foglio Excel ed ogni dato è in una colonna ben definita, per un totale di 3 colonne ma con migliaia di righe):
    “NOME, DATA, VALORE”


    Abc, 10/10/06, 150
    Abc, 11/10/06, 149
    Abc, 12/10/06, 160


    Def, 10/10/06, 50
    Def, 11/10/06, 55
    Def, 12/10/06, 48


    Ghi, 10/10/06, 76
    Ghi, 11/10/06, 75
    Ghi, 12/10/06, 70

    Nota: praticamente ogni “NOME” presenta un valore ogni giorno diverso, ed i “…” stanno a significare che la base dati è molto + estesa di quanto non abbia riportato nell’esempio qui sopra.

    l’obiettivo è importare tutti i dati del suddetto file xls (ed anche quelli di tutti gli altri) in un Database Access.
    Più specificamente vorrei caricare (con un’unica query ?!?) i dati in più tabelle, una tabella per ogni “NOME”, ognuna della quali dovrà memorizzare record composti dai campi “NOME, DATA, VALORE”.
    In questo modo sarà quindi possibile associare delle informazioni supplementari ad ogni record di tutte le Tabelle “NOME” al fine poi di filtrare i dati, estraendo solo quelli corrispondenti ai criteri stabiliti, esportandoli (con un Report) nuovamente in formato Excel, cioè in un file (.xls) che dovrà essere così formattato:
    “DATA, Abc, Def, Ghi, …”


    10/10/06, 150, 50, 76, …
    11/10/06, 149, 55, 75, …
    12/10/06, 160, 48, 70, …

    Il file Excel così ottenuto presenta adesso una “DATA” unica per ogni record di ogni Tabella “NOME”. I “NOMI” sono stati quindi posizionati suddivisi per colonne (uno per colonna) piuttosto che per righe consecutive (con inutili e scomode ripetizioni), come lo erano nello schema di file che ho descritto all’inizio del post.

    In questo modo con il nuovo file Excel opportunamente formattato ed ottenuto a mezzo dei filtri applicati alla base dati presente in Access, sarei in grado di impostare “facilmente” in Excel tutte le formule matematiche ed i conteggi del caso.

    Infine, tanto per dare qualche ordine di grandezza della base dati, i tipi “NOME” da gestire sono circa 10.000, ed ogni Tabella “NOME” dovrà contenere circa 1.000 record.
    Quindi mole di dati colossale. Visto che le dimensioni del database saranno enormi, quello che mi è possibile fare è creare 3 database completamente diversi di circa 5.000, 2.000 e 3.000 “NOMI” ciascuno.

    ** DOMANDE: **
    1) Credete sia possibile gestire questa mole di dati, specialmente riguardo al discorso di un DB con 5.000 tabelle?
    E’ possibile creare una query collegando 5.000 tabelle (dove la chiave principale è il campo “NOME”)?
    La vedo un po’ dura la eventuale costruzione “grafica” della query, dove mi troverei a trascinare i campi chiave per creare le correlazioni tra 5.000 tabelle. Che ne dite?
    Che tempi di esecuzione è lecito attendersi per l’esecuzione di una query che “filtra” 5.000 tabelle?

    2) Forse è possibile ottenere il secondo file Excel descritto (coi “NOMI” suddivisi in colonne) senza creare tutte le tabelle di cui parlo o in modo + veloce e/o meno complicato? Come?

    3) Partendo dalla base dati presente nel primo file di Excel descritto, esiste qualcosa di “automatico” da impostare in Access per generare una tabella per ogni “NOME” piuttosto che creare manualmente tante tabelle tutte uguali, una appunto per ogni “NOME” (operazione che dovrà quindi precedere quella di “travaso” dei dati dal foglio Excel iniziale nella varie tabelle)?

    4) Problema principale: è tecnicamente possibile “travasare” i dati (magari con un’unica query), così come presenti nel primo foglio Excel, suddividendoli in base al campo “NOME” ed inserendoli ognuno nella propria Tabella “NOME”? Come?

    Grazie

  2. #2
    L'avatar di dragone bianco
    dragone bianco non è in linea Certosino
    tu vuoi importare tutto in Access o cosa??
    Utilizzando il VBA è possibile, Dopoa ver creato 2 tabelle vuote Riempirle con i dati dei vari file.

    Parliamo di file excesl contenenti diversi fogli. Tutti strutturato come il tuo esempio con solo 3 Colonne ben definite.

    Es Colonna.
    A contiene abc
    B contiene le date
    C contiene i valori

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  3. #3
    mrmaxi non è in linea Novello
    Il foglio Excel inizale è unico, o meglio ce se sono tanti ma formattati tutti alla stessa maniera:
    “NOME, DATA, VALORE”


    Abc, 10/10/06, 150
    Abc, 11/10/06, 149
    Abc, 12/10/06, 160


    Def, 10/10/06, 50
    Def, 11/10/06, 55
    Def, 12/10/06, 48


    Ghi, 10/10/06, 76
    Ghi, 11/10/06, 75
    Ghi, 12/10/06, 70

    Devo quindi importare i dati in una tabella Access (o meglio in + tabelle xè si tratta di 2,7 milioni di records!!).
    I campi sono quei 3 comunque.

    Poi farei una tabella NOME correlata alle precedenti, con campi:
    ID_NOME (Chiave, uguale al "NOME" della Tabella sopra)
    Descrizione
    ecc..
    ecc..

    Il problema è che smanetto un po' in Access, ma non so usare VBA!

  4. #4
    L'avatar di dragone bianco
    dragone bianco non è in linea Certosino
    i limiti di access sono solo 2GBite la grandezza massima del db

    Per Scrupolo ho provato acaricate 3.000.000 in una tabella
    Dove ho ripetuto per 3.000.000 il dato sottostante
    (nel campo 3 è una stringa di composta da 50A

    ID Campo1 Campo2 Campo3
    1 CASACASA 12/12/2006 50A
    Risultato un file da 921 Mb Solo con una tabella.
    Ogni file ha solo un foglio o come??

    é solo per sapere come impostare il tutto.

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  5. #5
    mrmaxi non è in linea Novello
    Riassumendo, anche alla luce del tuo test (grazie!) a questo punto farei 3 DB diversi, per contenere le dimensioni totali dei DB, e senza che questo mi crei limiti all’obiettivo della gestione dati.
    Il DB + grande dovrebbe avere, a parte alcune tabelle di dimensioni accettabili, una tabella che contiene circa 1,5 milioni di records (fissiamo questo numero come n. max records x tabella; e max 3 tabelle di questa dimensione in ogni DB).

    A questo punto potrei vedere di “scomporre” questa tabella “virtuale” (senza xò cerare record duplicati), in almeno altre 3 tabelle da circa 500.000 records ciascuna … e forse così già diventa gestibile il DB xè tu hai trovato circa 1Gb con 3 milioni di records. Anche xè poi devo tenere conto che l’esecuzione di query/report non mi impegni il pc x diverse ore!
    Nota: se riiteni che 1,5 milioni di records siano gestibili tramite query senza problemi e partendo da un'unica tabella, potrei tenere una solo Tabella DATI. Lo facevo solo eventualmente x velocizzare le query di ricerca/selezione su tale base dati (a parte che non so cosa ci guadagno xè in ogni caso ogni query deve comunque cercare i valori perlomeno in tutte e 3 le tabelle.)

    Tipi tabelle:
    1) Tabelle DATI: Nome, Data, Valore (ne farei 3 diverse, ma uguali come struttura dati)
    2) Tabella NOMI: Nome, Descrizione
    Nota: il campo ‘Nome’ è una sigla alfanumerica x cui mi servo della DESCRIZIONE per capire di cosa si tratta.

    Su base settimanale, partendo da una tabella di Excel con “Nome, Data, Valore”, dovrò importare questi 3 campi nella tabella, o meglio nelle 3 tabelle in questione.
    Se la tabella DATI fosse unica, e non fossero 3 come avrei intenzione di fare, uso una ‘Query di accodamento’ che si copia i dati dalla tabella di Excel e li travasa nella Tabella DATI (già tesato ed è tutto ok).
    Solo che adesso mi sono bloccato xè non riesco a creare una query adatta a travasare nelle 3 Tabelle DATI i dati presenti nell’unica tabella iniziale di Excel.
    Qualche suggerimento?

    Avevo pensato di creare un terzo campo (N°_Tabella) nella Tabella NOMI: Nome, Descrizione, N°_Tabella;
    in modo che mi fosse di aiuto per “indirizzare” i dati della tabella iniziale nella Tabella DATI corretta tra le 3 esistenti nel DB.
    Ipotizzando di avere 1.500 records nella Tabella NOMI, avrei pensato di ascociare il N°_Tabella=1 ai primi 500 record, il N°_Tabella=2 ai secondi 500 record, ed il N°_Tabella=3 agli ultimi 500 record.
    Può essere un’idea corretta? Ma poi mi blocco lo stesso nella costruzione della query adatta allo scopo.

    Inoltre ho il problema che non saprei come implementare questo controllo, che descrivo a parole:
    “travasa tutti i dati contenuti nella tabella iniziale di Excel, ognuno nella Tabella DATI corrispondente (nel caso vada bene l’idea sopra descritta dell’introduzione del campo di controllo: N°_Tabella), ma SOLO SE quel dato non è già presente nella relativa Tabella DATI (nel caso il dato fosse già presente sarebbe ok anche la sovrascrittura dello stesso; ma credo che in Access non sia possibile se non con una specificare query di aggiornamento)”.
    Qualche consiglio su come fare questa cosa?
    Anche se x limiti tecnici dovessi costruire/eseguire 3 differenti query, questo non sarebbe un problema visto che da menù potrei costruirmi un pulsante associato ad una macro che esegua consecutivamente una dopo l’altra tutte le eventuali tre diverse query.

    Se ciò non fosse possibile, si potrebbe ovviare caricando tutti i dati, sempre ognuno della sua Tabella DATI di destinazione, ed eseguendo poi una ‘query di ricerca duplicati’ ed unitamente di cancellazione di tali duplicati.
    La chiave univoca non duplicabile nella/e Tabelle DATI sarebbe “Nome+Data”.

    A parole sembra un discorso complesso ma in fondo si tratta “solo” di costruire una query.
    Grazie nuovamente

  6. #6
    L'avatar di dragone bianco
    dragone bianco non è in linea Certosino
    si tratta di costruire un codice VBA.

    VBA dovrà Aprire il file excel leggere i dati e distribuire su più tabelle i dati

    Per scrivere i dati nelle tabelle Utilizzi il dao.

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  7. #7
    mrmaxi non è in linea Novello
    OK, CE L'HO FATTA! ... ma usando semplicemente una query costruita graficamente e sfruttando l''idea menzionata al post precedente con un campo riservato ad una tabella prefissata per il travaso dati.

    Ora invece ho il seguente problema (da risolvere sempre senza usare VBA ... che non so usare).
    Nel DB ho una Tabelle DATI: “Nome, Data, Valore”; formattata come segue:
    “NOME, DATA, VALORE”


    Abc, 10/10/06, 150
    Abc, 11/10/06, 149
    Abc, 12/10/06, 160


    Def, 10/10/06, 50
    Def, 11/10/06, 55
    Def, 12/10/06, 48


    Ghi, 10/10/06, 76
    Ghi, 11/10/06, 75
    Ghi, 12/10/06, 70

    L’obiettivo è creare un REPORT che, per semplicità, abbia come origine dati la Tabella DATI sopra descritta, e che presenti un output formattato come segue:
    “DATA, Abc, Def, Ghi, …”


    10/10/06, 150, 50, 76, …
    11/10/06, 149, 55, 75, …
    12/10/06, 160, 48, 70, …

    Ovvero, per ogni DATA, devo avere sulla stessa riga i VALORI, incolonnati a seconda del NOME (che deve comparire come intestazione di colonna, esclusa la prima che è occupata appunto dalle DATE).
    Una volta estratti i dati in questo formato devo esportarli in Excel.

    DOMANDA:
    Quali campi devo raggruppare, come li devo raggruppare, ed in quali sezioni del Report dovrò farlo per ottenere il layout di output qui sopra descritto e pronto per l’esportazione in Excel?
    Grazie

  8. #8
    deidedeide non è in linea Scolaretto
    Ciao,
    se ho ben capito il tuo problema, io raggrupperei senz'altro per DATA, poi le colonne successive farei delle espressioni Iif.

    DATA | Abc: iif(NOME="Abc";VALORE;0) | Def: iif(NOME="Def";VALORE;0

    Raggruppamento | Somma | Somma

    ecc.
    altrimenti in Access esiste un modo più raffinato che sono le query a campi incrociati (oppure ti guardi la sintassi del comando sql TRANSFORM)

    Domanda: a cosa ti serve fare un report se poi devi esportare in Excel ? Non ti basterebbe una semplice tabella?

  9. #9
    mrmaxi non è in linea Novello
    Quote Originariamente inviato da deidedeide
    Domanda: a cosa ti serve fare un report se poi devi esportare in Excel ? Non ti basterebbe una semplice tabella?
    Ciao, probabilmente non mi sono espresso bene.
    La cosa è abbastanza semplice (x chi usa bene Access )
    Non devo fare nessuna Somma, devo solo creare una TABELLA (appunto), x poi esportarla in Excel e solo dopo fare tutti i conteggi del caso, ma in Excel.
    Quindi si tratta "solo" di raggruppare le informazioni che sono in una tabella principale di Access, formattati in 3 colonne (Nome, Data, Valore) come quoto qui sotto (ovviamente i Nomi sono molti e per ogni nome ho almeno 500 Date, equivalente circa a due anni di Valori per ogni Nome).
    “NOME, DATA, VALORE”


    Abc, 10/10/06, 150
    Abc, 11/10/06, 149
    Abc, 12/10/06, 160


    Def, 10/10/06, 50
    Def, 11/10/06, 55
    Def, 12/10/06, 48


    Ghi, 10/10/06, 76
    Ghi, 11/10/06, 75
    Ghi, 12/10/06, 70

    A questo punto dovrei creare un REPORT, come hai detto tu, raggruppato a livello principale sul campo DATA, in modo che l'output del Report (da esportare poi in Excel) sia formattato come vedi qui sotto:
    “DATA, Abc, Def, Ghi, …”


    10/10/06, 150, 50, 76, …
    11/10/06, 149, 55, 75, …
    12/10/06, 160, 48, 70, …

    Quindi come vedi, la nuova formattazione prevede che io abbia il campo DATA posizionato nella prima colonna ed in modo crescente.
    Poi per ogni riga DATA, dovrei avere sulla stessa riga l'elenco dei VALORI, affiancati uno dopo l'altro (ovviamente ognuno occuperà una sua colonna), rispettanto le intestazioni di colonna rappresentata dai relativi NOMI.

    Spero sia + chiaro ed aiuti meglio a focalizzare il problema

    DOMANDA:
    Premesso quindi che devo raggruppare sul campo DATA,
    dove devo fare il raggruppamento (in quale sezione del Report), e bisogna seguire qualche accorgimento particolare x fare tale raggruppamento?


    Grazie

    EDIT: pensavo proprio adesso, in effetti x risolvere il problema forse basterebbe solo una Query senza dover costruire per forza un Report.
    Infatti dovendo filtrare e formattare questi dati affinchè possano poi essere esportati in Excel, una volta che la Query idonea estrare i dati mi basterebbe esportarli direttamente in Excel, ed il gioco è fatto.
    Spero questa osservazione possa essere di ulteriore aiuto, anche x capire come costruire correttamente la Query.
    Ultima modifica di mrmaxi; 20-11-2006 11:28 

  10. #10
    deidedeide non è in linea Scolaretto
    Ok penso di aver capito.
    La mia risposta precedente presumeva che tu avessi un numero limitato di Nomi.

    Condizione:
    Per ogni DATA esiste uno e un solo VALORE per ogni NOME (giusto ?).
    Se ciò è vero, come ti dicevo devi creare una query a campi incrociati. La creazione guidata è abbastanza intuitiva. Di fatto devi pensare di avere il raggruppamento sulle righe (intestazioni di righe) dove andrai a raggruppare per DATA e contemporaneamente il raggruppamento sulle colonne (intestazioni di colonne), a quel punto il campo "calcolato" diventa VALORE e, se è vera la condizione di cui sopra, poco importa quale criterio di aggregazione gli dai (Max, Min, Primo, Ultimo).

    Ho creato una tabella di prova con i dati che hai fornito, poi ho creato la query con il wizard. L'istruzione SQL risultante è questa:
    TRANSFORM Max(TAB1.VALORE) AS MaxDiVALORE
    SELECT TAB1.DATA
    FROM TAB1
    GROUP BY TAB1.DATA
    PIVOT TAB1.NOME;
    
    Come vedi non ci sono tutti i nomi elencati, ma solo il riferimento al campo NOME, quindi il mio risultato con tre nomi:
    DATA		Abc	Def	Ghi
    10/10/2006	150	230	244
    11/10/2006	400	180	402
    12/10/2006	120	133	305
    
    dovrebbe essere possibile con n nomi.

    Spero di essere stato chiaro.

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Filtrare più tabelle in unica query
    Da entony80 nel forum Microsoft Access
    Risposte: 14
    Ultimo Post: 16-05-2015, 11:54
  2. Web query (Caricare dati da web)
    Da Sigigno nel forum Microsoft Excel
    Risposte: 0
    Ultimo Post: 22-12-2014, 15:04
  3. unica select su tabelle di vari database
    Da amolaplay nel forum Microsoft SQL Server
    Risposte: 1
    Ultimo Post: 23-05-2012, 09:37
  4. Caricare dati Access
    Da Gmotta nel forum Visual Basic .Net
    Risposte: 3
    Ultimo Post: 23-02-2010, 14:31
  5. [Access] Caricare dati da maschera
    Da Neffa nel forum Microsoft Access
    Risposte: 3
    Ultimo Post: 31-03-2005, 10:45