Copia dati

di il
8 risposte

Copia dati

Ho due tabelle una chiamata testata con solo due campi : id_testata e data_scadenza. L'altra chiamata righe con tre campi: id_riga, id_testata, cliente, cod_prodotto, descrizione prodotto
La compilazione consiste nel inserire la data_scadenza della testata e poi nelle righe i campi sopra descritti.
Dovete considerare che i prodotti sono quasi tutti a scadneza mensili e quasi tutti i mesi saranno riacquistati gli stessi prodotti dallo stesso cliente.

Per evitare che ogni mese devo ricompilare tutto, vorrei che il mese successivo, in cui andrò a compilare la maschera (dove c'è la tabella testata e come sotto maschera la tabella righe) considerando che quasi sempre sarà uguale al mese passato, mi servirebbe avere un tasto copia in cui cliccandolo mi crea la stessa compilazione dei mese successivo per partire nella compilazione.

HELP

8 Risposte

  • Re: Copia dati

    asnaldo ha scritto:


    Ho due tabelle una chiamata testata con solo due campi : id_testata e data_scadenza. L'altra chiamata righe con tre campi: id_riga, id_testata, cliente, cod_prodotto, descrizione prodotto
    A me sembrano 5 quei campi (anche se il primo probabilmente è pk autoincrementante e il secondo è fk, pur sempre campi sono)
    ...

    asnaldo ha scritto:


    Per evitare che ogni mese devo ricompilare tutto, vorrei che il mese successivo, in cui andrò a compilare la maschera (dove c'è la tabella testata e come sotto maschera la tabella righe) considerando che quasi sempre sarà uguale al mese passato, mi servirebbe avere un tasto copia in cui cliccandolo mi crea la stessa compilazione dei mese successivo per partire nella compilazione.
    Potresti creare una query di accodamento... stile questo thread: http://www.iprogrammatori.it/forum-programmazione/access/maschera-con-mix-tabelle-t25804-15.html
    Ricorda che prima di accodare a [righe] devi aver già creato un nuovo record in [testata] dal quale prendere id_testata, altrimenti hai una violazione di chiave. Se id_riga è un autoincrementante (o contatore che dir si voglia) non devi inserirlo nell'accodamento, viene valorizzato automaticamente.
    Inizia a fare qualcosa e poi vediamo dove (se) ci sono problemi.
  • Re: Copia dati

    Se ho capito bene, ti basta creare 3 query (2 di INSERT ed una SELECT per recuperare l'ID_TESTATA della prima INSERT). Scrivo al volo, quindi potrebbero esservi errori. Controlla prima!

    1)Inserisci la testata:
    INSERT INTO TTestata (data_scadenza) 
    VALUES (#data#)
    2) recuperi l'ID_TESTATA appena inserito (usa un recordset):
    SELECT @@IDENTITY AS LastID FROM TTestata
    N.B. Potrebbe essere necessario fare un refresh per averlo disponibile

    3) inserisci la singola riga:
    INSERT INTO TRighe (id_testata, cliente, cod_prodotto, descrizione prodotto) 
    VALUES (rs!LastID, bla bla bla...)
    N.B. Ho dato per scontato che il primo campo di ogni tabella sia un ID Primary Key, numerico ed autoincrementale. Se così non è la faccenda cambia.

  • Re: Copia dati

    GRazie mille con i consiglic he mi avete dato sono riuscito!
    Però, per facilizzarmi le cose, ho valutato con non necessitavo più di due tabelle con testata e righe ma me ne poteva bastare una.
    In questo modo la query di accodamento è stato molto più semplice farla:
    INSERT INTO licenze ( ID_cliente, ID_software, qtà_licenza, scadenza_licenza )
    SELECT licenze.ID_cliente, licenze.ID_software, licenze.qtà_licenza, licenze.scadenza_licenza
    FROM licenze
    WHERE (((licenze.scadenza_licenza)=[inserisci data]));
    
  • Re: Copia dati

    Però ho un problema, quando la query di accodamento mi copia tutti i dati di quella riga o meglio solo i dati con la data uguale a quella che gli passo : la dopia della riga è completa ma io vorrei che le righe copiate avessero il campo licenze.scadenza_licenza vuoto. Nel senso che quel campo non deve essere copiato.

    Come posso fare?
  • Re: Copia dati

    gibra ha scritto:


    ....
    2) recuperi l'ID_TESTATA appena inserito (usa un recordset):
    SELECT @@IDENTITY AS LastID FROM TTestata
    N.B. Potrebbe essere necessario fare un refresh per averlo disponibile
    ....
    Solo un'aggiunta... per usare @@IDENTITY deve usare ADO e non DAO... lo specifico solo perchè con Access è Nativo DAO e solitamente si opta per questo.
    A quel punto può usare ADO per le 3...
  • Re: Copia dati

    Qui dicono che funziona anche con DAO:
    http://stackoverflow.com/questions/1628267/autonumber-value-of-last-inserted-row-ms-access-vba

    In ogni caso, se apre un DAO.recordset (dopo la prima INSERT), basta fare MoveLast per recuperare l'ID appena inserito.
    O sbaglio?
  • Re: Copia dati

    A questo punto farò una prova, i miei ricordi risalgono a qualche anno fa...

    Il MoveLast andrebbe bene ma, sempre a memoria ormai è troppo che non ci lavoro più, in caso di MultiUtenza potrebbe essere fallace...

    In ogni modo direi che anche fosse solo ADO si può usare tranquillamente...
  • Re: Copia dati

    Diamo per ovvio che qualsiasi azione CRUD deve, e ribadisco deve, essere eseguita all'interno di una transaction, non è un problema in mono/multi-utenza perché la transaction blocca le tabelle interessate fino a che non si esegui il COMMIT.
Devi accedere o registrarti per scrivere nel forum
8 risposte