Copia record da una maschera all’altra

di il
18 risposte

Copia record da una maschera all’altra

Salve a tutti.
Ho un piccolo problema da risolvere e spero nel vostro aiuto.

Provo a spiegare e se dovesse servire allegherò il mio Db come esempio.

Ho una maschera che fa riferimento ad una tabella che si chiama “Ordine”.
Questa tabella ha i campi, IdOrdine, NomeProdotto

Questa maschera ha nel suo interno una sottomaschera che si chiama “IngredientiOrdine” che ha i campi, IDIngredienteOrdine, IDOrdine, IDIngrediente, CodiceIngrediente, DescrizioneIngrediente, Costo

Tra la tabella “Ordine” e la tabella “IngredientiOrdine” c’è una correlazione uno a molti tra IDOrdine della tabella “Ordine” e IDOrdine della tabella “IngredientiOrdine”.

Ecco il problema:
Nella maschera “Ordine” ho messo un pulsante che apre (come popup) un’altra maschera tabulare che si chiama “ListinoIngredienti” la quale fa riferimento all’omonima tabella.
Questa maschera contiene una lista di tutti gli ingredienti in dispensa:
IDIngrediente, CodiceIngrediente, DescrizioneIngrediente, Costo

Vicino ogni record di questa maschera c’è un pulsante che si chiama “Aggiungi”.

Quindi la procedura è questa:
- apro la maschera “Ordine” e scrivo il nome del prodotto nel campo NomeProdotto, poi apro la maschera popup “ListinoIngredienti” e a quel punto clicco sul pulsante “Aggiungi” in corrispondenza dei vari ingredienti scelti.

Quello che vorrei è che per ogni volta che premo il pulsante “Aggiungi” i dati di quel record vengano copiati in un nuovo record della sottomaschera “IngredientiOrdine” e che quindi vengano compilati automaticamente tutti i campi di quella maschera.

Spero di essere stato il più chiaro possibile.

Nel caso serve il mio DB come esempio fatemi sapere.

Grazie a chiunque possa aiutarmi

