Query aggiornamento con criteri

di il
10 risposte

Query aggiornamento con criteri

Buongiorno a tutti

chiedo il vostro supportoper un semplice db che sto creando per tenere traccia delle date dei corsi dei dipendenti.
Il mio db è strutturato come segue
3 Tabelle annidate come segue:
- Personale: in cui riporto ID(chiave primaria), Cognome, Nome, CF
- Corso 1: ID(chiave primaria), data corso, prossima scadenza corso
- Corso 2: ID(chiave primaria), data corso, prossima scadenza corso
Le 3 tabelle sono legate con relazione 1 to 1 con ID.

Sino ad ora la scadenza del corso 2 era 5 anni, mentre dal 2021 sarà di 4 anni.

Ho creato due query di aggiornamento legate alle tabelle Corso 1 e Corso 2.

Come faccio, nella query del Corso 2, ad inserire il criterio che se la data di effettuazione è inferiore al 1/1/2021 la scadenza è di 5 anni mentre se è superiore o uguale a 1/1/2021 sarà di 4 anni?

Scusate,magari vi sembrerà una domanda sciocca ma non riesco ad uscirne.

Grazie in anticipo a chi mi fornirà supporto

10 Risposte

  • Re: Query aggiornamento con criteri

    daryetto ha scritto:


    3 Tabelle annidate come segue:
    - Personale: in cui riporto ID(chiave primaria), Cognome, Nome, CF
    - Corso 1: ID(chiave primaria), data corso, prossima scadenza corso
    - Corso 2: ID(chiave primaria), data corso, prossima scadenza corso
    Le 3 tabelle sono legate con relazione 1 to 1 con ID.
    Errori:
    1. (formale) Nomina i campi ID in modo esplicito: IDPersona, IDCorso
    2. Non devi avere 2 tabelle Corso1 e Corso2, ma unica tabella Corsi, poi aggiungi un campo di "discriminazione" NumeroCorso.
    3. Ti manca il campo IDPersona (FK) nella tabella Corsi.
    4. La relazione deve essere di tipo uno-a-molti, cioè Persone.IDPersona uno-a-molti IDPersona.
  • Re: Query aggiornamento con criteri

    OsvaldoLaviosa ha scritto:


    daryetto ha scritto:


    3 Tabelle annidate come segue:
    - Personale: in cui riporto ID(chiave primaria), Cognome, Nome, CF
    - Corso 1: ID(chiave primaria), data corso, prossima scadenza corso
    - Corso 2: ID(chiave primaria), data corso, prossima scadenza corso
    Le 3 tabelle sono legate con relazione 1 to 1 con ID.
    Errori:
    1. (formale) Nomina i campi ID in modo esplicito: IDPersona, IDCorso
    2. Non devi avere 2 tabelle Corso1 e Corso2, ma unica tabella Corsi, poi aggiungi un campo di "discriminazione" NumeroCorso.
    3. Ti manca il campo IDPersona (FK) nella tabella Corsi.
    4. La relazione deve essere di tipo uno-a-molti, cioè Persone.IDPersona uno-a-molti IDPersona.
    Buon pomeriggio Osvaldo

    grazie per il consiglio, ho ristrutturato il file come indicato.
    Mi rimane il problema del calcolo della nuova data in base alla data di effettuazione del corso, ho provato ad inserire la seguente espressione nel campo update ma non mi da il risultato sperato

    IIf([Courses]![Driving Licence]<=12/31/2020,[Courses]![Driving Licence next due date]=[Courses]![Driving Licence]+1825,[Courses]![Driving Licence next due date]=[Courses]![Driving Licence]+1460)

    Per crearla ho utilizato il generatore di espressioni ma non riesco a capire quale sia l'errore, qualche suggerimento?

    Ringrazio in anticipo per l'eventuale supporto
  • Re: Query aggiornamento con criteri

    Non ti seguo. Sebbene ti ho suggerito come rimodellare lo scenario tabelle, ho bisogno di conoscere esattamente tutti i loro nomi propri e conseguenti campi, quindi anche le relazioni. Poi rispiega cosa vuoi fare usando i nomi propri e raccontando un esempio pratico.
  • Re: Query aggiornamento con criteri

    Mancano i cancelletti che delimitano la data:
    IIf([Courses]![Driving Licence]<=#12/31/2020#,[Courses]![Driving Licence next due date]=[Courses]![Driving Licence]+1825,[Courses]![Driving Licence next due date]=[Courses]![Driving Licence]+1460)
  • Re: Query aggiornamento con criteri

    Allora ricapitolando

    la necessità è quella di tenere traccia delle scadenze di alcuni corsi che devono essere fatti. Il db è suddiviso in due tabelle

    Tabella Personale
    - ID Persona
    - Cognome
    - Nome

    Tabella Corsi (inserisco solo un corso per praticità)
    - ID Persona
    - Patente (campo data)
    - Prossima Scadenza patente (campo data)

    Le tabelle sono legate tra loro tramite ID Persona con relazione 1 a molti

    Query di aggiornamento che ricalcola il campo prossima scadenza patente all'immissione di una nuova data nel campo Patente.
    In questo momento c'è una fase di transizione perchè se nel campo Patente è presente una data inferiore a 1/1/2021 la ricorrenza è ogni 5 anni, se è successiva allora la ricorrenza è ogni 4 anni.

    Per poter effettuare questo calcolo ho scritto l'espressione che riporto qui sotto:

    IIf([Corsi]![Patente guida]<=12/31/2020,[Corsi]![Prossima scadenza patente]=[Corsi]![Patente guida]+1825,[Corsi]![Prossima scadenza patente]=[Corsi]![Patente guida]+1460)

    Ma da come risultato una data errata.
    Ho sbagliato altro?
  • Re: Query aggiornamento con criteri

    Le date... si usano come DATE e la sintassi è specifica.
  • Re: Query aggiornamento con criteri

    Stifone ha scritto:


    Mancano i cancelletti che delimitano la data:
    IIf([Courses]![Driving Licence]<=#12/31/2020#,[Courses]![Driving Licence next due date]=[Courses]![Driving Licence]+1825,[Courses]![Driving Licence next due date]=[Courses]![Driving Licence]+1460)
    Grazie Stifone per il suggerimento

    ho provato ad inserire i cancelletti come riportato ma ancora non funziona
  • Re: Query aggiornamento con criteri

    @Alex ha scritto:


    Le date... si usano come DATE e la sintassi è specifica.
    Perdona la mia ignoranza Alex....non ho capito cosa intendi
  • Re: Query aggiornamento con criteri

    daryetto post ha scritto:


    Tabella Corsi (inserisco solo un corso per praticità)
    - ID Persona
    - Patente (campo data)
    - Prossima Scadenza patente (campo data)
    Io avrei da obiettare su questa tabella:
    1. Non vedo un campo IDCorso (non indispensabile, ma...)
    2. La tabella Corsi dovrebbe tracciare uno "storico" dei Corsi effettuati da una Persona?
    3. Conseguenza del punto 2. piuttosto che tracciare in tabella la "prossima scadenza", non dovrebbe essere una query a sviluppare ciò?
  • Re: Query aggiornamento con criteri

    Se le date sono recuperate dal sistema è tutto in Accezione anglosassone, come giustamente ti ha esposto Stifone con la Data fissa dove avrai NOTATO l'inversione gg/mm, ma se sono recuperate dall'esterno... no.
    Oltretutto se devi operare sulle date, dovresti sfruttare le Funzioni preposte alla loro manipolazione, nel tuo caso DateAdd('d',1460,[TuaData]) e questo toglie i dubbi su cosa vada a sommare...
Devi accedere o registrarti per scrivere nel forum
10 risposte