Criterio query con riferimento ad un altro campo

di il
6 risposte

Criterio query con riferimento ad un altro campo

Salve,

in una query avrei bisogno di far valutare un criterio solo in base al valore di un altro campo ma... non so se è una cosa fattibile.

Provo a spiegarmi meglio:
Ho una tabella relativa a degli operai in cui per ogni record ci sono molti campi di tipo data che si riferiscono alla data in cui è stato conseguito un determinato certificato di abilitazione (es.: patentino gru, primo soccorso, antincendio, etc.)

La mia esigenza è di portare all'attenzione dell'utente quegli operai i cui certificati sono scaduti.
Ho creato una query in cui genero delle colonne calcolate (scadenza patentino gru, scadenza primo soccorso, etc.)

Es.: ScadenzaGru: DateAdd("aaaa";1;[PatentinoGru])

e, volendo mostrare i certificati scaduti o che scadono entro il prossimo mese, in ogni colonna calcolata ho impostato come criterio:

<DateAdd("m";1;Date())

Tutto sembra funzionare bene però ho uno dei certificati (RLS) che dopo essere stato conferito scade dopo 3 anni e poi ogni anno.
Ho pensato di creare due campi separati "1RLS" (relativo al primo certificato) e "AggiornamentoRLS". Ho impostato la scadenza del primo dopo 3 anni e quella del secondo dopo 1 anno.

Vorrei quindi escludere la scadenza del "1RLS" qualora ci sia una data nel campo "AggiornamentoRLS" in modo da non mostrare gli operai che hanno un certificato annuale valido ma quello "1RLS" scaduto.

ho provato inserendo nel campo criterio della colonna "1RLS":

IIf(IsNull([AggiornamentoRLS]);<DateAdd("m";1;Date());)

ma non mi mostra i record che hanno "1RLS" scaduto

esiste un modo ?

6 Risposte

  • Re: Criterio query con riferimento ad un altro campo

    Al momento ho risolto in questo modo:

    Scadenza1RLS: Iff(IsNull([AggiornamentoRLS]);DateAdd("aaaa";3;[1RLS]);"")

    In questo modo se il campo AggiornamentoRLS contiene una data la scadenza 1RLS non viene più calcolata

    Sono comunque curioso sulla possibilità di far riferimento ad un altro campo in un criterio di query
  • Re: Criterio query con riferimento ad un altro campo

    Guarda che è completamente sbagliata la struttura. Non si aggiunge un campo per ogni corso, ma si crea un record per ogni corso.
    La tabella dovrebbe avere un ID, il nome dell'operaio, il tipo di corso (in relazione con una tabella dei corsi) e la data di conseguimento.

    Nella tabella dei corsi, imposti il nome del corso, la validità più tutte le info relative che ti possano interessare e poi con una join tiri fuori tutti i corsi che sono scaduti.
  • Re: Criterio query con riferimento ad un altro campo

    Ciao Sgrubak,

    grazie tante per la tua risposta.
    Purtroppo, però, non riesco a seguire il tuo ragionamento.

    Tieni presente che per ogni corso di solito c'è associato un solo operaio. E' come se avessero tante patenti specializzate che hanno, ovviamente, conseguito in tempi diversi.

    Anche seguendo però il tuo consiglio, e creando una tabella corsi alla quale associare gli ID dei partecipanti, non mi è chiaro poi come gestire la questione delle due scadenze (simile alla revisione di un auto che la prima volta scade a 4 anno dalla data di immatricolazione e poi ogni 2).

    Grazie ancora e buona giornata!
  • Re: Criterio query con riferimento ad un altro campo

    Ho letto-riletto più volte la discussione e confesso di non aver capito quasi nulla...ci sta pure la mia nota durezza di comprendonio. Tuttavia se Sgrubak ti ha rilevato che hai problemi alla base riguardo la STRUTTURAZIONE TABELLE...si tratta poi di una impossibilità di confrontarsi tra utenti del forum Access abituati a considerare i database e Access stesso immersi in una progettazione NORMALIZZATA in partenza. In mancanza di questo elemento, ogni discussione risulta vana e qualsiasi tentativo di trovare una soluzione rischia di diventare una "pezza a colori" che oggi può funzionare, ma creerà problemi poi.
  • Re: Criterio query con riferimento ad un altro campo

    VincMc ha scritto:


    Tieni presente che per ogni corso di solito c'è associato un solo operaio. E' come se avessero tante patenti specializzate che hanno, ovviamente, conseguito in tempi diversi.
    Esattamente, ma non è che ogni operaio ha tutte le patenti. Quindi nella tabella avrai tanti record quante saranno tutte le patenti di tutti gli operai. Anche perché potresti avere il caso (improbabile lo ammetto ma pur sempre possibile) che un operaio "salti" un aggiornamento per poi fare il successivo. Con la tua struttura non lo gestisci... E se una patente diventa obsoleta? Avrai dei campi che resteranno sempre inutilizzati. O se saltano fuori nuove patenti? Dovrai modificare la struttura della tabella, invece che aggiungere solo un record nella tabella delle patenti.

    VincMc ha scritto:


    non mi è chiaro poi come gestire la questione delle due scadenze
    Credo dovresti gestirle come due corsi diversi, perché in effetti quello sono. Nella tabella dei corsi, ogni record descriverà il corso sia per il nome che per la validità, quindi avrai due record: uno per "RLS", con validità tre anni e uno con "RINNOVO RLS" con validità un anno.

    Avendo fissato queste informazioni, penserei ad inserire i record nella tabella OperaiCorsi: inserisci Sgrubak che ha fatto il corso RLS oggi e Pippo che ha fatto il rinnovo tredici mesi fa. Per sapere i corsi scaduti, basta fare una select che prelevi tutti gli operai che hanno (oggi - DataConseguimentoCorso) > validità.

    Poi si può variare ancora la struttura per rendere il tutto ancora più scalabile e mirato, ma dipende cosa vuoi realmente ottenere. Magari anche una struttura così semplificata ti è sufficiente per gestire la situazione.
  • Re: Criterio query con riferimento ad un altro campo

    OsvaldoLaviosa e Sgrubak grazie del vostro tempo.

    Sgrubak ho perfettamente capito adesso l'utilità di creare una tabella corsi (soprattutto per non creare tanti campi per ogni operaio che probabilmente rimarranno sempre vuoti dato che alcune abilitazioni le fanno davvero in pochi) e la correttezza di strutturare un database relazionale in questo modo.

    Vorrei ulteriormente ringraziare quanti di voi in questo periodo trovano il tempo di rispondere a domande e dubbi di persone che come me hanno cominciato ad appocciare Access e VBA
Devi accedere o registrarti per scrivere nel forum
6 risposte