18 Risposte

  • Re: Copia record da una maschera all’altra

    1. Innanzitutto ti consiglio di nominare le tabelle al PLURALE, quindi Ordini, IngredientiOrdini, ListiniIngredienti.
    2. In tabella IngredientiOrdini invece dei 4 campi relativi a ListiniIngredienti, solo IDIngrediente.
    3. Conseguenza del punto 2. devi creare la relazione ListiniIngredienti.IDIngrediente uno-a-molti IngredientiOrdini.IDIngrediente.
    4. Sul campo IngredientiOrdini.IDIngrediente ti consiglio di creare una "casella combinata" che punta su IDIngrediente da ListiniIngredienti e mostra tutti gli altri campi...
  • Re: Copia record da una maschera all’altra

    Buongiorno Osvaldo e grazie mille per il supporto

    Ok. Forse ho capito, ma anche se nella tabella “IngredientiOrdini” metto solo il campo IDIngrediente, in quale modo posso trasferire il numero IDIngrediente dalla maschera ListinoIngredienti a IngredientiOrdini una volta premuto il pulsante “Aggiungi”?

    Io vorrei che la sottomaschera fosse compilata solo in quel modo perché non posso ricordarmi tutti gli IDIngrediente a memoria e per questo che ho creato la maschera popup ListinoIngredienti la quale è una tabella che riporta la descrizione di ogni singolo ingrediente ed io per ogni ingrediente desiderato premo “Aggiungi” ed a quel punto il riferimento di quell’ingrediente deve copiarsi nella sottomaschera IngredientiOrdine.

    Se ho capito bene quello che mi hai suggerito non saprei comunque come ottenere questo trasferimento dati tra una maschera e l’altra una volta premuto il bottone “Aggiungi”
  • Re: Copia record da una maschera all’altra

    1. Devi creare la casella combinata "ottimizzandola" con 4 colonne...prova a leggere qui

    2. Nella maschera IngredientiOrdini puoi predisporre 2 caselle di testo non associate ad alcun campo dove dentro ci scrivi rispettivamente:
    =[NomeCasellaCombinata].Column(2)
    =[NomeCasellaCombinata].Column(3)
    che ti servono per VEDERE poi i valori corrispondenti a IDIngrediente.
  • Re: Copia record da una maschera all’altra

    Si, è una soluzione però non è proprio quello che cerco di ottenere...
    Ovviamente se non c’è soluzione farò quanto mi consigli.

    Io avevo pensato ad una cosa stile “ecommerce”
    Una maschera che ha una tabella con tutti gli ingredienti dove cliccando sul pulsante “Aggiungi” quell’ingrediente va a mettersi nella lista degli ingredienti di quell’ordine.

    Forse dovrei fare una query di accodamento...
  • Re: Copia record da una maschera all’altra

    È così pratica/potente/immediata/opportuna la casella combinata!
  • Re: Copia record da una maschera all’altra

    Hai ragione infatti se non ne esco ricorrerò a quella soluzione.
    Purtroppo non è la cosa che avevo pensato inizialmente e non può esserci un solo modo per compilare un nuovo record ad una tabella.
    Proverò ad eseguire da VBA una query di accodamento dal listino alla tabella ingredienti dando come criterio l’ID ingrediente interessato.

    Se fallirà questo tentativo ricorrerò alla soluzione più pratica/potente/immediata/opportuna
  • Re: Copia record da una maschera all’altra

    Ovviamente si puntare tutto... io mi limito ad indicarti il metodo.
    Apri la maschera passando la PK del record da duplicare, forse nel tuo caso è la PK della ricetta, al parametro openarg, quindi apri recordset sul record da duplicare in sola lettura, poi attivi in addnew il recordsetclone della maschera aperta ed inserisci tutti i dati ad eccezione della PK, se erano gli ingredienti avrai più records quindi sarà un ciclo... ovviamente devi sostituire alla FK della ricetta quello della ricetta attuale che deve contenere l'elenco ingedienti...

    Es:
    IdRicetta
    IDIngrediente

    Il campo IdRicetta sarà il nuovo IdRicetta mentre idingrediente se è un Counter si valorizza al momento dell'inserimento... tutti gli altri li copi...

    Fai il requery della form e vedrai i dati duplicati.
  • Re: Copia record da una maschera all’altra

    Ciao Alex!

    Grazie per la risposta!

    Allora, purtroppo non ho capito quasi niente, quindi penso che questa sia la strada giusta per ottenere quello che vorrei.
    Mica potremmo fare un secondo tentativo spiegandolo come se fossi un neofita (infatti lo sono)?
    Non so neanche cosa significa PK e FK...

    Scusa per l’ignoranza
  • Re: Copia record da una maschera all’altra

    L'argomento in se è banale solo se si conoscono le basi di funzionamento di un Database Relazionale oltre che ovviamente il VBA.
    Non ho ben capito quale sia la tua preparazione, ma è evidente che per farti comprendere il tutto servirebbe un Tutorial... cosa che risulta complicata in un forum.
    Prova ad iniziare a legegrti quanto esposto in questi Link, dovrebbe chiarirti le cose in merito ai concetti più importanti delle relazioni, Chiavi primarie e chiavi esterne e di come sono vincolati i dati tra le tabelle lato Molti rispetto a quelle lato 1... come nel tuo caso sono gli ingredienti della ricetta da copiare nella nuova ricetta...
    Compreso questo dovrebbe esserti più chiaro quanto ti ho suggerito, poi se conosci il VBA ri tendi conto che sono 5 righe di codice in tutto.

    https://support.office.com/en-us/article/guide-to-table-relationships-30446197-4fbe-457b-b992-2f6fb812b58f
    https://www.universalclass.com/articles/computers/understanding-relationships-in-access-2016.htm
    https://docs.microsoft.com/it-it/sql/relational-databases/tables/primary-and-foreign-key-constraints?view=sql-server-ver15
    https://www.essentialsql.com/what-is-the-difference-between-a-primary-key-and-a-foreign-key/
    https://support.microsoft.com/en-us/help/283878/description-of-the-database-normalization-basics
    http://www.databasedev.co.uk/database_normalization_basics.html
    http://www.databasedev.co.uk/database_normalization_process.html
  • Re: Copia record da una maschera all’altra

    Ok. È giusto.
    È una bella lettura che va fatta altrimenti non si cresce mai

    Ma se nel frattempo ti inviassi un file di esempio?
    Così oltre a risolvere il problema ed andare avanti con il lavoro vedrei praticamente quanto mi hai consigliato di fare

    Grazie comunque per il supporto
  • Re: Copia record da una maschera all’altra

    Non è nello spirito del Gruppo, in teoria di nessun gruppo, analizzare lavori privatamente, se vuoi renderlo disponibile a tutti lo pubblichi su un sito di FileSharing e chi vorrà lo scarica e ti darà una sua visione.
    Io non lo faccio per posizione.

    Detto questo, siccome sono 5 righe di codice, nel caso vi fossero problemi, pubblicherai quelle 5 righe di codice, a cosa serve tutto un Applicativo che 99% dei casi risulta incomprensibile a chi lo guarda per la 1° volta...?

    Vedi tu.
  • Re: Copia record da una maschera all’altra

    Anche se mi sono espresso male era proprio quello che intendevo, ovvero caricarlo su Dropbox e metterlo nel messaggio.
    Ho scritto “se ti inviassi” perché stiamo parlando io e te ma non intendevo in forma privata.

    Detto questo riformulo la domanda.
    Posso inviarlo pubblicamente in questa conversazione affinché tu o qualsiasi altra persona possa aiutarmi?
  • Re: Copia record da una maschera all’altra

    Il file è questo.
    Spero che tu possa aiutarmi...
    Ad ogni modo grazie per il supporto

    https://www.dropbox.com/s/sf61c9rf746ex88/Database1.accdb?dl=0
  • Re: Copia record da una maschera all’altra

    kris9951 ha scritto:


    Non so neanche cosa significa PK e FK.
    PK = PrimaryKey = Chiave Primaria
    FK = ForeignKey = Chiave Esterna

    1. La struttura tabelle è "relativamente" corretta. Devi eliminare gli ultimi 3 campi da IngredientiOrdini.
    2. Devi costruire la/le casella/e combinata/e come ti ho detto.
Devi accedere o registrarti per scrivere nel forum
18 risposte