Sommare dei gg ad un campo data e scrivere il risultato in u

di il
10 risposte

Sommare dei gg ad un campo data e scrivere il risultato in u

Buonasera a tutti

mi rimetto a voi nuovamente per un problemino riguardo ad una banale somma di giorni ad una data
In una tabella ho i seguenti campi:

Risk Ass
Date
nella seconda tabella

Risk Ass (in relazione con l'omologo della tabella precedente)
status
collect analysis

quello che vorrei ricreare nel report riepilogativo (che contiene tutti i vari risk ass) è quanto segue:

in base al valore del campo status
-se "In Progress" vorrei che venissero aggiunti 14gg al valore DATE e che venisse scritto nel campo "Collect Analysis"

-se "ACTIVE" nel campo "Collect Analysis" non deve comparire nessun valore

ho provato a creare una query di selezione inserendo il criterio status ma non sono riuscito ad ottenere il risultato ottenuto.
Ovviamente non voglio la pappa pronta ma se riusciste ad indirizzarmi sarei molto grato

A prestoe grazie in anticipo per il supporto

10 Risposte

  • Re: Sommare dei gg ad un campo data e scrivere il risultato in u

    Sicuramente devi lavorare su una query di base da dare al futuro report.
    Per aggiungere 14 gg. alla data devi sfruttare la funzione DateAdd.
    Per rispondere ai 2 Se, devi usare la funzione IIf sfruttando i suoi 2 argomenti di restituzione valore Se è Vero e Se è Falso.
    Dai un'occhiata alla guida in linea per tutte queste funzioni.
  • Re: Sommare dei gg ad un campo data e scrivere il risultato in u

    Grazie Osvaldo come nel caso precedente mi hai indirizzato "sulla retta via"; sono riuscito a risolvere il problema con una espressione creata tramite il generatore
    che posto (magari a qualche neofita come me può tornare utile l'esempio)

    IIf([REGISTER]![STATUS]="IN PROGRESS";[RISK ASSESMENT LIST]![DATE]+14;"")

    La funzione DateAdd non sono riuscito ad inserirla (non capisco il motivo), tuttavia la formula sopra riportata funziona.

    Ora ho inciampato in un nuovo problema:

    devo creare sempre nella medesima query un campo data che in base al valore di un altro campo aggiunge tre diversi valori di giorni....mi spigo meglio

    in base al valore del campo "risk" che può avere valori da 1A a 1D, da 2A a 2D fino a 5A a 5D

    se il valore è compreso tra 1A E 2D al campo "DATA" devo aggiungere 180gg
    se il valore è compreso tra 3A E 4D al campo "DATA" devo aggiungere 60gg
    se il valore è compreso tra 5A E 5D al campo "DATA" devo aggiungere 45gg

    ho provato a creare un'espressione del genere ma funziona se inserisco solamente un parametro (non capisco come ussare la funzione Or)

    Espr2: IIf([RISK ASSESMENT LIST]![RISKbeforeEvaluation]="5A" Or "5B" Or "5C";[RISK ASSESMENT LIST]![DATE]+45;"")

    Inoltre non saprei come inserire le altre due condizione dei 180 gg e 60gg

    Grazie ancora in anticipo per il supporto
  • Re: Sommare dei gg ad un campo data e scrivere il risultato in u

    daryetto ha scritto:


    ...

    IIf([REGISTER]![STATUS]="IN PROGRESS";[RISK ASSESMENT LIST]![DATE]+14;"")

    La funzione DateAdd non sono riuscito ad inserirla (non capisco il motivo), tuttavia la formula sopra riportata funziona.
    Scrivo a memoria:
    IIf([REGISTER]![STATUS]="IN PROGRESS";DateAdd("g"; 14; [RISK ASSESMENT LIST]![DATE]);"")
    Attento all'uso del nome campo [Date] perché è anche una parola riservata, devi sempre racchiuderlo tra parentesi quadrate.

    daryetto ha scritto:


    Ora ho inciampato in un nuovo problema:

    devo creare sempre nella medesima query un campo data che in base al valore di un altro campo aggiunge tre diversi valori di giorni....mi spigo meglio

    in base al valore del campo "risk" che può avere valori da 1A a 1D, da 2A a 2D fino a 5A a 5D

    se il valore è compreso tra 1A E 2D al campo "DATA" devo aggiungere 180gg
    se il valore è compreso tra 3A E 4D al campo "DATA" devo aggiungere 60gg
    se il valore è compreso tra 5A E 5D al campo "DATA" devo aggiungere 45gg
    ...
    La questione si fa più complessa. A mio avviso dovresti creare una tabella dove indicare per ogni [Risk] i giorni da aggiungere, mettendo questa tabella in relazione uno a molti con [RISK ASSESMENTE LIST]. In questo modo puoi sfruttare l'autolookup per recuperare i giorni da aggiungere. Demandare tutto ad una istruzione in una query che diventa quindi abbastanza complessa ritengo non sia una soluzione saggia (anche se fattibile).
  • Re: Sommare dei gg ad un campo data e scrivere il risultato in u

    Ciao Phil

    grazie per le risposte.....se la prima l'ho capita...la seconda (per mia ignoranza) proprio no...ho provato a cercare la funzione "autolookup" ma non la trovo; potresti gentilmente darmi qualche dritta su questa funzione?
  • Re: Sommare dei gg ad un campo data e scrivere il risultato in u

    daryetto ha scritto:


    Ciao Phil

    grazie per le risposte.....se la prima l'ho capita...la seconda (per mia ignoranza) proprio no...ho provato a cercare la funzione "autolookup" ma non la trovo; potresti gentilmente darmi qualche dritta su questa funzione?
    L'autolookup non è una "funzione" da scrivere ma l'operazione che esegue Access quando si creano le relazioni (tra tabelle o nelle query)
    Esempio di tabella tblRiskAss
    
    IDRiskAss NrGiorni
    1A           180
    1B           180
    1C           180
    1D           180
    2A           ....
    ...
    5D           45
    in cui IDRiskAss è chiave primaria.
    Quando metti in relazione questa tabella con Risk Assesment List, il campo RiskAss diventa chiave esterna con tblRiskAss, nella query che contiene (almeno) queste due tabelle, indicando [tblRiskAss].[NrGiorni] verrà preso automaticamente quello relativo all'IDRiskAss della relazione. Autolookup: Access cerca automaticamente.
    La creazione di una nuova tabella di permette maggiore flessibilità nel caso in cui venissero modificati i giorni o venissero creati nuovi (ID)RiskAss e impedisce l'uso di RiskAss non codificati (6A, 1F e simili). Anzi... secondo me una tabella del genere c'è già. Quanto conosci quel db?
  • Re: Sommare dei gg ad un campo data e scrivere il risultato in u

    Premetto il db lo sto costruendo cercando di ricreare quanto già fatto in un file excel....data la mia scarsa conoscenza Access preferirei rimanere sulla costruzione di un'espressione....l'autolookup mi risulta difficile da comprendere

    mi chiedo è possibile concatenare più "or" all'interno di IIF?
  • Re: Sommare dei gg ad un campo data e scrivere il risultato in u

    daryetto ha scritto:


    mi chiedo è possibile concatenare più "or" all'interno di IIF?
    Sì. Prova.

    daryetto ha scritto:


    Premetto il db lo sto costruendo cercando di ricreare quanto già fatto in un file excel....data la mia scarsa conoscenza Access preferirei rimanere sulla costruzione di un'espressione....l'autolookup mi risulta difficile da comprendere
    Questo discorso ha una sequenza logica molto frequente. Ma da evitare completamente! Dimentica Excel. Non comprendi la funzionalità dell'autolookup perché non conosci Access (e/o il funzionamento dei db più comuni)
    Pensa bene a quello che stai affrontando, temo senza averne la preparazione sufficiente. Il forum può aiutarti ma non insegnarti a pensare un db. Prima devi avere le basi, solide.
    Per tornare al caso concreto, creerai una IIf "stratosferica" per una cosa che Access farebbe quasi "da solo". Pian piano i problemi diventeranno insormontabili, con la logica di Excel. Devi fare il salto di qualità, altrimenti ti ridurrai ad usare Access per i raggruppamenti, i totali e i report.
  • Re: Sommare dei gg ad un campo data e scrivere il risultato in u

    Daryetto, nell'esporre il problema hai fatto molte considerazioni e dichiarato di voler eseguire ora questa espressione, ora quella...per poi mettere tutto insieme. Considera che già IIf presenta le sue insidie sintattiche e spesso anche il sottoscritto si perde nei suoi meandri. Onde evitare di inciampare in questi piccoli e fastidiosi inconvenienti, suggerisco sempre di suddividere su più colonne le espressioni più semplici per poi richiamare le colonne con il nome di queste ultime. Non riesco a seguire tutta la logica che avresti impiantato, ma riguardo DateAdd io avrei fatto così:
    1. In visualizzazione struttura query, in una colonna vuota, scrivi:
    Data14: DateAdd("g"; 14; [Date])
    2. IIf la costruisci sulla colonna Data14 direttamente

    Anche per me vale:
    - nominare un campo [Date] potrebbe creare problemi...prova a sostituirlo con altro nome oppure lo devi scrivere sempre entro parentesi quadre
    - la logica Excel e quella di Access sono completamente diverse
  • Re: Sommare dei gg ad un campo data e scrivere il risultato in u

    Buonasera Osvaldo e Phil
    vi ringrazio ancora per l'attenzione posta alle mie domande; sono pienamente cosciente che sono richieste articolate e che le logiche dei due programmi siano completamente diverse come già detto dipende molto dalle mie limitate conoscenze...cmq sono riuscito a risolvere usando vari IIF concatenati tra loro.

    Ora mi sorge un nuovo dubbio: con un pulsante in una maschera principale faccio comparire/scomparire una sottomaschera da compilare all'occorrenza il nuovo intoppo è che vorrei far comparire / scomparire degli altri campi dalla maschera principale nella stessa maniera della sottomaschera: se questa è visualizzata anche gli altri campi vengono visualizzati altrimenti no

    ho provato con il seguente codice su "attivato":

    Private Sub Comando101_GotFocus()
    Form![Sottomaschera RISK ASS].Visible = True
    If(Form![Sottomaschera RISK ASS].Visible = True) then
    Form![Maschera RISK ASS LIST]![RISKbefEvAL].VISIBLE = True
    End If
    End Sub

    dove RISK ASS LIST è la maschera principale e RISKbefEval è la casella combinata da far comparire/scomparire nello stesso momento della sottomaschera

    Purtroppo funziona solo per la sottomaschera e non per la casella combinata....dove sbaglio?

    Vi ringrazio ancora per l'eventuale supporto
  • Re: Sommare dei gg ad un campo data e scrivere il risultato in u

    daryetto ha scritto:


    ...
    Ora mi sorge un nuovo dubbio: con un pulsante in una maschera principale faccio comparire/scomparire una sottomaschera da compilare all'occorrenza il nuovo intoppo è che vorrei far comparire / scomparire degli altri campi dalla maschera principale nella stessa maniera della sottomaschera: se questa è visualizzata anche gli altri campi vengono visualizzati altrimenti no
    ...
    Vi ringrazio ancora per l'eventuale supporto
    La richiesta è troppo diversa dal thread principale, devi trattarla in un thread nuovo.
    A meno che tu non riesca a gestire il tutto guardando qui
    http://forum.masterdrive.it/access-79/access-disabilitazione-controlli-condizionata-47841/
    http://forum.masterdrive.it/access-79/vba-access-attivazione-campi-casella-controllo-problema-scorrimento-record-58813/
    http://forum.masterdrive.it/access-79/abilitazione-disabilitazione-campo-79181/
    http://forum.masterdrive.it/access-79/abilitare-disabilitare-campo-in-modo-alternativo-ad-elenco-righe-codice-on-load-90527/
    http://www.iprogrammatori.it/forum-programmazione/access/abilitare-disabilitare-dati-con-campo-booleano-t15362.html
    (chiedo scusa a iprogrammatori.it ma la ricerca ultraveloce ha dato più risultati su un altro forum... sicuramente è stato già trattato molte più volte anche qui, è un "difetto di ricerca mio" senza dubbio)
    Segnalo inoltre questa pagina dove troverai come devi riferirti alla sottomaschera per non visualizzarla

    http://forum.masterdrive.it/access-79/codice-routine-if-then-87292/#post319085
    (Enabled e Visible sono entrambe proprietà di un controllo)
Devi accedere o registrarti per scrivere nel forum
10 risposte