Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

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

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

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

Postdi maxi » 15/11/06 01:10

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
maxi
Utente Senior
 
Post: 219
Iscritto il: 04/03/02 20:18

Sponsor
 

Postdi archimede » 15/11/06 09:33

Il mio consiglio è di fare una tabella unica strutturata esattamente come i tuoi fogli excel, cioè con tre campi Nome, Data, Valore (magari aggiungendo un campo chiave primaria di tipo Contatore).

Per caricare i dati, dai un'occhiata in File --> Carica dati esterni --> Importa.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi maxi » 19/11/06 19:13

Sto cercando di seguire il tuo consiglio. Grazie.
A questo punto, a parte alcune tabelle di dimensioni accettabili, avrei 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).

Ora 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 ritieni 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
maxi
Utente Senior
 
Post: 219
Iscritto il: 04/03/02 20:18

Postdi maxi » 20/11/06 00:50

OK, ce l'ho fatta, ignorate le domande inserite nel post precedente a questo
maxi
Utente Senior
 
Post: 219
Iscritto il: 04/03/02 20:18

Postdi maxi » 20/11/06 01:09

Ora invece ho il seguente problema.
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
maxi
Utente Senior
 
Post: 219
Iscritto il: 04/03/02 20:18

Postdi archimede » 20/11/06 09:26

maxi ha scritto:Quali campi devo raggruppare, come li devo raggruppare
Conosci a priori quanti e quali colonne (Abc, Def, ecc.) hai?

Alessandro

PS: con la mole di dati da te citata forse Access non è lo strumento più adatto.
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi maxi » 20/11/06 10:30

archimede ha scritto:PS: con la mole di dati da te citata forse Access non è lo strumento più adatto.
Speriamo in bene, anche xè non saprei cosa altro usare.
Cmq. ho visto che potrei fare 3 DB diversi, senza nessun problema, ed avrei in ogni DB 3 tabelle con max 500.000 records, ogni record di soli 4 campi. Quindi credo (spero) che Access regga, anche xè con ogni DB non dovrei cmq. superare il limite dei 2Gb.

archimede ha scritto:
maxi ha scritto:Quali campi devo raggruppare, come li devo raggruppare
Conosci a priori quanti e quali colonne (Abc, Def, ecc.) hai?

Per "semplicità" ho omesso questo particolare, nel senso che i dati da inserire nel Report (che poi dovrà essere esportato in Excel e quindi dovrà essere formattato tipo tabella Excel, con tanto di intestazioni di colonna: la prima sarà DATA, e le successive colonne avranno come intestazione i vari NOMI) dovrò ottenerli con apposita Query, quindi SICURAMENTE i Nomi saranno al massimo 255, visto che il limite di colonne in Excel è 256 e la prima colonna sarà già occupata dal campo DATA.

Nella Query che sarà l'origine dati del Report, inserirò un filtro che mi estrae dalla tabella dati principale di Access solo i NOMI che corrispondono ai criteri del filtro applicato.
Quindi, per collegarmi alla tua domanda, solo a questo punto saprò quanti NOMI dovranno essere presenti nel Report.
Invece fino a che la Query non verrà eseguita non sono in grado di sapere a priori quanti NOMI saranno estratti, ed ovviamente in base al filtro applicato (selezionato in base ai valori presenti in una elenco "a discesa") i NOMI estratti saranno ogni volta diversi, MA sempre inferiori a 256.
maxi
Utente Senior
 
Post: 219
Iscritto il: 04/03/02 20:18

Postdi archimede » 20/11/06 11:09

Allora la vedo dura.

Fossi in te proverei a fare una query "normale" (Data, Nome, Totale) e verificherei se in Excel esiste una qualche funzione (pivot o qualcosa del genere) per ottenere il layout desiderato DOPO l'export.

Ma davvero i tuoi utenti sono a loro agio a leggere un report con 255 colonne?

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi maxi » 20/11/06 11:51

archimede ha scritto:Allora la vedo dura.

... molto dura! :-|
archimede ha scritto:Ma davvero i tuoi utenti sono a loro agio a leggere un report con 255 colonne?

I dati esportati in Excel serviranno poi solo come base dati per i vari conteggi.
Gli utenti (= io :-) vedranno solo i conteggi riepilogativi generati da una serie di funzioni matematico/statistiche.
Poi nella realtà direi che ogni export Access -> Excel includerà al massimo 50 Nomi, quindi 51 colonne nel folgio Excel (compresa quella della DATA).
archimede ha scritto:Fossi in te proverei a fare una query "normale" (Data, Nome, Totale) e verificherei se in Excel esiste una qualche funzione (pivot o qualcosa del genere) per ottenere il layout desiderato DOPO l'export.

Pensavo proprio adesso, in effetti che 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.


Per quanto riguarda invece il discorso di fare poi la formattazione corretta dei dati in Excel, ho provato a studiarci molto, ma non ho trovato soluzione. Anche il discorso delle Tabelle Pivot credo serva a filtrare dati che sono già disposti in colonne, ma non a raggrupparli in colonne partendo da un layout a "righe".
Se poi tutto ciò è possibile col supporto VBA, questo no lo so, anche xè andrebbe oltre le mie conoscenze ... purtroppo.
maxi
Utente Senior
 
Post: 219
Iscritto il: 04/03/02 20:18

Postdi archimede » 20/11/06 12:37

Puoi provare questa query:
Codice: Seleziona tutto
SELECT Nome, Data, SUM(Valore) FROM Dati GROUP BY Nome, Data;
Per la parte Excel, apri un nuovo post specifico: magary Anthony47 o qualcun altro ti possono aiutare.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi maxi » 20/11/06 14:57

Mi sa che la cosa è fattible solo attraverso uno specifico Report.

Comunque ho provato il tuo SELECT.
In pratica anche invertendo ordine dei campi dopo istruzione "GROUP BY" non ne esce nulla di buono.
Ovvero appaiono i dati così come sono già memorizzati nella relativa tabella.

Se raggruppo per DATA ad es. esce:
“DATA, NOME, VALORE”


10/10/06, Abc, 150
10/10/06, Def, 50
10/10/06, Ghi, 76
11/10/06, Abc, 149
11/10/06, Def, 55
11/10/06, Ghi, 75



mentre invece la formattazione desiderata è:
“DATA, Abc, Def, Ghi, …”


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


Come noterai non ho usato l’espressione SUM(Valore) perché non devo sommare i valori, devo solo estrarli tali e quali e farli apparire disposti per righe (ognuno nella propria colonna di appartenenza relativa al NOME) in corrispondenza della relativa Data.

Altri suggerimenti?
maxi
Utente Senior
 
Post: 219
Iscritto il: 04/03/02 20:18

Postdi maxi » 22/11/06 01:20

RISOLTO!
Sono giunto alla soluzione del problema usando una Query a Campi Incrociati.
maxi
Utente Senior
 
Post: 219
Iscritto il: 04/03/02 20:18


Torna a Applicazioni Office Windows


Topic correlati a "[Access]Caricare dati in più tabelle con unica query???":


Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti