Registrazione in tabella in base a scelta

di il
11 risposte

Registrazione in tabella in base a scelta

Buon pomeriggio.
Sto provando a realizzare un gestionale da utilizzare per la registrazione di alcuni utenti ed il rilascio di certificati di partecipazione ai corsi.
Premetto che utilizzo Access da poco e sto imparando da autodidatta, per cui abbiate pazienza se la domanda risulta banale.

Ho realizzato due tabelle: una relativa alla registrazione degli utenti ed una relativa alla tracciabilità dei certificati rilasciati.
Quella relativa alla registrazione utenti viene compilata mediante la maschera di Figura1. Viene compilata manualmente tutta manualmente, l'unico campo automatico è l'id utente (ID_UTENTE), che è un contatore. Il campo con il nome e cognome l'ho chiamato (NOME_UTENTE)

La seconda tabella viene compilata mediante la maschera di Figura 2. Il problema che riscontro è il seguente.
Per il rilascio della certificazione mi occorre selezionare l'utente tramite un menu a tendina che mostra la tabella degli utenti (in particolare il record NOME_UTENTE) e vorrei che in base all'utente selezionato, nel campo "Identificativo utente" apparisse il suo codice identificativo (ovvero il recordi ID_UTENTE)

Spero di essermi spiegato e vi ringrazio per l'aiuto
Allegati:
Maschera rilascio certificati
Maschera rilascio certificati

Maschera registrazione utenti
Maschera registrazione utenti

