Aggiornare una tabella con dati presi da un'altra

di
Anonimizzato12243
il
9 risposte

Aggiornare una tabella con dati presi da un'altra

Salve, mi stò avvicinando ora ad access e inizio ad avere i primi problemi.
Descrivo la mia situazione.
Ho una tabella (Abbonamenti) in cui sono presenti i dati relativi agli abbonamenti dei clienti ( Numero abbonamento, cliente, data inizio, durata in mesi).
Ho una seconda tabella (Prodotti Abbonamenti) in cui vi sono i prodotti che devono essere inviati al cliente nel periodo di durata dell'abbonamento ( Numero abbonamento, prodotto, numero unità totali da inviare nel periodo, periodicità di consegna).
Per periodicità di consegna si intende: Unica (il prodotto viene inviato una sola volta all'inizio dell'abbonamento), mensile, bimestrale, trimestrale, semestrale.
Le due tabelle sono in relazione e ho creato una maschera e sottomaschera per inserire i dati necessari.
L'intenzione sarebbe quella di inserire un pulsante in maschera che mi aggiorni automaticamente una terza tabella (Calendario) con le scadenze di consegna.
Esempio:
Abbonamento1 - Cliente1 - Datainizio(01/01/2013) - DurataMesi(12)
-- Prodotto1 - Unitadaconsegnare(1) - Periodicita(Unica)
-- Prodotto2 - Unitadaconsegnare(6) - Periodicita(Bimestrale)

Il tasto dovrebbe aggiornare il calendario inserendo un record per ogni prodotto nella data di inizio dell'abbonamento e record successivi in base alla periodicità di consegna dei prodotti.

Calendario:
01/01/2013 - Abbonamento1 - Prodotto1
01/01/2013 - Abbonamento1 - Prodotto2
01/03/2013 - Abbonamento1 - Prodotto2
01/05/2013 - Abbonamento1 - Prodotto2
........

Ho provato con INSERT INTO ma non riesco a venirne fuori.
Vi ringrazio anticipatamente per qualsiasi Vs. suggerimento
Grazie

