Generazione automatica records in sequenza

di il
12 risposte

Generazione automatica records in sequenza

Sto sviluppando in Access un applicativo, secondo lo schema allegato, per la gestione tesseramento soci in una ASD. Le tessere sono richieste (e pagate) ad una ente di promozione sportiva cui la ASD è affiliata. L'ente consegna il numero di tessere richieste tutte numerate in sequenza secondo loro numero interno. Una volta ricevute le tessere ho l'esigenza di generare in modo automatico un record per ogni tessera che poi associerò ad ogni che si ircrierà alla ASD. In pratica nel DB “Tessere” caricherei il primo record con il numero della prima tessera ed il range dei numeri consegnati Fatto questo vorrei premere un bottone che mi generasse tanti record uguali al primo immesso ma con il numero di tessera incrementato di 1 gino al raggiungimento del numero massimo contenuto nel range.

12 Risposte

  • Re: Generazione automatica records in sequenza

    Premesso che lo reputo non necessario, quando si vengono ad iscrivere registri la Tessera non hai bisogno di impegnare dei Numeri VUOTI inutilmente…

    In ogni caso, devi fare un ciclo 1÷n, ed ad ogni iterazione eseguire un AddNew… poi salvi. 

  • Re: Generazione automatica records in sequenza

    Grazie Alex.

    Purtroppo devo far coincidere l'archivio fisico delle tessere con il “virtuale” (DB) in quanto l'associazione tessera-socio deve sempre essere verificata, ovvero devo assegnare ad ogni socio una tessera esistente e devo avere in linea le tessere occupate e quelle libere (tra cui scegliere).

    Potrei creare 2 righe di codice che verifichino che il numero tessera inserita (attenzione che potrebbero sempre esserci errori di digitazione) cada nel range assegnato ed anche che non sia già stata assegnata. Questo mi complica le cose. Se invece genero a priori i records N° tessera posso flaggare le usate e ricercare ed assegnare con facilità le libere.

    Va considerato che le assegnazioni di pacchetti di tessere da parte dell'Ente possono essere diverse durante l'anno e con range diversi per ogni pacchetto.

  • Re: Generazione automatica records in sequenza

    18/03/2024 - Viky ha scritto:


    Purtroppo devo far coincidere l'archivio fisico delle tessere con il “virtuale” (DB) in quanto l'associazione tessera-socio deve sempre essere verificata, ovvero devo assegnare ad ogni socio una tessera esistente e devo avere in linea le tessere occupate e quelle libere (tra cui scegliere).

    Ciao,

    se non ho capito male, mi sembra che stai creando un problema che non esiste. Provo a spiegarmi…

    La tabelle tessere dovrebbe contenere solo le colonne:

    • Id Tessera
    • Anno Tessera
    • Numero di Tessera
    • Id Esp

    N.B. non vedo nessuna utilità e/o scopo per queste colonne :
    -N° Dal Al 
    -N° Tessera 1 


    la tabella tessere è relazionata 1 a 1 con la tabella Tesseramenti


    Cosa si deve fare ? vediamo la casistica:

    1. Associare una tessera ad un tesserato 
      1. scegliere da un elenco una tessera libera
    2. Consultare le Tessere non associate ( libere )
    3. Aggiungere tessere acquisite e/o acquistate
      1. in automatico popolare la tabella Tessere con un certo numero di Tessere

    Punto 1. 

    Creare in Tesseramenti con la Id Tessera il legame per un certo socio 
    Per poter selezionare e scegliere da un elenco una tessera Libera vedere il Punto 2.

    Punto 2. 

    Creare una ListBox o Combobox da popolare con i numeri di Tessere che non sono presenti nellaTabella Tesseramenti
    Queste sono le tessere “Libere” ed è sufficiente eseguire una sql join tra le tabelle Tessere e Tesseramenti con la where condition escludere i records che sono legati alla tabella Tesseramenti.
    Pertanto si leggono solo le Tessere che non sono state associate alla Tabella Tesseramenti e si ottiene un elenco di tessere “Libere”

    Punto 3.

    In una Form impostare delle textbox per richiedere : Anno Tessera, Numero Iniziale Tessera e Numero Finale Tessera e altre informazioni se necessarie per inserire dei nuvi records.
    Alla convalida dei dati, inseriti nella Form, creare un ciclo dal numero di tessera Inizio fino al numero di tessera Fine e aggiungere i records nella tabella Tessere

    In questa fase eseguire almeno un controllo essenziale…. verificare che quel numero di tessera non esista nella Tabella Tessere prima di procedere all'inserimento della stessa.


    Non vedo altre cose da fare oltre a questi 3 semplici passaggi.

    Fai sapere…. e se non ho capito bene il problema prova ad esporlo meglio.

  • Re: Generazione automatica records in sequenza

    Carissimo By65,

    grazie, grazie infinite per la tua disponibilità e la attenta analisi. Tutte le scelte che ho fatto traggono origine dal tuo puto 3.

    In un anno “sociale” la ASD ha necessità di richiedere più volte pacchetti di tessere alla EPS cui è affiliata (e tra l'atro potrebbe anche associarsi a nuova EPS, ma questo è di poca rilevanza). Queste richieste multiple durante l'anno sono originate dal flusso di iscritti alla ASD che variano durante l'anno. Quindi tengo completamente separata la tabella soci che ha il solo scopo di popolare un'anagrafica soci senza doppioni nella quale insersco i nuovi e dalla quale ripesco vecchi soci che si presentano gli anni seguenti. Ecco che la relazione 1 a 1 TESSERAMENTI mi permette di mettere in relazione l'anagrafica di un socio con la tessera assegnatagli per l'anno in corso. E' per tale ragione che mantengo in vita una tabella TESSERE con un record per ogni EPS+numero tessera+anno+flag libera o no. Sono d'accordo che la generazione automatica dei record tessera debba avvenire tramite form (come da te consigliato) che acquisisca i dati necessari e poi partorisca un record per ogni numero tessera dal-al (previo controllo inesistenza). La tabella tessere mi permetterà il ompleto controllo delle stesse (N° utilizzate, N° libere) compresa la riconsegna delle inutilizzate a fine anno. Inoltre negli anni ho un valido storico di tutte le movimentazioni EPS, soci e tessere.

    Per quanto riguarda l'occupazione spazi e il peso delle elaborazioni, si viaggia su un numero massimo di 500 tessere annuali, minimo 200.

    Anche in termini di controlli fiscali, il sistema mi sembra solido.

  • Re: Generazione automatica records in sequenza

    Ciao,

    in Tessere aggiungerei un flag di tipo numerico per avere lo stato delle Tessere.
    potrebbe essere impostato con questi con questi tipi :

    1 = Attiva (valore di default impostato in fase di creazione delle tessere e assunto quando una tessera viene ripristinata per qualche motivo)
    2 = Annullata (valore da assumere quando la tessera non risulta più utilizzabile)
    3 = Reso (valore da assumere quando vengono restituite)
    4 = … Altri tipi di stato che ti permettono la gestione esaustiva delle tessere secondo le tue esigenze per prevedere tutta la casistica


    Questo Flag di stato avrà una sua Tabella, per esempio TblTessereStatus e il suo Id PK avrà la sua FK nella tabella Tessere


    Sempre in Tessere non metterei un flag se è stata assegnata o meno.
    Come accennavo sopra, questo stato è sempre noto in qualsiasi momento e in modo dinamico e che non devi gestire manualmente. 
    Mi spisgo meglio; da un lato hai le tessere e dall'altro lato hai il Tesseramento. Pertanto tutte le tessere presenti in tesseramento sono quelle utilizzate e le tessere ancora libere sono quelle presenti in tessere ma non assegnate in Tesseramento. Bastafare una join per avere questo tipo di informazione, sia per creare un elenco a discesa per permettere la scelta delle tessere libere da poter assegnare, sia per altri scopi. 

    Mentre mettere un flag in Tessere per il solo fatto che è stata assegnata in Tesseramento, non è una pratica molto ortodossa e risulta una informazione ridontante e soggetta a disalineamenti. Personalmente non lo farei.

    Ciao e buon lavoro ;))

  • Re: Generazione automatica records in sequenza

    Carissimo Franco,

    ti sono infinitamente grato per la disponibilità e le dritte che mi hai dato. Piccole cose ma di grande valore.

    Ora parto. Ti terrò aggiornato sugli sviluppi. Mi ci vorrà un pò di tempo perchè se è vero che di informatica e programmazione ne mastico abbastanza, sono un novellino su access e visual basic.

    Però basta un manuale e un pò di cervello per raggiungere l'obiettivo.

    ciao

  • Re: Generazione automatica records in sequenza

    Un'ipotesi di struttura potrebbe essere al seguente:

    naturalmente c'è da tenere conto di eventuali normalizzazioni dovute ai possibili campi all'interno delle tabelle tblEps e tblSoci, tipo Comune di residenza o Comune di nascita.

    Per la creazione delle Tessere sull'evento relatico al salvataggio del record nella tblTpsTessere prevedere alla fine un ciclo di inserimento dei record  nella tblTessere.

    Per un aiuto più preciso bisognerebbe conoscere quali sono gli altri campi in tblEps e tblSoci.

  • Re: Generazione automatica records in sequenza

    Grazie a tutti per il grande supporto. Lo schema di Stifone (mi dici cosa hai usato per fare il solo disegno?) è la soluzione all'impostazione del progetto. Su tale schema mi permetto di evidenziare 2 cose:

    1. la tblEpsTessere è generata In una Form con delle textbox per richiedere : Anno Tessera, Numero Iniziale Tessera e Numero Finale Tessera e altre informazioni se necessarie per inserire dei nuvi records. Qundi in tabella non ci saranno i campi Numeroinizio e Numerofine ma solo NumeroTessera.
      Alla convalida dei dati, inseriti nella Form, parte un  ciclo dal numero di tessera Inizio fino al numero di tessera Fine che aggiunge i records nella tabella tblEpsTessere come proposto da By65Franco
    2. La relazione tblSoci con tblTesseramento dovrebbe essere 1 a 1 in quanto l'accoppiata tessera/socio può avvenire una sola volta l'anno.

    Ancora un grande grazie a tutti.

    Viky

  • Re: Generazione automatica records in sequenza

    Mi dispiace per te ma non sai leggere uno schema relazionale, che è stato creato nella finestra delle relazioni di Access.

    la tblEpsTessere è generata In una Form con delle textbox per richiedere : Anno Tessera, Numero Iniziale Tessera e Numero Finale Tessera e altre informazioni se necessarie per inserire dei nuvi records. Qundi in tabella non ci saranno i campi Numeroinizio e Numerofine ma solo NumeroTessera.

    Numeroinizio e Numerofine corrispondono a Numero Iniziale Tessera e Numero Finale Tessera

    Alla convalida dei dati, inseriti nella Form, parte un  ciclo dal numero di tessera Inizio fino al numero di tessera Fine che aggiunge i records nella tabella tblEpsTessere come proposto da By65Franco

    i dati relativi al ciclo debbono essere accodati nella tblTessere.

    1. La relazione tblSoci con tblTesseramento dovrebbe essere 1 a 1 in quanto l'accoppiata tessera/socio può avvenire una sola volta l'anno.

    la relazione è 1 a Molti perchè nel tempo un Socio potrebbe essere tesserato più volte.

  • Re: Generazione automatica records in sequenza

    Stifone,

    Non è che “non so leggere uno schema relazionale che è stato creato nella finestra delle relazioni di Access” piuttosto puoi accusarmi di non averlo riconosciuto. Certo se fossi disastrato fino a questo punto starei a far perdere tempo a tutti!! Ti confesso che avevo visto che la grafica del tuo schema era identica a quella generata da Access ma pensavo avessi usato un apposito programmino per generare ER senza usare Access. Ma questo non è essenziale.

    Numero finale e numero iniziale tessera non sono attributi di ogni tessera ma lo è il solo numero univoco della tessera stessa. Quindi quando il segretario della ASD riceve il suo pacchetto di tessere, apre il form ed inserisce il numero della prima tessera del pacchetto ed il numero dell'ultima. Preme un ipotetico bottone “Genera” e vengono accodati al DB tessere i nuovi records in sequesza indicata dal range espresso nel  form. Che è poi quello che tu dici.

    La relazione tblSoci con tblTesseramento è 1 a 1 perchè nel tempo un socio può avere una ed una sola tessera.

    Grazie sempre per l'aiuto

  • Re: Generazione automatica records in sequenza

    Ciao,

    leggendo gli ultimi post mi viene in mente una cosa …

    Nella tabella Tessere il numero della tessera deve essere indicizato univoco
    Però andrebbe in conflitto con la numerazione dell'anno successivo o precedente qualora l'ente emittente ad ogni anno riparte dal numero 1 per la nuova serie di tessere dell'anno in corso.

    A mio parere converrebbe, se non l'hai già considerato, impostare nella tabella Tessere il Numero Tessere e Anno di Validità
    Per queste due colonne si deve creare un Indice Univoco 
    A questo modo non si incorre di creare Tessere doppie sia per l'anno in corso che rispetto agli altri anni precedenti o successivi.

    Avendo un indice univoco Anno/NumeroTessera si possono creare diversi controlli prima di attribuire una tessera al socio.
    Per esempio si può controllare di:
    -Determinare se una tessera è scaduta oppure no
    -Assegnare solo tessere dell'anno corso in quanto le tessere dell'anno precedente sono scadute
    -Verificare se si possono assegnare tessere nuove per l'anno successivo senza dover aspettare l'inizio dell'anno nuovo
    -ecc…ecc…

    In questo modo potrebbe essere utile per creare delle discriminanti in fase di controllo assegnazione tessere, selezionare solo le tessere valide per l'anno in corso, selezionare i records per popolare gli elenchi inlistbox o combobox, ecc…


    Sempre per avere una corretta e fluida gestione delle tessere da assegnare ai soci, in tabella Tesseramenti all'  Id Socio si dovrebbe assegnare la tessera con Anno/NumeroTessera in modo che a cavallo dell'anno, per esempio già a dicembre, si possono inserire e assegnare le nuove tessere per l'anno successivo che altrimenti potresti farlo solo quando arriva il primo dell'anno e sarebbe un po' scomodo e noneroso.

    In più avrai a disposizione anche lo storico delle tessere assegnate ai soci anno per anno e con questa informazione puoi ricavare un dato statistico per socio e tesseramento negli anni.

    Non so se mi sono spiegato bene … però non vorrei che ti ritrovi a poter assegnare una sola tessera e solo quella dell'anno in corso.

  • Re: Generazione automatica records in sequenza

    L'impostazione di Silone mi sembra coerente. Quello che scrive By65Franco è chiaro e giusto ma ritengo che l'ID automatico di Access sulla tabella Tessere crei già un unico riferimento per l'accoppiata anno+numero tessera. Il problema che la ESD emetta stessi numeri in anni diversi è superato perchè ciò non è possibile in quanto sono le specifiche date dal CONI che non lo permettono.

    E' vero che le tessere per il nuovo anno in genere si comprano a fine dicembre dell'anno precedente, ma questo non creerà problemi in quanto nell'immissione nuove tessere l'anno viene richiesto e caricato manualmente.

    Ancora ringrazio tutti per la collaborazione e le tante dritte consigliate.

    Lunedì apro Access e parto con le idee molto più chiare.

    Viky

Devi accedere o registrarti per scrivere nel forum
12 risposte