Comparazione tabelle senza ID univoco

di il
5 risposte

Comparazione tabelle senza ID univoco

Prima di tutto, essendo il mio primo post, saluto tutti i membri del Forum.

Mi chiamo Andrea e non sono un programmatore professionista. Ho comunque una buona conoscenza di Access e di VBA. Ho provato a cercare nel forum ma senza successo.

Sto incontrando un problema che, prima di iniziare a percorrere strade sbagliate, condivido con chi vorrà aiutarmi.

Al lavoro usiamo un programma che esporta in un file di testo una serie di "attività" che si riferiscono a dei prodotti ordinati dai nostri clienti. Purtroppo non abbiamo accesso a questi dati se non tramite queste procedure di esportazione il cui risultato, ahimè, non contiene nessun campo che posso gestire come una chiave univoca per identificare i vari records.

Date le attività esportate, comunque, vorrei riuscire ad associare ad ogni record esportato una serie di "sotto attività" che manterrei e aggiornerei in Access/Excel. Per fare questo, chiaramente, devo riuscire ad accodare nuovi records e aggiornare i preesistenti via via che nuove esportazioni vengono fatte.

Devo, in sostanza, mantenere un archivio parallelo aggiornandolo di volta in volta.

Con un campo univoco sarebbe semplice ma dato che questo campo non è presente nei dati esportati, mi trovo a dover tentare una comparazione di ogni valore presente nei campi esportati con il campo corrispondente nella tabella di destinazione (Nomecliente con NomeCliente,Prodotto con Prodotto,Descrizione con Descrizione, etc. etc.). Il risultato di questa comparazione sarebbe la necessità o meno di accodare un nuovo record alla tabella di destinazione in Access, di eliminare ciò che non è più presente nei dati esportati e, infine, di aggiornare i records esistenti ma che hanno delle differenze.

I campi sono una decina circa.

A Vs. giudizio quale potrebbe essere la via migliore?

Grazie in anticipo a chi vorrà aiutarmi.

Un saluto a tutti.

Andrea

5 Risposte

  • Re: Comparazione tabelle senza ID univoco

    Vigand ha scritto:


    mi trovo a dover tentare una comparazione di ogni valore presente nei campi esportati con il campo corrispondente nella tabella di destinazione (Nomecliente con NomeCliente,Prodotto con Prodotto,Descrizione con Descrizione, etc. etc.)
    Perché parli di una sola tabella? L'elenco campi che fornisci mi fa pensare a una struttura su più tabelle. Occorre normalizzare i dati prima di confrontarli e decidere il da farsi.
  • Re: Comparazione tabelle senza ID univoco

    Per prima cosa dovresti dire quali sono tutti i campi dati che importi e non etc. etc.
  • Re: Comparazione tabelle senza ID univoco

    L' esportazione dal sistema gestionale genera 2 archivi (2 files di testo ma questo poco importa):

    Il primo archivio contiene i riferimenti dei contratti con il numero del contratto quale ID Univico.
    Il secondo archivio, che è quello dove non c'è un campo univoco per ogni riga, contiene i dettagli delle attività per ogni singolo contratto.

    La struttura di questo secondo archivio, nei campi fondamentali, è:

    Contratto (equivale al numero del contratto dell' archivio contratti)
    CodCliente (Codice del cliente)
    Dettaglio (Codice del prodotto)
    Tipo (Tipologia del prodotto)
    Quantità
    Responsabile
    DataConsegna
    Stato (Stato della riga: "Aperto", "Chiuso", etc.)
    DataScadenza

    Tenendo come riferimento l' esportazione dei dati dal gestionale sulla cui struttura, purtroppo, non ho modo di intervenire, vorrei implementare un sistema che tenga traccia delle attività svolte per ogni "riga" di ogni contratto. Per fare questo, ovviamente, devo mantenere un archivio delle righe dei contratti a cui associare le attività, preoccupandomi che tale associazione si riferisca in modo univoco ad una determinata riga e non ad un' altra. Inoltre devo mantenere le righe dei contratti aggiornate via via che vengono eseguite nuove esportazioni dal sistema gestionale dell' azienda.

    La logica prevederebbe di mantenere localmente una tabella in Access a cui accoderei nuovi record, eliminerei record e aggiornerei record in funzione delle progressive esportazioni che verrebbero fatte. Questa tabella in locale mi preoccuperei di crearla e mantenerla con un "IDriga" univoco in modo da poter sviluppare il resto di conseguenza.

    Non essendoci, tuttavia e come vedete, un "IDriga" sui dettagli dei contratti che vengono dall' esportazione dal gestionale, l' unico modo che mi viene in mente è fare una camparazione puntuale di ogni record dell' esportazione con il record corrispondente della tabella in locale per cercare eventuali differenze e gestirle conseguentemente.

    Spero di essere riuscito a spiegarmi.

    Grazie.

    Un saluto
  • Re: Comparazione tabelle senza ID univoco

    Direi che l'univocità del record possa essere data da seguenti campi
    • Contratto (equivale al numero del contratto dell' archivio contratti)
    • CodCliente (Codice del cliente)
    • Dettaglio (Codice del prodotto)
    quindi per l'aggiornamento dei dati provenienti dal sistema gestionale, INSERT INTO e UPDATE e DELETE, puoi ricorrere ad una query dove relazionare la tua tabella con quella dove sono temporaneamente i dati del gestionale tramite i campi sopra menzionati.
    Naturalmente, come hai detto tu, nella tua tabella dovrai aggiungere un campo IDRiga, di tipo Numerazione automatica e Chiave primaria.
    Poi sfrutterai questo campo IDRiga poter sviluppare il resto.
  • Re: Comparazione tabelle senza ID univoco

    Grazie per l' aiuto.

    Purtroppo niente evita che, per un singolo contratto, ci siano più righe riferite allo stesso prodotto e questo mi impedisce di considerare questo campo come possibile parte di una chiave di per sè univoca.

    Potrei, eventualmente, aggiungere in fase di importazione in Access il valore della data, dell'ora, del minuto e dei secondi dell' importazione e aggiungere questo valore dentro alla chiave univoca avendo poi Contratto/Codice Cliente/Dettaglio del prodotto/Data/ora-minuti-secondi di creazione del record.

    Non mi suona molto bene ma forse potrebbe funzionare.

    Che ne dici?

    Un saluto

    Andrea
Devi accedere o registrarti per scrivere nel forum
5 risposte