Nuovo record su sottomaschera

di il
7 risposte

Nuovo record su sottomaschera

Buonasera a tutti e grazie mille per tutti i suggerimenti che sono riuscito a leggere su questo magnifico forum,
mi serve aiuto perchè sto impazzendo e in rete non riesco a trovare una soluzione. Vi spiego in breve il problema.

Nel mio database ho due tabelle T_Corsi e T_Utenti legate insieme in una relazione molti a molti da una terza tabella T_Corsi_Utenti.
Ho quindi realizzato una maschera singola CORSI alla quale è associata una sottomaschera a piu elementi CORSI_UTENTI. I dati della maschera CORSI_UTENTI vengono presi da una query che mi restituisce ID, NomeUtente e CognomeUtente della tabella T_Utenti. Inserendo quindi l'ID dell'utente nella sottomaschera posso aggiungere i partecipanti al corso indicato nella maschera principale. Maschera e sottomaschera sono sincronizzate tramite il campo master.
Ora viene il bello...
Ho inserito nella sottomaschera un pulsate che mi apre una terza maschera UTENTI. Quest'ultima riporta semplicemente un elenco (id,nome,cognome) di tutti gli utenti presente nella tabella T_Utenti. Nel campo ID di questa maschera ho impostato un evento che "al click" mi copia il valore dell'ID selezionato nel campo ID della sottomaschera CORSI_UTENTI. E fino a qui funziona. Ora senza chiudere questa terza maschera vorrei che cliccando su altri ID gli stessi venissero copiati nei successivi records della sottomaschera CORSI_UTENTI. Adesso accade che mi cambia il numero di ID nello stesso record non andando al nuovo record.

Ho provato a inserire un evento "al caricamento" o "dopo inserimento" impostando il Setfocus nella sottomaschera e andando a nuovo record (DoCmd.gotoRecord, , AcNewRec) ma non funziona....

Sapreste aiutarmi?

In sostanza avrete capito che devo selezionare da un elenco i partecipanti ad un determinato corso e inserirli nella tabella T_Corsi_Utenti, quindi se avete da suggerirmi soluzioni alternative a quella da me proposta (tipo caselle di riepilogo, ecc...) ben venga...

Grazie mille e in anticipo!!!

7 Risposte

  • Re: Nuovo record su sottomaschera

    Per me ti stai complicando la vita inutilmente. Nella sottomaschera CORSI_UTENTI tu hai già il campo IDUtente (chiave esterna). Se ottimizzi con una casella combinata "ben congeniata", tu SELEZIONI i tuoi Utenti direttamente nella sottomaschera, record per record.
    Leggi qui per ottimizzare IDUtente con casella combinata
  • Re: Nuovo record su sottomaschera

    Ciao Osvaldo e grazie innanzitutto per l'interessamento. Avevo pensato alla soluzione da te proposta. Il fatto é che, se ho capito bene, dovrei per ogni record aprire il menu a tendina che mi mostra tutto l'elenco degli utenti e cercarmi quello da selezionare. Io invece avevo pensato all'apertura di una maschera che mi mostrasse tutto l'elenco degli utenti e io avevo la possibilità, in una volta sola, di selezionare quelli che mi interessavano...non so se mi sono spiegato bene...

    Grazie ancora
  • Re: Nuovo record su sottomaschera

    Si può fare anche questa cosa... ovviamente è meno immediata.
    Ad esempio puoi creare una Form con una ListBox a selezione Multipla Estesa che fa tutto...!
    Dalla Form principale, apri in modalità [acDialog] la form di Selezione, e, su chiusura della stessa esegui il Requery della SubForm.
    Nella Form di Selezione non ti resta che effettuare un INSERT nella Tabella con il riferimento alla FK del Corso che puoi passare sfruttando OpenArgs.

    La cosa è "relativamente" molto semplice, sono 5 righe di codice in tutto, ma la questione del "relativamente" è quello che può fare la differenza.

    Quì trovi un esempio di come usare la ListBox, nel ciclo apri un Recordset sulla Tabella ed effettui un ADDNew ad ogni iterazione:
    https://msdn.microsoft.com/en-us/vba/access-vba/articles/listbox-itemsselected-property-access
  • Re: Nuovo record su sottomaschera

    Emiljx ha scritto:


    dovrei per ogni record aprire il menu a tendina che mi mostra tutto l'elenco degli utenti e cercarmi quello da selezionare.
    Mi pare di capire che la soluzione di @Alex mira ad ottenere esattamente quello che hai chiesto tu: OK.
    Io invece non la farei così tragica (per Emiljx), se si considera che anche con la "casella di riepilogo", starai lì a "scorrere" i record per "cercare" su/giù. Forse ignori la potenza della casella combinata che, basta digitare appena i "primi" caratteri e già "spezzi" la lista in un punto a te più favorevole, se non addirittura beccare subito il nominativo che cerchi.
    Scegli come più preferisci...
  • Re: Nuovo record su sottomaschera

    Grazie ad entrambi. Studieró e approfondiro quanto scritto da alex e nella peggiore delle ipotesi operero come suggerito da osvaldo. Vi faro sapere...
  • Re: Nuovo record su sottomaschera

    @Alex ha scritto:


    Si può fare anche questa cosa... ovviamente è meno immediata.
    Ad esempio puoi creare una Form con una ListBox a selezione Multipla Estesa che fa tutto...!
    Dalla Form principale, apri in modalità [acDialog] la form di Selezione, e, su chiusura della stessa esegui il Requery della SubForm.
    Nella Form di Selezione non ti resta che effettuare un INSERT nella Tabella con il riferimento alla FK del Corso che puoi passare sfruttando OpenArgs.

    La cosa è "relativamente" molto semplice, sono 5 righe di codice in tutto, ma la questione del "relativamente" è quello che può fare la differenza.

    Quì trovi un esempio di come usare la ListBox, nel ciclo apri un Recordset sulla Tabella ed effettui un ADDNew ad ogni iterazione:
    https://msdn.microsoft.com/en-us/vba/access-vba/articles/listbox-itemsselected-property-access

    Alex, in merito alla frase che ho evidenziato in neretto, avresti da postarmi un esempio di codice? In particolare:
    - Effettuare un INSERT nella tabella
    - Riferimento alla FK del Corso che puoi passare sfruttando OpenArgs

    Emiljx
  • Re: Nuovo record su sottomaschera

    Codice pronto... NO.
    Nel tuo caso dovendo ciclare la collection ItemsSelected la cosa migliore è aprire un recordset sulla tabella ed usare il metodo AddNew...Update per inserire records.
    Tenendo conto che stai inserendo nella tabella lato Molti(da cui associ la SubForm) devi valorizzare sia il NuovoValore ma anche la chiave Esterna alla tabella lato Molti che è la PK della tabella lato 1 recuperabile dal controllo associato al quel campo nella Form... come CampoMaster nel container della SubForm.

    Leggi bene tutto sono cose banali ma fondamentali se vuoi capire.
Devi accedere o registrarti per scrivere nel forum
7 risposte