Selezione Record in base al Valore dei Campi

di il
19 risposte

Selezione Record in base al Valore dei Campi

Salve, sono un nuovo iscritto e mi chiamo Leonardo.
Premetto che non ho quasi nessuna conoscenza di Access.
Il mio problema è il seguente:
Devo elaborare e ripulire una grande quantità di dati, circa 700.000 record con 5 campi.
Attualmente ho sviluppato il tutto in Excel ed utilizzando una lunga serie di Macro, riesco a elaborare tutto quello di cui necessito. Il problema è la pesantezza. Essendo una grossa quantità di dati, Excel, spesso, si blocca e non va avanti.
Vorrei provare a realizzare il tutto in Access ma sono mancante delle basi, figuriamoci il resto!

In Access importo dei dati in una tabella, da un file esterno.
La tabella è composta da ID, Campo1, Campo2, Campo3, Campo4 e Campo5

Il Campo1 è un campo ORA (hh:mm:ss)
Il Campo2 è un campo DATA (dd:mm:hhhh)
Il Campo3 è un campo TESTO
Il Campo4 è un campo TESTO
Il Campo5 è un campo TESTO

Dovrei creare una nuova tabella che contenga i campi 1, 2, 3, 4, 5 selezionando i dati del Campo3, cioè, prendere tutti quei Record che contengono in Campo3 un determinato dato.
I codici contenuti in Campo3 sono circa 230 mentre quelli da selezionare sono circa 85
Esempio: Se Campo3="01.201.7" o Campo3="01.001.1" o ...ecc. copia i Campi 1, 2, 3, 4, 5 nella nuova tabella altrimenti no.

Ora le cose si complicano un pochino.
Una volta fatta la nuova tabella dovrei crearne un'altra analizzando i dati della tabella appena creata, in questo modo:

Creare un nuova tabella che contenga i campi 1, 2, 3, 4, 5 della tabella appena creata facendo il seguente controllo:

Esempio:Se il Campo3="01.201.7" e il Campo4="0" e il Campo3 del record successivo ="01.001.1" e il Campo4 del record successivo ="1" o Se il Campo3="01.001.1" e il Campo4="1" e il Campo3 del record precedente ="01.201.7" e il Campo4 del record precedente ="0" o Se ....ecc....copia i campi 1, 2, 3, 4, 5 nella nuova tabella altrimenti no.

Ovviamente come detto precedentemente le variabili non sono solo 2 come nell esempio ma circa 85.

Spero di essere stato chiaro e che qualcuno di voi possa dedicarmi un po del proprio tempo per tentare di risolvere il mio problema.
Grazie in anticipo
Leonardo
Ah dimenticavo, la versione di Access che utilizzo è la 2010.