9 Risposte

  • Re: Aggiornare una tabella con dati presi da un'altra

    Io non ho afferrato il problema.
    Siamo sicuri che il campo Periodicità deve stare nella tabella "Prodotti Abbonamenti"?
    Chi stabilisce la Periodicità? Il Cliente? Oppure l'Azienda? La periodicità può dipendere anche dal prodotto?
  • Re: Aggiornare una tabella con dati presi da un'altra

    La periodicità dipende dal prodotto associato all'abbonamento.
    Se un prodotto ha periodicità mensile và consegnato ogni mese, bimestrale ogni due mesi, ..... fino alla fine dell'abbonamento.
    Tutti i prodotti associati all'abbonamento, indipendentemente dalla loro periodicità, vanno consegnati la prima volta nella data di inizio abbonamento e poi va ripetuta la consegna in date diverse a seconda della singola periodicità del prodotto.
    Spero di essere stato più chiaro.
  • Re: Aggiornare una tabella con dati presi da un'altra

    OK sul fatto che la Periodicità è un concetto strettamente legato al Prodotto. Quindi il campo Periodicità deve stare nella tabella Prodotti.
    Però io ci vedo un campo IDProdotto nella tabella Abbonamenti. Quando un Cliente apre un Abbonamento, si abbona a un Prodotto...è così che stanno le cose?
    Scusa se ti faccio queste domande preliminari, ma mi servono per capire bene l'assetto delle tabelle, i loro reali significati e sfruttare il più possibile le relazioni.
  • Re: Aggiornare una tabella con dati presi da un'altra

    Hai pienamente ragione.
    Scusami se non sono entrato nel dettaglio della struttura delle tabelle.
    Provo ad essere più preciso.

    Tabella Abbonamenti:
    IDAbbonamento
    IDCliente
    DataInizioAbbonamento
    Durata

    Tabella Prodotti_Abbonamento:
    IDAbbonamento
    IDProdotto
    Quantita (Prodotti da consegnare x durata abbonamento)
    PeriodicitaConsegna (Unica, Mensile, Bimestrale, Trimestrale, Semestrale)

    Tabella Calendario:
    IDAbbonamento
    IDProdotto
    DataConsegna
  • Re: Aggiornare una tabella con dati presi da un'altra

    C'è qualcosa che non mi quadra nella tua struttura. Io vedrei invece il seguente scenario:

    tabella Clienti
    IDCliente
    Nome
    Cognome
    ...altri campi...

    tabella Prodotti
    IDProdotto
    DescrizioneProdotto
    Periodicità

    tabella Abbonamenti
    IDAbbonamento
    IDCliente
    IDProdotto
    DataInizio
    Durata (oppure DataFine)

    Ritengo giusto che Prodotti abbia una tabella a sè, così come è ovvio per Clienti.
    La tabella Abbonamenti diventa tabella di congiunzione fra Clienti e Prodotti.
    La tabella Calendario, per il momento mi sembra controversa: non sono ancora in grado di risponderti se deve essere una sottotabella di Abbonamenti oppure il frutto di una query se si considera che avresti i valori di DataInizio e Durata (oppure DataFine) che potrebbero garantire la gestione di questo problema!!!???
    Anche la Quantità penso possa essere calcolata in base a DataInizio, DataFine e Periodicità.
    Non ti nascondo che se ci aiutasse anche un altro utente a risolvere la matassa, mi sentirei più confortato in quello che ho detto. Però, prima di analizzare il passo successivo, occorre avere le idee chiare sulla struttura di base
  • Re: Aggiornare una tabella con dati presi da un'altra

    Non ti ho descritto tutta la struttura del database in quanto penso che sia ok, in realtà la problematica che incontro è la creazione del calendario.
    Comunque ho una tabella Clienti (tutti i dati Anagrafici), una Prodotti (in cui gestisco anche le giacenze), una Abbonamenti (dati relativi all'abbonamento), una Prodotti per Abbonamento (in quanto ci possono essere più prodotti per ciascun abbonamento) e una Calendario (in cui vorrei mettere, in base alla periodicità, le date in cui i prodotti devono essere consegnati, praticamente uno scadenziario di consegna) successivamente dovrà essere confermata la consegna e decrementata la giacenza del prodotto.
    Provo a riportarti un esempio pratico.

    Abbonamento
    IDAbb: 321 DataInizio: 01/01/2013 Durata: 12 (mesi) ....... e altre informazioni

    Prodotti per Abbonamento
    IDAbb: 321 Prodotto: 0001 Priodicità: Unica
    IDAbb: 321 Prodotto: 0002 Priodicità: Trimestrale
    IDAbb: 321 Prodotto: 0003 Priodicità: Semestrale

    Calendario (come dovrebbe risultare dopo la conferma dell'abbonamento)
    IDAbb: 321 Data: 01/01/2013 Prodotto: 0001
    IDAbb: 321 Data: 01/01/2013 Prodotto: 0002
    IDAbb: 321 Data: 01/01/2013 Prodotto: 0003

    IDAbb: 321 Data: 01/04/2013 Prodotto: 0002

    IDAbb: 321 Data: 01/07/2013 Prodotto: 0002
    IDAbb: 321 Data: 01/07/2013 Prodotto: 0003

    IDAbb: 321 Data: 01/10/2013 Prodotto: 0002

    IDAbb: 321 Data: 01/01/2014 Prodotto: 0002
    IDAbb: 321 Data: 01/01/2014 Prodotto: 0003

    In realtà come dici tu, la quantità è superflua, considerando la periodicità di consegna e la durata dell'abbonamento.
  • Re: Aggiornare una tabella con dati presi da un'altra

    MejGio ha scritto:


    Prodotti per Abbonamento (in quanto ci possono essere più prodotti per ciascun abbonamento)
    OK, allora hai ragione tu, non era proprio chiarissimo dall'inizio.

    La risoluzione del problema è molto complessa. Intanto ti consiglio di dare un'occhiata a questo sito dove puoi trovare tutte le sintassi corrette per fare riferimento ad ogni data calcolata in base ai criteri che tu hai esposto.
    http://office.microsoft.com/it-it/access-help/esempi-di-criteri-di-query-HA010066611.aspx
    dopo di che occorre mettere a punto una routine che analizzi tutti i record di "Prodotti per Abbonamento" e in base al valore (Unica, Trimestrale, ecc...) calcolare le scadenze volta per volta. Per fare questo ti serve un ciclo For...Next e una serie di azioni in Visual Basic che facciano questo...ma ahimè io qui non posso più aiutarti in quanto non so usare il Visual Basic.
    Qualcosa mi dice che si possa fare, in maniera surrogata, anche con delle azioni macro con dei principi di ragionamento analoghi ma con strumenti diversi in quanto le macro non possono giocare con le variabili e le costanti in maniera diretta, però si può pensare a un escamotage per memorizzare tali valori in questa o quella casella di testo di una maschera fittizia X creata apposta per l'occorrenza. Per me c'è da sbatterci un po' la testa...un utente più esperto saprebbe consigliarti meglio di me.
  • Re: Aggiornare una tabella con dati presi da un'altra

    Al di là del mio caso specifico, non riesco a trovare la sintassi corretta per il codice da usare per fare quanto segue:
    Scorrere i record di una TabellaA, associare alcuni valori dei campi a delle variabili e memorizzare tali valori in un nuovo record di una TabellaB, per poi passare al record successivo della TabellaA e ripetere l'operazione fino al verificarsi di una certa condizione.
  • Re: Aggiornare una tabella con dati presi da un'altra

    Nessuno ha un'idea di come posso risolvere il problema?????
Devi accedere o registrarti per scrivere nel forum
9 risposte