Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

di il
18 risposte

Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

Buongiorno,
sto creando un db in access 2003 che per ogni persona mi controlla l'idoneità annuale. però , all'interno di questo arco di tempo ho necessità di verificare mensilmente i giorni di presenza. ad es:
marcello : inizio idoneità al lavoro il 01/01/2017 - - fine idoneità annuale 31/12/2017 -- presenza mese di gennaio 2017 è di 31 giorni.

Il mio problema è come impostare l'interrogazione relativa ai singoli mesi che comunque devono rientrare all'interno del periodo di idoneità.
E non so neanche come fare per chiedere il conteggio di un singolo mese.
spero di essere stato sufficientemente chiaro.
grazie anticipatamente e buona giornata

18 Risposte

  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    Esponi chiaramente:
    - nomi propri di tutte le tabelle
    - nomi propri di tutti i campi di ogni tabella con indicazione della chiave primaria
    - le relazioni
    - rispiega tutto usando i nomi propri di tabelle e campi
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    Tabella personale: id_personale (chiave primaria) ; cognome; nome; ufficio;data_nascita
    tabella idoneita: id_idoneita (chiave primaria); data_si_idoneita; data_no_idoneita; motivazione; ke_personale

    la tabella personale è in relazione 1 a molti con la tabella idoneità (una persona ha più di una data di idoneita) id_personale=ke_personale.

    Mensilmente devo contare i giorni di idoneità di una persona. E questo lo posso fare solo se questo mese che io conteggio si trova in un intervallo di tempo dell'anno solare in cui la persona ha avuto l'idoneità.

    es: bianchi mario - ufficio amministrazione - 01/04/1967
    idoneo il 18/02/2017 - data non idoneità il 22/11/2017 - motivazione infortunio

    mi serve una query che se io chiedo i giorni di idoneità dal 01/06/2017 al 30/06/2017 il risultato deve essere 30 (giorni di piena idoneità)
    mentre se chiedo i giorni di idoneità dal 01/11/2017 al 30/11/2017 il risultato deve essere 22 (22 giorni di idoneità di novembre meno gli 8 gg. di non idoneità)

    grazie.
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    Potrei sbagliarmi, ma io forse non gestirei la questione "idoneità"/"non idoneità" con 2 campi in una tabella Idoneità.
    La mia linea di pensiero punterebbe a una gestione diversa di questa questione, ma ho bisogno di capire meglio qualcosa del "tuo" campo professionale.
    Che cos'è questa "idoneità" che vorresti tracciare?
    Perché una Persona ha un "periodo" di idoneità? Perché poi non ce l'ha più?
    Potresti fare più di un esempio?
    Scusa queste domande, per te forse banali, ma servono a me per capire meglio il bandolo della matassa.
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    Certamente, ti espongo ciò che mi serve nello specifico.
    ogni persona, annualmente , viene sottoposta a una visita medica nella quale viene dichiarata l'idoneità per un anno .
    Però, se questa persona, nell'arco del periodo di idoneità , ha un incidente sul lavoro e non può più lavorare,l'idoneità si interrompe e la persona in questione viene dichiarata non idonea.
    Successivamente, quando si riprende dall'infortunio, viene di nuovo dichiarata idonea per il lavoro.
    spero di essere stato chiaro , e comunque molto probabilmente ho organizzato male il db
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    E comunque, siccome mensilmente devo comunicare all'ufficio competente i giorni di idoneità di ciascuna persona,
    mi serve contare mensilmente i giorni di effettiva idoneità nell'arco di quello specifico mese
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    Io gestirei così le tabelle:

    Persone: OK

    Fatti
    IDFatto
    DataFatto
    Fatto (qui ci scrivi la motivazione, ossia Idoneità, Infortunio...)
    IDPersona (FK)

    La questione se una Persona è "in corso di Idoneità" o "non è in corso di idoneità" dovrebbe essere rilevato da una query che preleva la DataFatto più recente e, anche in base al valore di Fatto, prenda in esame la DataScadenzaIdoneità. Quest'ultima non deve essere un valore digitato dall'utente ma calcolato da una query.

    P.S.: Ho chiamato io la tabella Fatti e il campo Fatto. Se preferisci una denominazione più elegante...vedi tu...non so Eventi...
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    Si, certamente. penso che anche così può funzionare bene.
    Però il problema che mi rimane è il seguente:
    se bianchi mario acquisisce l'idoneità il 1/1/2017 e la mantiene fino al 31/12/2017,
    e giorgio verdi acquisisce l'idoneità dal 01/01/2017 al 22/05/2017 (e la perde a causa di un infortunio sul lavoro)
    ed io devo stampare il rendiconto mensile di maggio 2017 ,
    come faccio a fare apparire il seguente report? quale interrogazione posso fare?

    nome e cognome giorni di idoneità a maggio note
    mario bianchi 30
    giorgio verdi 22 infortunio sul lavoro
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    Devo esserti sincero che le idee chiare-chiare non le ho nemmeno io. Però proviamo a ragionare a piccoli passi.

    OsvaldoLaviosa ha scritto:


    Fatti
    IDFatto
    DataFatto
    Fatto (qui ci scrivi la motivazione, ossia Idoneità, Infortunio...)
    IDPersona (FK)
    Questa tabella potrebbe essere migliorata. Il campo Fatto potrebbe essere rinominato in Motivazione. Poi si potrebbe aggiungere un campo di tipo Sì/No che chiamerei Idoneo.
    Ne consegue che gli ULTIMI record (Max([DataFatto])) di ogni Persona ci diranno se Tizio è Idoneo o no. Non basta perché c'è anche da considerare la DataScadenza. Dopo un Anno e comunque dopo una certa DataScadenza (mo dobbiamo vedere come calcolarla), se la Persona non si sottopone a controllo perde comunque l'idoneità. Direi che quest'ultimo aspetto va gestito diversamente.
    Con quale valore in Motivazione vorresti che venisse ricalcolata la DataScadenzaIdoneità?
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    Anche come hai scritto tu. Potrei anche scrivere "scadenza idoneità" - non è un problema.
    Sinceramente potrei fare 2 query dove in una inserisco tutti gli idonei (e perciò avrebbero il mese intero di idoneità) e nell'altra tutti quelli che hanno avuto problemi e a questo punto sarebbe "is full" la data di non idoneità.
    poi potrei fare una accodamento delle due query.
    Ma il mio vero dubbio è come fare contare i giorni di idoneità con data che inserisco io. (dovrei fare una query con due campi di inizio conteggio e fine conteggio . ma non mi ricordo come si fa)
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    Non riesco ad afferrare il tuo intero progetto...c'è ancora qualcosa in cui mi perdo.
    Vorrei sapere se tu tracci soltanto questi "fatti fondamentali":
    Visita=Idoneo
    Visita=NonIdoneo
    Infortunio=NonIdoneo
    o ci sono altre casistiche che possono determinare l'Idoneità?
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    Fino a qua mi hai risposto. e va bene in quanto provvedo a utilizzare una sola casella per scrivere i vari casi di idoneità.
    siccome alla fine di ogni mese devo stampare il seguente report:

    MESE DI MAGGIO
    cognome________nome________giorni-idoneità
    Rossi___________Mario___________30
    Verdi___________Giorgio_________22

    il mio problema diventa il seguente: come faccio a fare una query dove chiedo il conteggio del mese di maggio? tu come faresti?
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    Non ci posso arrivare a creare questo report perché non ho ancora chiaro come intendi tracciare l'Idoneità di ogni Persona. Perché se Rossi Mario è previsto Idoneo da 4/2/2018 a 4/2/2019 e poi si infortuna il 5/5/2018...in quest'ultimo giorno non so ancora per quanti giorni mi resta "inattivo"--->NonIdoneo e...boh!...non riesco ad andare avanti...nel senso che anche quella tabella Fatti con il campo Idoneo non so se esaudisce a quello che ti prefiggi.
    Mi piacerebbe se intervenisse qualche altro utente, perché mi sto perdendo in qualche bicchier d'acqua, oppure la tua descrizione manca di qualche pezzo che io non riesco a ritrovare.
    La mia domanda del post precedente è lecita per capire se sto poggiando su solide basi tabellari oppure no.
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    In generale, dovrai stabilire dei criteri per la idoneità o meno nel periodo da elaborare (creando una struttura in grado di gestire tali dati).
    Pertanto, ipotizzando che a te interessa una situazione periodica (come quella mensile) dovrai stabilire lo status negli intervalli a cui è sottoposto un soggetto.
    Ad esempio per un soggetto (che dovrà essere ripetuto per tutti i nominativi dell'archivio):
    Rossi Mario risulta inizialmente idoneo dal 1/1/2018 al 31/12/2018, successivamente si riscontra non idoneo dal 20/1/2018 (e non si ha una ulteriore data di termine per tale condizione, quindi è ipotizzabile fino alla data odierna).
    Un algoritmo è stabilire il mese di cui vuoi la situazione, ipotizziamo gennaio 2018 (quindi dal giorno 1 al 31 del mese); per cui si dovranno valutare i giorni di idoneità (se presenti per il periodo in esame) e quelli di non idoneità (nel caso dal 20/1/2018 al 31/1/2018 con 11 giorni) per cui avrai 31 - 11 = 20 giorni di idoneità (e 11 di non idoneità) e così via per, eventuali periodi di approvazione o remissione della idoneità del soggetto nel periodo.
    Per effettuare ciò, una semplice query non è praticabile ma dovrai elaborare del codice VBA che cicli nel recordset e, per ciascun soggetto, determini, in base al periodo, i giorni di idoneità o meno presentandone i dati.
  • Re: Interrogazione query con access 2003 relativa al conteggio dei giorni in un intervallo definito sul momento.

    La risposta è molto esauriente però il problema è che io il VBA non lo conosco. Adesso, secondo le indicazioni che mi hai dato, proverò a capire come strutturare le interrogazioni. Ma non mi sembra cosa molto facile. Vado a studiare le basi per vedere Se riesco a creare un codice che fa al caso mio
Devi accedere o registrarti per scrivere nel forum
18 risposte