Grazie Giovanni,
i suggerimenti sono sempre ben accetti, specie da chi ha giusto
qualche anno di esperienza in più...
La mia conoscenza dei database è una semplice infarinatura tratta da
appunti di università e lettura dell'help di mysql.
Per la tesi avevo fatto un programma in visual basic che usava access
come base dati (giusto due o tre tabelle correlate tra loro), quindi
un po' di VBA lo digerisco senza grossi problemi.
I libri in inglese vanno benissimo.
Le esigenze che ho adesso, in termini di codice da scrivere sono
mooolto più semplici e peraltro dovranno rimanere tali, quindi
qualsiasi macro farò in futuro dovrà stare dentro un migliaio di righe
al massimo)
Scrivere software non è il mio mestiere ma saper fare qualche
programmino che mi semplifichi la vita farà sempre comodo, e poi,
sapere le potenzialità di certi strumenti può essere utile per
chiedere a qualcun altro di farlo per me :)
Mille grazie,
Leonardo
PS:
Se hai la curiosità di sapere che cosa ho tra le mani, ti ho scritto
due righe qui sotto (non posso entrare in dettagli, dato che si tratta
di lavoro, ma spero che basti):
ho un certo numero di sensori su un aereo, ognuno di questi fornisce
un segnale che viene campionato ad una certa frequenza e di tutto
quanto viene fatto una specie di indice che riporta i valori medio,
minimo e massimo all'interno di intervalli di tempo definiti durante
il volo.
Nella mia mente, la trasposizione in tabella era semplice nel caso del
solo valore medio:
il valore del campo i al record j è il valore medio del parametro i-
esimo nell'intervallo di tempo j-esimo.
Quando servono tutti e tre, si potrebbero
- triplicare i campi
- usare solo tre campi (min,med,max) e "trasporre" i dati avendo, i
record saranno [Numero Parametri] x [Numero intervalli di tempo]
- avere tre tabelle.
Ora, esiste già un sistema officiale di gestione molto efficiente (non
ho idea di che DB ci sia dietro), ma non è molto interattivo.
La mia intenzione era solo provare a sfruttare i grafici pivot di
access, con i quali si possono fare facilmente grafici scatter con una
certa libertà, per dare un'occhiata ai dati prima di usare il sistema
ufficiale.
Attualmente, mi faccio restituire un file di testo con i parametri e i
record che mi servono, lo importo in access e faccio i grafici.
Avevo già una specie di query che mi produceva un file di testo con
256 parametri e avevo cominciato ad usare quella.
La differenza tra tabelle mi serviva per avere la differenza tra
massimo e minimo di circa un centinaio di parametri per tutti i record
che avevo nel file di testo (cioè tanti).
La domanda sull'intestazione era legata al fatto che nel file di testo
ha tre righe di intestazione prima dell'inizio dei dati.
Guarda, già che ci sono, ne apprifitto per farti un altro paio di
domande un po' fuori tema access, magari sono fortunato
- non è che per caso conosci qualche bel programma (gratuito o meno)
per plottare i dati? tipo 2D, 3D + linee di livello, grafici scatter
il cui colore cambia con il valore di un parametro (chessò, immagina
la traiettoria dell'aereo colorata in base alla velocità...)
- mi avevano suggerito matlab, ma alla fine ho scoperto che per
gestire tali quantità di dati, dovevo comprare un apposito toolbox,
oppure usare una libreria di interfaccia con mysql. questa soluzione
non ho mai avuto il tempo di implementarla e testarla: per caso
conosci qualcuno che l'abbia mai provata?
Grazie ancora!
Post by TarimaCiao Leonardo,
anzitutto, capisco che la mole di dati che hai davanti sia, per così dire,
imbarazzante.
Tuttavia, pur non conoscendo il campo di applicazione a cui i tuoi dati si
riferiscono, stento a credere che debbano risiedere tutti in una sola tabella.
Access (come il fratello maggiore SQL Server), è un database relazionale.
Ed il primo passo per gestire efficacemente una base dati relazionale è di
normalizzare i dati.
Scusami se ti faccio la predica. Probabilmente queste cose le sai già.
Ma, sono più di vent'anni che lavoro con le basi di dati e rarissimamente mi
è capitato di avere una tabella con più di 50 campi.
Inoltre, la scelta se gestire i dati con Access o SQL Server dipende da
diverse considerazioni, fra le quali la mole è soltanto una di esse.
Per quanto riguarda i libri da consigliarti, ce n'è davvero tanti.
Dovresti dirmi se leggi in inglese, oppure solo in italiano e inoltre, se
vuoi approfondire la programmazione (VBA), oppure no.
Giovanni
Post by LeonardoTTMi sono inbattuto in questo limite giusto questa mattina infatti :)
In realtà i campi potrebbero essere ben più di 256, ma non mi resta
altro che rigirare tutto quanto, convertendo 255 campi in 255 record;
Facendo due conti, ora come ora, ho 50,000 record, facendo la
trasposizione me ne verrebbero 255*50,000=12,750,000....
mmm, Non ho ancora provato, ma credo che, comunque rigiro sti dati,
comincino a diventare un po tantini da tenere in una tabella sola.
Certo potrei smistarli su piùtabellee poi le query le faccio su una
tabella alla volta e unisco il risultato.
Mi rendo conto ora che sto tirando un po' la corda, anche se comunque,
questo è più che altro una valutazione iniziale di fattibilità.
Alla fine se dovrò gestire tutta sta roba, mi converrà passare a
qualcosa di più adatto... chessò, mySQL.
... Ma a quel punto scaricherò il barile a qualcun altro :)
Vorrei comunque approfondire un po' SQL e access per lavori più
piccolini, mi sai per caso consigliare un sito/libro per beginner e
uno intermedio?
grazie tante,
ciao,
Leonardo
Post by TarimaCiao Leonardo,
il numero massimo di campi (non di record) per tabella è di 255.
Ciao
Giovanni
Post by TarimaCiao Leonardo,
per quanto riguarda il massimo numero di records, credo che il limite sia la
dimensione del file .mdb: al massimo 2 Gb
Il numero massimo di record per tabella è di 255.
Di questi limiti sono abbastanza sicuro fino alla versione 2002.
Capisco che devi importare un file generato da un altro sistema, tuttavia
trovo inquietante l'eventualità di avere un numero di campi così elevato.
Access è un db relazionale. Hai pensato di normalizzare il db, dopo aver
importato i dati in una tabella di transito?
Infine, con VBA puoi sicuramente saltare le righe che vuoi, ma non c'è una
funzione specifica. Devi scrivere una routine usando le funzioni di accesso
ai file (Open, Write, Close). Se fai una ricerca con google, trovi
sicuramente qualche esempio.
Ciao
Giovanni
Post by LeonardoTTPost by TarimaCiao Leonardo,
se davvero le tretabellesono identiche, se tutti i campi sono numerici e
contengono dei valori diversi da Null, potresti fare un piccolo programmino
per fare ladifferenzadi cui hai bisogno, utilizzando un riferimento
numerico per individuare i campi.
Infatti, ci si può riferire ai campi delletabellein vari modi, uno dei
quali è
<Nome tabella>.Fields(n).value
Il primo campo di ogni tabella è il campo con ordinale zero e quindi, il suo
contenuto sarà: <Nome tabella>.Fields(0).value.
Il centesimo campo sarà: <Nome tabella>.Fields(99).value.
Sub ....
Dim i as Integer
Dim k as Integer
Dim rsA as DAO.Recordset
Dim rsB as DAO.Recordset
Dim rsC as DAO.Recordset
Set rsA = CurrentDB.OpenRecordSet(<Nome tabella A>)
Set rsB = CurrentDB.OpenRecordSet(<Nome tabella B>)
Set rsC = CurrentDB.OpenRecordSet(<Nome tabella C>)
Do Until rsA.Eof()
rsC.Edit
For i = 0 to 99
rsC.Fields(i).Value = rsA.Fields(i).Value - rsB.Fields(i).Value
Next i
rsC.Update
rsA.MoveNext
rsB.MoveNext
rsC.MoveNext
Loop
rsA.Close
rsB.Close
rsC.Close
Set rsA = Nothing
Set rsB = Nothing
Set rsC = Nothing
End Sub
Ciao
Giovanni
Post by LeonardoTTSalve a tutti,
sto cercando di valutare quanto più comodo sia access rispetto ad
ho duetabellecon gli stessi campi (un centinaio) e lo stesso numero
di record. Vorrei crearne una terza che abbia gli stessi campi e
record, ma i cui valori siano ladifferenzatra quelli di Tabella1 e
Tabella3.campo1 = Tabella2.campo1 - Tabella1.campo1
Tabella3.campo2 = Tabella2.campo2 - Tabella1.campo2
...
Tabella3.campo100 = Tabella2.campo100 - Tabella1.campo100
Purtroppo i campi di questetabellenon hanno un nome semplice come
campo1, campo2, campo3,...
Ho pensato addirittura di scrivere una query SQL usando un foglio di
lavoro excel come appoggio per comporla e poi copiare e incollare le
celle come testo in in una query access.
Sapete suggerirmi un metodo più rapido per farlo, con una query o con
una macro, senza scrivere 100 differenze?
- sapete se c'è un limite massimo di record e/o di campi in access per
una singola tabella?
- questetabellesono ognuna in un file di testo (che non creo io) e
hanno l'intestazione fatta di tre righe, come faccio a far digerire ad
access che solo la seconda riga è di intestazione e le altre due non
servono? Posso scrivere una macro che elimini le righe in più prima di
importare il file, ma mi chiedevo se access lo facesse già da solo...
Grazie mille a tutti,
Leonardo
Grazie Giovanni,
in effetti è la soluzione più immediata, dato che i campi mi servono
proprio tutti; anzi può pure essere che saranno anche di più in
prossimo futuro.
Sai per caso darmi una risposta anche alle altre due curiosità di cui
sopra?
In particolare, speravo di poter scegliere almeno quante righe saltare
prima di importare i dati sottostanti...
Sai se si può farlo con qualche funzione VBA anzichè usare
l'interfaccia grafica di access per l'importazione?
Grazie ancora,
Leonardo