19 Risposte

  • Re: Selezione Record in base al Valore dei Campi

    Stai molto attento alle diverse logiche che sono alla base di Excel e Access. Excel è un semplice foglio righe e colonne, anzi celle visto che si possono modellare a piacimento. Access, quasi sempre, lavora su più tabelle che devono correlarsi tra loro e interagire secondo logiche di NORMALIZZAZIONE (che brutta parola!). Le tabelle di Access funzionano su record aventi campi omogenei.
    Fatta questa premessa di base, l'unica cosa che ho capito è che tu vorresti tutti i valori di Campo3 scritti una sola volta. Io penserei a:
    1. una "query di ricerca duplicati" sul Campo3
    2. poi vai in visualizzazione struttura query e troverai un campo dove c'è scritto >1. Sostituiscilo con >0 e il risultato sarà vedere i valori di Campo3 scritti una sola volta.

    Per tutto il resto non ho capito nulla.
  • Re: Selezione Record in base al Valore dei Campi

    Grazie OsvaldoLaviosa per le premesse.
    No quello che mi serve non è quelle che indichi tu.

    Per la prima devo creare una tabella analizzando una tabella già esistente nella quale ho importato una serie di dati.
    Esempio:
    Se il Campo3 contiene A o B o C o D o E o F...ecc, copia i Campi 1, 2, 3, 4, 5 (dove nel Campo3 sono presenti i dati ricercati) nella nuova tabella.

    Poi partendo dalla nuova tabella si deve creare una ulteriore tabella eseguendo il seguente controllo:

    Se il Campo3 del 1° Record contiene "A" e il Campo3 del Record successivo contiene "B" o il Campo3 del 1° Record contiene "B" e il Campo3 del Record successivo contiene "E" o Campo3 del 1° Record contiene "C" e il Campo3 del Record successivo contiene "F" ...ecc Copia i Campi 1, 2, 3, 4, 5 nella nuova tabella altrimenti niente. Questo controllo deve essere fatto per tutti i record presenti.

    Grazie
    Leonardo
  • Re: Selezione Record in base al Valore dei Campi

    Problema1)
    1. Crea una query dove importi la tua tabella e trascini tutti i campi
    2. In corrispondenza del Campo3 scrivi verticalmente i vari Criteri:
    Like "A"
    Like "B"
    Like "C"
    3. Presupponendo che tu abbia già NuovaTabella con i 5 campi predisposti, ma 0 record, trasforma la query in "query di accodamento" verso NuovaTabella.
    4. Esegui la query di accodamento una sola volta.

    Problema2)
    Troppo complicato da parte mia. Talvolta fai prima a risolvere per piccoli passi filtrando i valori parziali, piuttosto che tentare qualche formula o codice che dovrebbe fare quello che hai chiesto.
  • Re: Selezione Record in base al Valore dei Campi

    Per quanto riguarda il problema1 avrei risolto così, si fa per dire:

    SELECT [CARICARE I PRIMI DATI].Campo1, [CARICARE I PRIMI DATI].Campo2, [CARICARE I PRIMI DATI].Campo3, [CARICARE I PRIMI DATI].Campo4, [CARICARE I PRIMI DATI].Campo5
    FROM [CARICARE I PRIMI DATI]
    WHERE (Campo3="01.201.7") Or (Campo3="01.001.1") Or (Campo3="01.001.3") Or (Campo3="01.003.1") Or (Campo3="01.003.3") Or (Campo3="01.004.3") Or (Campo3="01.102.1") Or (Campo3="01.102.3") Or (Campo3="01.160.1") Or (Campo3="01.160.3") Or (Campo3="01.103.1") Or (Campo3="01.103.3") Or (Campo3="01.103.5") Or (Campo3="01.165.1") Or (Campo3="01.165.3") Or (Campo3="01.104.1") Or (Campo3="01.104.3") Or (Campo3="01.105.3") Or (Campo3="01.006.3") Or (Campo3="01.006.5") Or (Campo3="01.107.3") Or (Campo3="01.008.1") Or (Campo3="01.008.3") Or (Campo3="01.010.3") Or (Campo3="01.010.5") Or (Campo3="01.012.3") Or (Campo3="01.110.1") Or (Campo3="01.013.3") Or (Campo3="01.111.3") Or (Campo3="01.014.3") Or (Campo3="01.182.1") Or (Campo3="01.015.3") Or (Campo3="01.016.1") Or (Campo3="01.016.3") Or (Campo3="01.017.3") Or (Campo3="01.018.1") Or (Campo3="01.018.3") Or (Campo3="01.018.5") Or (Campo3="01.019.5") Or (Campo3="01.021.3") Or (Campo3="01.113.1") Or (Campo3="01.205.3") Or (Campo3="01.205.7") Or (Campo3="01.020.4") Or (Campo3="01.019.4") Or (Campo3="01.018.4") Or (Campo3="01.018.8") Or (Campo3="01.017.4") Or (Campo3="01.016.4") Or (Campo3="01.016.8") Or (Campo3="01.015.4") Or (Campo3="01.182.2") Or (Campo3="01.014.4") Or (Campo3="01.111.2") Or (Campo3="01.013.4") Or (Campo3="01.110.4") Or (Campo3="01.012.4") Or (Campo3="01.010.4") Or (Campo3="01.010.6") Or (Campo3="01.008.4") Or (Campo3="01.108.2") Or (Campo3="01.107.4") Or (Campo3="01.006.4") Or (Campo3="01.006.6") Or (Campo3="01.105.2") Or (Campo3="01.104.4") Or (Campo3="01.104.6") Or (Campo3="01.165.2") Or (Campo3="01.165.4") Or (Campo3="01.103.2") Or (Campo3="01.103.4") Or (Campo3="01.103.6") Or (Campo3="01.160.2") Or (Campo3="01.160.4") Or (Campo3="01.102.2") Or (Campo3="01.004.2") Or (Campo3="01.004.4") Or (Campo3="01.003.4") Or (Campo3="01.003.8") Or (Campo3="01.001.4") Or (Campo3="01.002.2") Or (Campo3="01.201.4") Or (Campo3="01.201.5") Or (Campo3="01.201.6");

    Il problema è che il sistema mi dice:
    "L'Espressione immessa supera il limite di 1.024 caratteri consentito per la griglia di struttura della query"
    Quale potrebbe essere la soluzione?

    Per il secondo problema resto in attesa di qualche proposta.

    Grazie
    Leonardo
  • Re: Selezione Record in base al Valore dei Campi

    A me sembra un enigma più consono ad Excel. A cosa ti serve creare un database in Access con soli codici, sigle?
  • Re: Selezione Record in base al Valore dei Campi

    Francamente a me andrebbe bene anche Excel (che attualmente sto usando), il problema, come spiegato nel post iniziale, è che vista la mole di dati (circa 700.000 record da elaborare) Excel si blocca per risorse insufficienti (non sempre, alcune volte riesco a finire il lavoro).
    So che Access è molto più snello ma non so da che parte rifarmi.
    Io so quello che devo ottenere (sono dati che mi servono per lavoro, non per sfizio) ma non come.
    È molto probabile che io utilizzi un modo di ragionare e un approccio Excelliano..., è proprio per questo che ho chiesto aiuto al Forum.

    Grazie
    Leonardo
  • Re: Selezione Record in base al Valore dei Campi

    Non puoi pensare di spostare in Access solo per il numero 700.000. Ci devi dire cosa vuoi archiviare in Access. Access svolge una funzione soprattutto archivistico/ripetitiva. Access produce Database. Di cosa parla il tuo futuro database?
  • Re: Selezione Record in base al Valore dei Campi

    Dici che ci devo rinunciare?
  • Re: Selezione Record in base al Valore dei Campi

    leonardocarrani ha scritto:


    La tabella è composta da ID, Campo1, Campo2, Campo3, Campo4 e Campo5
    Il Campo1 è un campo ORA (hh:mm:ss)
    Il Campo2 è un campo DATA (dd:mm:hhhh)
    Il Campo3 è un campo TESTO
    Il Campo4 è un campo TESTO
    Il Campo5 è un campo TESTO
    Intanto Campo1 e Campo2 in Access possono diventare un campo solo di tipo Data/Ora.
    Sarebbe interessante sapere cosa significano i valori dei restanti campi.

    leonardocarrani ha scritto:


    I codici contenuti in Campo3 sono circa 230 mentre quelli da selezionare sono circa 85

    leonardocarrani ha scritto:


    (Campo3="01.201.7") Or (Campo3="01.001.1") Or (Campo3="01.001.3") Or (Campo3="01.003.1") Or (Campo3="01.003.3") Or (Campo3="01.004.3") Or (Campo3="01.102.1") Or (Campo3="01.102.3") Or (Campo3="01.160.1") Or (Campo3="01.160.3") Or (Campo3="01.103.1") Or (Campo3="01.103.3") Or (Campo3="01.103.5") Or (Campo3="01.165.1") Or (Campo3="01.165.3") Or (Campo3="01.104.1") Or (Campo3="01.104.3") Or (Campo3="01.105.3") Or (Campo3="01.006.3") Or (Campo3="01.006.5") Or (Campo3="01.107.3") Or (Campo3="01.008.1") Or (Campo3="01.008.3") Or (Campo3="01.010.3") Or (Campo3="01.010.5") Or (Campo3="01.012.3") Or (Campo3="01.110.1") Or (Campo3="01.013.3") Or (Campo3="01.111.3") Or (Campo3="01.014.3") Or (Campo3="01.182.1") Or (Campo3="01.015.3") Or (Campo3="01.016.1") Or (Campo3="01.016.3") Or (Campo3="01.017.3") Or (Campo3="01.018.1") Or (Campo3="01.018.3") Or (Campo3="01.018.5") Or (Campo3="01.019.5") Or (Campo3="01.021.3") Or (Campo3="01.113.1") Or (Campo3="01.205.3") Or (Campo3="01.205.7") Or (Campo3="01.020.4") Or (Campo3="01.019.4") Or (Campo3="01.018.4") Or (Campo3="01.018.8") Or (Campo3="01.017.4") Or (Campo3="01.016.4") Or (Campo3="01.016.8") Or (Campo3="01.015.4") Or (Campo3="01.182.2") Or (Campo3="01.014.4") Or (Campo3="01.111.2") Or (Campo3="01.013.4") Or (Campo3="01.110.4") Or (Campo3="01.012.4") Or (Campo3="01.010.4") Or (Campo3="01.010.6") Or (Campo3="01.008.4") Or (Campo3="01.108.2") Or (Campo3="01.107.4") Or (Campo3="01.006.4") Or (Campo3="01.006.6") Or (Campo3="01.105.2") Or (Campo3="01.104.4") Or (Campo3="01.104.6") Or (Campo3="01.165.2") Or (Campo3="01.165.4") Or (Campo3="01.103.2") Or (Campo3="01.103.4") Or (Campo3="01.103.6") Or (Campo3="01.160.2") Or (Campo3="01.160.4") Or (Campo3="01.102.2") Or (Campo3="01.004.2") Or (Campo3="01.004.4") Or (Campo3="01.003.4") Or (Campo3="01.003.8") Or (Campo3="01.001.4") Or (Campo3="01.002.2") Or (Campo3="01.201.4") Or (Campo3="01.201.5") Or (Campo3="01.201.6");

    OsvaldoLaviosa ha scritto:


    Talvolta fai prima a risolvere per piccoli passi filtrando i valori parziali
    Crea tante piccole query spezzettando quella mole di valori che vedo.
    Se i valori di Campo3 sono tutti che cominciano per 01.1??.? oppure 01.0??.? puoi sfruttare i caratteri jolly per generalizzare il filtro.

    Rimango sempre nel totale incognito buio sul significato dei valori nella tabella, ma vorrei ricordarti che l'anima di Access si fonda su più tabelle collegate da relazioni. Io non vedo nulla di tutto ciò nonostante la gran mole di dati.
  • Re: Selezione Record in base al Valore dei Campi

    Scusa la mancata risposta ma sono stato assente.
    Allora il Campo1 e Campo2 sono ora e data e devono restare separati.
    Il Campo3 indica ciscun sensore lungo un determinato percorso.
    Il Campo4 indica se il segnale è in arrivo (1) o in uscita (0).
    Il Campo5 indiche quale oggetto è passato sul sensore.
    I codici rappresentati in Campo3 sono molti e devono essere selezionati sulla base dei criteri indicati in precedenza. Cioè facendo un controllo sul campo stesso ma del recordo precedente o successivo.
    Esempio:

    Se il Campo3="01.201.7" e Campo4="0" e il Campo3 successivo ="01.001.1" e il Campo4 successivo ="1" allora copia il Campo1 Campo2 Campo3 Campo4 e Campo5 in una nuova tabella.
    Così per tutti i record della tabella


    Questo no potrebbe essere possibile farlo con una SELF JOIN?
  • Re: Selezione Record in base al Valore dei Campi

    In una tabella come questa evidenzio quelli che sono i record che dovrebbero essere riportato in una nuova tabella:

    ID ORA DATA LOOP OTL TRAM
    1 5.42.44 01/03/2014 01.201.7 1 1
    2 5.42.46 01/03/2014 01.201.7 0 1
    3 5.44.20 01/03/2014 01.201.7 1 1
    4 5.45.58 01/03/2014 01.201.7 1 1
    5 5.45.59 01/03/2014 01.201.7 1 1
    6 5.46.10 01/03/2014 01.201.7 0 1
    7 5.46.35 01/03/2014 01.001.1 1 1
    8 5.46.37 01/03/2014 01.001.1 0 1
    9 5.46.49 01/03/2014 01.001.3 1 1
    10 5.46.51 01/03/2014 01.001.3 0 1
    11 5.47.52 01/03/2014 01.003.1 1 1
    12 5.47.54 01/03/2014 01.003.1 0 1
    13 5.48.38 01/03/2014 01.003.3 1 1
    14 5.48.39 01/03/2014 01.003.3 0 1
    15 5.48.51 01/03/2014 01.004.3 1 1
    16 5.48.52 01/03/2014 01.004.3 0 1


    la sequenza dei codici in Campo3 può essere solamente una essendo un percorso obbligato con una sola entrata e una sola uscita. Quindi tutti i record che non rispettano i criteri di sequenza non posso essere presi in considerazione...
  • Re: Selezione Record in base al Valore dei Campi

    leonardocarrani ha scritto:


    Il Campo3 indica ciscun sensore lungo un determinato percorso.
    Il Campo4 indica se il segnale è in arrivo (1) o in uscita (0).
    Il Campo5 indiche quale oggetto è passato sul sensore.
    Ma cosa ne sappiamo noi altri di come funzionano i tram? Se non spieghi la logica di fondo, nessuno (se non gli addetti ai tuoi lavori) sarà mai in grado di capire/interpretare quei valori.
  • Re: Selezione Record in base al Valore dei Campi

    Scusami OsvaldoLaviosa, ma non mi sembra molto carino il modo in cui mi rispondi.
    Hai espresso tu la curiosità di sapere cosa fossero i dati negli altri campi e io ho cercato di spiegarlo, forse male, forse sbagliando, ma ho cercato di farlo.
    Secondo me, poco importa che si parli di Tram, trenini o pomodori!
    Io ho gentilmente chiesto aiuto per sapere come si può fare per ottenere una certa procedura, non conoscendo come funziona Access, altrimenti non avrei chiesto aiuto.
    Non c'è da sapere come funzionano i Tram ma da capire come si può selezionare una serie di campi di un record sulla base dei valori di altri campi di altri record della stessa tabella.
    E se non si può fare nessun problema...basta che me lo dici con educazione.

    Grazie
    Leonardo
  • Re: Selezione Record in base al Valore dei Campi

    leonardocarrani ha scritto:


    Scusami OsvaldoLaviosa, ma non mi sembra molto carino il modo in cui mi rispondi

    leonardocarrani ha scritto:


    se non si può fare nessun problema...basta che me lo dici con educazione
    OK, scusa.
    Non volevo.

    Il problema consiste nel fatto che hai una serie di valori che non sappiamo come trattare. Access non è solo righe e colonne e nemmeno soltanto record e colonne. Nemmeno serie di valori messi a caso (per ora non ci ho trovato alcuna omogeneità). Mettere in piedi un database significa fare dei ragionamenti sul tipo di dati che si hanno a disposizione. Vedo che nessun altro utente ti risponde. Io non riesco ad andare avanti verso una direzione che forse tu hai in testa, ma che a me non è arrivata.
Devi accedere o registrarti per scrivere nel forum
19 risposte