11 Risposte

  • Re: Registrazione in tabella in base a scelta

    L'approccio da autodidatta non deve significare cose fatte male... quindi proviamo a pensare a farle bene...?
    La maschera quando si sviluppa un database è la penultima cosa da fare, l'ultima sono le stampe.
    La prima cosa è fare una corretta analisi della struttura delle tabelle e delle relazioni.
    Tu hai almeno, banalizzando al massimo le esigenze, queste tabelle da valutare:
    Anagrafiche
    Corsi
    AnagraficaPerCorso
    Certificati
    Le prime 3 tabelle rappresentano una struttura chiamata Molti-a-Molti in cui i corsisti registrati come Anagrafiche possono partecipare a Molti corsi ed ogni corso può avere Molti Corsisti.
    La tabella fondamentale e [AnagraficaPerCorso] che di fatto rappresenta la sessione specifica del corso erogato.
    Viene definita 3°Forma Normale.
    La tabella certificati è legata alla singola anagrafica ma subordinata ai requisiti richiesti dal corso.
    Questo potrebbe essere semplificabile se non hai allegati da registrare e/o prove d'esame da conservare.
    Con questa struttura si può iniziare a capire se i dati girano bene nelle tabelle a prescindere dalla maschera.
    Quindi si iniziano a provare ad inserire delle Anagrafiche qualche corso e si prova a strutturare la sessione del corso, si prova a far promuovere qualche corsista e qualche bocciato...
    Strutturando bene qualche queries simsimulano le estrazioni dati.
    Se tutto funziona simcostruiscono le maschere.

    Sono certo che non hai fatto così... ma fossi in te farei una profonda riflessione
  • Re: Registrazione in tabella in base a scelta

    Ciao @Alex, grazie della risposta.
    Parzialmente avevo già creato alcune delle tabelle che suggerisci. Al momento avevo creato le seguenti tabelle:
    -Corso (figura_1): contiene l'elenco dei corsi di formazione proposti e l'identificativo del corso (che poi dovrebbe andare a comporre l'identificativo del certificato).
    -Utente (figura_2): contiene l'anagrafica per la registrazione di un utente
    -certificazione (figura_3): nella mia testa questa tabella sarebbe servita per associare un utente a uno o più corsi, ma probabilmente è qui che sbaglio.

    Cortesemente ti chiederei di suggerirmi cosa deve contenere la tabella [AnagraficaPerCorso].

    Faccio un appunto perchè non vorrei essermi spiegato male. Obiettivo del database è registrare gli utenti in modo univoco e rilasciare un certificato di fine corso che sia univoco. Non ci sono bocciati e per partecipare ai corsi non sono richiesti requisiti. Questo giusto per chiarire meglio l'obiettivo.

    Grazie per la'iuto
    Allegati:
    14795_d3b9dd1926a669108fae19201bd507ee.jpg
    14795_d3b9dd1926a669108fae19201bd507ee.jpg

    14795_d9424e42b3f4ccd6978648ebe47323e0.jpg
    14795_d9424e42b3f4ccd6978648ebe47323e0.jpg

    14795_cbe1a768f7938391de7b4cbf6c2e8bc9.jpg
    14795_cbe1a768f7938391de7b4cbf6c2e8bc9.jpg
  • Re: Registrazione in tabella in base a scelta

    Marco.1990 ha scritto:


    Ciao @Alex, grazie della risposta.
    Parzialmente avevo già creato alcune delle tabelle che suggerisci. Al momento avevo creato le seguenti tabelle:
    -Corso (figura_1): contiene l'elenco dei corsi di formazione proposti e l'identificativo del corso (che poi dovrebbe andare a comporre l'identificativo del certificato).
    Sbagliato, il corso non genera il certificato... è la Sessione del corso che lo genera.
    La tabella Corsi è un CATALOGO, ma nulla di più... invece il Corso erogato e concluso al 15/Luglio/2021, se partecipato con la presenza minima prevista, se superato l'esame, se ... se... genera il Certificato.
    Queesto aspetto è di SOSTANZIALE differenza, e spero non ti sfugga il motivo cocnreto.
    Per questo motivo servirebbe una Tabella aggiuntiva 1-M che genera Sessioni di Corsi, in quanto magari in 1 anno dello stesso corso si possono generare 2 Sessioni...!

    Marco.1990 ha scritto:


    -Utente (figura_2): contiene l'anagrafica per la registrazione di un utente
    -certificazione (figura_3): nella mia testa questa tabella sarebbe servita per associare un utente a uno o più corsi, ma probabilmente è qui che sbaglio.
    La tabella Certificazioni può essere una Tabella che si relaziona con la tabella sotto [AnagraficaPerCorso], ma potrebbe non servire se lo scopo è Definire se il Corsista ha superato il corso ed ha avuto il certificato.. in quanto 1 Corso 1 Certificato.

    Marco.1990 ha scritto:


    Cortesemente ti chiederei di suggerirmi cosa deve contenere la tabella [AnagraficaPerCorso].
    Questa è proprio la tabella fondamentale che lega i Corsisti alle Sessioni di Corso non al corso di Catalogo quindi ma alla sessione specifica che inizia il 15/Luglio/2021 di quel corso....
    Quindi prima devi popolare il Calendario Corsi, poi per ogni sessione isnerisci i partecipanti...!
    La Tabella CalendarioCorsi, dovrà avere:
    
    IdSessioneCorso (PK)
    IdCorso (FK Relazionata alla tabella Corsi)
    DataInizio
    DataFine
    DataEsame
    Ora puoi ragionare su come popolare le iscrizioni...
    
    Tbl [AnagraficaPerCorso]
    IdSessioneCorso (Campo Long FK relazionato con la Tabella Corsi)
    IdAnagraficaCorsista (Campo Long FK Relazionato con la Tabella Anagrafiche) 
    ' \\ I 2 campi sopra presi assieme rappresentano la PK UNIVOCA della tabella \\
    EsameEseguito (Si/No)
    EsitoEsame(Si/No)
    DocumentoCertificativo (testo per salvare il PATH)
    Se il corso dovesse avere 10 Lezioni, servirebbe una ulteriore tabella per memorizzare le presenze... ecc...

    Ora semplificando, devi comprendere come popolare questa tabella..., ovvero selezioni la SessioneCorso ed i singoli Partecipanti alla sessione.
    Ragionando sulle Maschere avrai una Maschera basata sulla Tabella SessioneCorsi ed una Sottomaschera basata sulla nostra Tabella [AnagraficaPerCorso] in modalità continua con una ComboBox che ti consentira di andare a selezionare le anagrafiche da inserire nella Sessione di Corso XX del 15/Luglio/2021...

    Marco.1990 ha scritto:


    Faccio un appunto perchè non vorrei essermi spiegato male. Obiettivo del database è registrare gli utenti in modo univoco e rilasciare un certificato di fine corso che sia univoco.
    Certo

    Marco.1990 ha scritto:


    Non ci sono bocciati e per partecipare ai corsi non sono richiesti requisiti. Questo giusto per chiarire meglio l'obiettivo.
    Questo è un dettaglio... poco utile nell'insieme, sarai tu definire le specificità, noi ti aiutiamo solo a fare i corretti ragionamenti di massima senza avere limiti imposti dalla non piena conoscenza.
  • Re: Registrazione in tabella in base a scelta

    Ciao Alex, ti ringrazio per la pazienza e le spiegazioni. Ho capito la logica che sta dietro quello che dici, ma onestamente non ho capito come farlo nella pratica (sicuramente per miei limiti nella conoscenza del programma).

    Ho creato intanto le due tabelle (che vengono popolate mediante apposite maschere):
    -ANAGRAFICA: in cui vengono salvate tutte le informazioni utili sugli utenti (nome, cognome, residenza etc..). Ogni utente è identificato da una PK univoca (un numero progressivo)
    -CATALOGO_CORSI: come da te suggerito è una tabella che riporta semplicemente l'elenco dei corsi erogabili

    A questo punto ho creato la tabella CALENDARIO CORSI (compilata mediante apposita maschera), e come da te suggerito ho inserito:
    *identificativo_sessione: è la PK della tabella. Ho ipotizzato che sia un campo inserito manualmente riportante la data in cui viene effettuato il corso. Oppure suggerisci di utilizzare la numerazione automatica?
    *id_corso: ho inserito una casella combinata con un menu a tendina che mostra il il catalogo dei corsi
    *data_corso: campo di tipo data/ora compilato manualmente

    Adesso devo procedere con la creazione della tabella ANAGRAFICA_CORSO. I campi della tabella in questo caso sono:
    -IdSessioneCorso: come lo relazione con la tabella CATALOGO_CORSI? Perdonami ma cosa significa FK?
    Come faccio ad aggiungere a questa sessione gli utenti che vi hanno partecipato?

    Grazie
  • Re: Registrazione in tabella in base a scelta

    Altra curiosità.
    Nella scheda anagrafica al momento ho insrerito per l'id_utente un campo di tipo "numerazione automatica"
    A me piacerebbe tuttavia che l'identificativo fosse UT+"numerazione automatica". È possibile farlo? (ed ha senso farlo?)
  • Re: Registrazione in tabella in base a scelta

    Marco.1990 ha scritto:


    Ciao Alex, ti ringrazio per la pazienza e le spiegazioni. Ho capito la logica che sta dietro quello che dici, ma onestamente non ho capito come farlo nella pratica (sicuramente per miei limiti nella conoscenza del programma).

    Ho creato intanto le due tabelle (che vengono popolate mediante apposite maschere):
    -ANAGRAFICA: in cui vengono salvate tutte le informazioni utili sugli utenti (nome, cognome, residenza etc..). Ogni utente è identificato da una PK univoca (un numero progressivo)
    -CATALOGO_CORSI: come da te suggerito è una tabella che riporta semplicemente l'elenco dei corsi erogabili
    Corretto.

    Marco.1990 ha scritto:


    A questo punto ho creato la tabella CALENDARIO CORSI (compilata mediante apposita maschera), e come da te suggerito ho inserito:
    *identificativo_sessione: è la PK della tabella. Ho ipotizzato che sia un campo inserito manualmente riportante la data in cui viene effettuato il corso. Oppure suggerisci di utilizzare la numerazione automatica?
    Non mettere lo Spazio nel Nome della Tabella, anzi non metterne MAI in nessun nome di Oggetto.
    Userei per semplicità un campo Counter, poi quando avrai più dimestichezza, sempre sia da considerare migliorativo, potrai valutare se gestire una PK diversa.

    Marco.1990 ha scritto:


    *id_corso: ho inserito una casella combinata con un menu a tendina che mostra il il catalogo dei corsi
    *data_corso: campo di tipo data/ora compilato manualmente
    Come ti dicevo, lascia perdere le Maschere inizialmente... non serve... e ricorda che anche nelle tabelle la dove hai delle FK puoi andare a definire il campo come Ricerca(Casella Combinata) ed assegnare l'origine riga... questo poi ti semplificherà le cose quando crei le maschere.

    Marco.1990 ha scritto:


    Adesso devo procedere con la creazione della tabella ANAGRAFICA_CORSO. I campi della tabella in questo caso sono:
    -IdSessioneCorso: come lo relazione con la tabella CATALOGO_CORSI? Perdonami ma cosa significa FK?
    Come faccio ad aggiungere a questa sessione gli utenti che vi hanno partecipato?
    Grazie
    La Tabella [ANAGRAFICA_CORSO] che poi è la tabella [PartecipantiSessioneCorsi] così è più chiara... non deve relazionarsi con la Tabella Corsi, ma con la Tabella [CalendarioCorsi], in quanto tunon fai partecipare le persone ad un Corso Generico ma a quella specifica Sessione.

    Quindi
    
    [Anagrafica](1) <--->(M)[PartecipantiSessioneCorsi](M)<--->(1)[CalendarioCorsi](M)<--->(1)[CatalogoCorsi]
    Nella Tabella [Anagrafica]:
    IdAnagrafica
    Nome
    Cognome
    ecc...

    Nella Tabella [PartecipantiSessioneCorsi] hai:
    IdAnagrafica (FK) L'and di questi 2 Campi deve essere UNIVOCO quindi sarà una PK MultiCampo.
    IdSessioneCorso (FK) L'and di questi 2 Campi deve essere UNIVOCO quindi sarà una PK MultiCampo.
    Esame
    Certificato
    ecc...

    Nella Tabella [CalendarioCorsi] hai:
    IdSessione(PK Counter)
    IdCorso(FK)
    Data
    Costo
    NumeroMassimoPartecipanti
  • Re: Registrazione in tabella in base a scelta

    Marco.1990 ha scritto:


    Altra curiosità.
    Nella scheda anagrafica al momento ho insrerito per l'id_utente un campo di tipo "numerazione automatica"
    A me piacerebbe tuttavia che l'identificativo fosse UT+"numerazione automatica". È possibile farlo? (ed ha senso farlo?)
    Lascia stare... usa per ora il Campo Counter, poi quando capisci meglio cosa stai facendo e quali problemi ti porti dietro con queste scelte, allora ci ragioni meglio.
  • Re: Registrazione in tabella in base a scelta

    Buongiorno Alex, perdonami se torno a chiedere aiuto nella creazione del database,

    Riepilogo di quello che ho fatto fino ad ora.
    1_Creato tabella "Gestione_iscrizioni" (Fig1) in cui è contenuta l'anagrafica degli iscritti. Il campo "ID_PARTECIPANTE" è un numero automatico che identifica in modo univoco il partecipante ed è anche PK.

    2_Creato tabella "Catalogo_corsi" (Fig2) in cui è riportato l'elenco dei corsi erogati. In questo caso il campo "ID_CORSO" è una sigla di 5 lettere che identifica in modo univoco il corso ed è anche PK.

    3_Creato la tabella "Gestione_sessione_corsi" (Fig3). Il campo "ID_SESSIONE_CORSO" al momento l'ho impostato come PK counter. Il campo "ID_CORSO" (Fig4) è una ricerca legata al campo "NOME_CORSO" della tabella "Gestione_catalogo_corsi". La tabella riporto poi la data del corso ed il costo.

    4_Creato tabella "Gestione_certificazioni" (Fig5) nella quale il campo "ID_SESSIONE_CORSO" è una ricerca legata al campo "ID_SESSIONE_CORSO" della tabella "Gestione_sessione_corsi". I campi "NOME_CORSO" e "IDENTIFICATIVO_CORSO" vorrei che apparissero in automatico (giusto per riepilogare cosa riguarda quella sessione) in base all'id sessione scelto e dovrebbero corrispondere ai campi "ID_CORSO" della tabella "Gestione_sessione_corsi" ed al campo "ID_CORSO" della tabella "Gestione_catalogo_corsi". Il campo "ID_PARTECIPANTE" è legato alla tabella "Gestione_iscrizioni" (Fig6).
    Il campo "ID_CERTIFICAZIONE" dovrebbe riportare un codice univoco nella seguente forma: AAAAMMDD_KKKKK_XXX
    In cui:
    *AAAAMMDD è la data del corso (dovrebbe prenderla dalla data inserita nella tabella "Gestione_sessione_corso")
    *KKKKK è l'id del corso erogato (ovvero l'ID_CORSO" della tabella "Gestione_catalogo_corso")
    *XXX è un progressivo in base al numero di partecipanti.

    Per cui ad esempio il primo partecipante a cui viene rilasciato il certificato del corso svolto in data 04/07/2021 relativo al corso HEC-RAS base (il cui identificativo è HEC1D) avrà un certificato con codice 20210704_HEC1D_001

    Perdonami sulla lunghezza del mio post e spero con le immagini di essere stato chiaro su ciò che ho fatto. Spero di essere vicino all'obiettivo ma mi manca ancora qualche suggerimento

    Grazie per la disponibilità e buona domenica
  • Re: Registrazione in tabella in base a scelta

    Mi ero dimenticato le foto
    Allegati:
    14795_08d31d1b88f3a62bc8bf7e57b5bb3868.jpg
    14795_08d31d1b88f3a62bc8bf7e57b5bb3868.jpg

    14795_d55ecf71c08fbf2c644427554b7a8fca.jpg
    14795_d55ecf71c08fbf2c644427554b7a8fca.jpg

    14795_0d13ec2b1e638ee79080ca2adf8ea074.jpg
    14795_0d13ec2b1e638ee79080ca2adf8ea074.jpg

    14795_9b8b7f1514181c9b3ba1303ccfed4712.jpg
    14795_9b8b7f1514181c9b3ba1303ccfed4712.jpg

    14795_bd0d09c5c6260d64ce8efaf365091f8f.jpg
    14795_bd0d09c5c6260d64ce8efaf365091f8f.jpg
  • Re: Registrazione in tabella in base a scelta

    Figura6
    Allegati:
    14795_272b12cc73456ae59fbaf5cd6b35f133.jpg
    14795_272b12cc73456ae59fbaf5cd6b35f133.jpg
  • Re: Registrazione in tabella in base a scelta

    Perdona la franchezza ma temo manchino dei concetti di base per comprendere le relazioni... e di conseguenza come gestire campi chiave primaria e campi chiave esterna...
    Hai messo tutto a testo...?
    Il campo PK di tipo autoincrementale o Counter è un Long quindi le chiavi esterne devono essere Intero lungo.
    Devi prima fare un passaggio per un libro di testo che ti chiarisca come strutturare un database partendo da zero...
Devi accedere o registrarti per scrivere nel forum
11 risposte