Calcolo giorni rimanenti. #Funz!

di il
16 risposte

Calcolo giorni rimanenti. #Funz!

Buongiorno a tutti.

Sto sclerando dietro a quella che dovrebbe essere una semplicissima formula in access.

Ho una query… tra i vari campi, c'è il campo "DATA FINE"  (ovvero il termine ultimo di un titolo autorizzativo. Un altro campo è chiamato “GIORNI RIMANENTI” che dovrebbe contenere la differenza aggiornata tra la data odierna, Date(), e la data indicata manualmente nel campo DATA FINE.

Tramite visualizzazione struttura, nel campo “GIORNI RIMANENTI” inserisco: GIORNI RIMANENTI:=DateDiff("\d";Date();[DATA FINE])

Ma il risultato è “#Funz!”

Dove sbaglio?

grazie

16 Risposte

  • Re: Calcolo giorni rimanenti. #Funz!

    27/09/2023 - drt87 ha scritto:


    GIORNI RIMANENTI:=DateDiff("\d";Date();[DATA FINE])

    Togli = e \
    GIORNI RIMANENTI: DateDiff("d";Date();[DATA FINE])

    Funzione DateDiff - Supporto tecnico Microsoft

  • Re: Calcolo giorni rimanenti. #Funz!

    Ciao.

    Continua a darmi lo stesso tipo di errore.

  • Re: Calcolo giorni rimanenti. #Funz!

    Nella query hai importato la tabella che contiene [DATA FINE]?
    Nella griglia hai incluso il campo [DATA FINE]?
    …prova a cambiare “d” in “g”.
    Potresti mostrare una immagine della visualizzazione struttura query?

  • Re: Calcolo giorni rimanenti. #Funz!

    Ciao,

    quando vado ad inserire l'espressione nel campo “GIORNI RIMANENTI” della query, premendo invio, si cancella il nome della tabella dalla quale il campo “GIORNI RIMANENTI” proviene.

    Inserendo nuovamente il nome della tabella (si chiama RICHIESTE) e salvando la query, esce un errore “parentesi chiusa in eccesso: ) nell'espressione della query RICHIESTE.[DateDiff(”g";Date();[DATAFINE])]

    Nel campo però, attualmente, l'espressione inserita è GIORNI RIMANENTI: DateDiff("g";Date();[DATA FINE])

    Lo stesso problema è presente indicando “d” al posto di "g)

    A margine, anche il campo GIORNI RIMANENTI è nella tabella RICHIESTE

    ps: il forum non mi consente di pubblicare screenshot di pagina

  • Re: Calcolo giorni rimanenti. #Funz!

    il forum non mi consente di pubblicare screenshot di pagina

    Non hai il pulsante dell'immagine che permette di inserire appunto un file immagine?

    A parte questo, pubblica la SQL della query, così andiamo al punto, senza farci ingannare da QBE che traduce in italiano

    (sono in vena di screenshot)

    Togliamoci anche questo dubbio: vai nell'editor di Visual Basic (ALT + F11), sul menù apri Strumenti - Riferimenti. Verifica che le voci selezionate (con la spunta) non abbiano l'indicazione “MANCA” o simile.

  • Re: Calcolo giorni rimanenti. #Funz!

    Sì, il tastino ce l'ho, ma nel momento in cui faccio l'upload, esce fuori il messaggio "Couldn't upload file: Immagine.jpg."

    SQL della query:

    SELECT RICHIESTE.ID, RICHIESTE.prot, RICHIESTE.RICHIEDENTE, RICHIESTE.AUTORIZZATO, RICHIESTE.TARGA, RICHIESTE.[DATA INIZIO], RICHIESTE.[DATA FINE], RICHIESTE.OGGI, RICHIESTE.[GIORNI RIMANENTI], RICHIESTE.[VIA ROMA], RICHIESTE.[LUOGO NASCITA], RICHIESTE.[DATA NASCITA], RICHIESTE.[CITTA RESIDENZA], RICHIESTE.[LUOGO RESIDENZA], RICHIESTE.TELEFONO, RICHIESTE.ACCOGLIMENTO, RICHIESTE.[MARCA VEICOLO], RICHIESTE.[MODELLO VEICOLO], RICHIESTE.DURATA, RICHIESTE.PROPRIETARIO, RICHIESTE.[INDICAZIONE ACCOGLIEMENTO], RICHIESTE.[INDICAZIONE NON ACCOGLIMENTO]
    FROM RICHIESTE;

    nell'editor di Visual Basic sono flaggati: Visual Basic for Applications, Microsoft Access 15.0 Object Library, Ole Automation, Microsoft Access 15.0 Access database engine Object Library.

    Grazie 

  • Re: Calcolo giorni rimanenti. #Funz!

    Non vedo nella SQL il campo calcolato [GIORNI RIMANENTI]. Senza la formula usata per il suo calcolo, per quanto sbagliata che sia, non si può capire dov'è l'errore. Completa la query, come facevi prima, anche se dà errore, e postane la SQL.

    Vedo invece un campo OGGI. Per curiosità: a cosa serve?

  • Re: Calcolo giorni rimanenti. #Funz!

    Serve a riportare il giorno in cui è stato inserito un determinato record

    SELECT RICHIESTE.ID, RICHIESTE.prot, RICHIESTE.RICHIEDENTE, RICHIESTE.AUTORIZZATO, RICHIESTE.TARGA, RICHIESTE.[DATA INIZIO], RICHIESTE.[DATA FINE], RICHIESTE.OGGI, DateDiff("d",Date(),[DATA FINE]) AS [GIORNI RIMANENTI], RICHIESTE.[VIA ROMA], RICHIESTE.[LUOGO NASCITA], RICHIESTE.[DATA NASCITA], RICHIESTE.[CITTA RESIDENZA], RICHIESTE.[LUOGO RESIDENZA], RICHIESTE.TELEFONO, RICHIESTE.ACCOGLIMENTO, RICHIESTE.[MARCA VEICOLO], RICHIESTE.[MODELLO VEICOLO], RICHIESTE.DURATA, RICHIESTE.PROPRIETARIO, RICHIESTE.[INDICAZIONE ACCOGLIEMENTO], RICHIESTE.[INDICAZIONE NON ACCOGLIMENTO]
    FROM RICHIESTE;

    come ho già detto, non posso indicare la tabella richieste nel campo GIORNI RIMANENTI, se imposto l'espressione

  • Re: Calcolo giorni rimanenti. #Funz!

    28/09/2023 - drt87 ha scritto:


    DateDiff("d",Date(),[DATA FINE]) AS [GIORNI RIMANENTI]

    In QBE (la griglia in cui si costruiscono le query) devi scrivere

    [NomeCampoCalcolato]: DateDiff("g";...)

    perché come dicevo prima QBE capisce l'italiano e quindi il calcolo dei giorni tra due date vuole il parametro “g”. Quando passi in visualizzazione SQL diventa 

    DateDiff("d", ... ) AS [NomeCampoCalcolato]

    l'errore #Funz? è dovuto all'uso di “d” già in QBE che in SQL diventa “/d”, parametro che DateDiff non riconosce.

    E questa è una. 

    Edit del giorno successivo - 29/09/2023: ciò che segue, fino alla fine del post, non è giusto nella parte in cui dice che Date() non funziona. Ho riprovato su un db diverso ed andava alla perfezione, probabilmente il file su cui ho fatto le prove aveva qualche problema che metteva fuori uso Date(). Lascio comunque l'intervento per traccia storica. 

    Numero 2: se riesci ad usare la funzione Date() in una query trovo l'emoticon che ti porge la birra. Io non ci sono riuscito. Secondo me è sempre quel problema di “traduzione” (ormai incolpo tutto alla traduzione, su Access) che avviene nel passaggio tra QBE ed SQL.

    Se lo scrivi seguito dalle parentesi Date(), dice “Impossibile utilizzare nell'espressione la funzione immessa”, riportanto esempi che nulla hanno a che fare con Date(). Se si tolgono le parentesi tonde lo interpreta come campo o parametro della query e non trovandolo compare la solita finestrella che ne chiede l'immissione. Eppure ho scritto sia “a mano” sia attraverso il generatore di espressioni ma come qualcuno mi ha insegnato “il generatore sbaglia e lascialo sbagliare". Per questo è il “geneRRatore” quando scrivo io. Devo andare a rispolvere un SO e un Access in inglese per togliermi la curiosità? Si potrebbe anche fare.

    Workaround nr. 1 = crei una UDF che chiami anche banalmente fDate che altro non fa che restituire Date(). E' sufficiente per non far comparire in SQL o QBE quella parola che non digerisce. Essendo una UDF si può chiamare anche in una query.

    Workaround nr. 2 = ottieni lo stesso risultato di Date() con Fix(Now()). Now() restituisce data ed ora corrente. Fix toglie la parte decimale che corrisponde all'ora (rendendola 00:00:00)

    DateDiff("d", Fix(Now()),[DATA FINE]) AS [GIORNI RIMANENTI]

    Consiglio: non usare spazi nel nome dei campi, anche calcolati. Si può fare, vero, ma è meglio evitare gli spazi, a maggior ragione se non si è vincolati da nomi di campi che provengono da fonti esterne non modificabili.

  • Re: Calcolo giorni rimanenti. #Funz!

    Ho fatto vari test con DateDiff e anch'io non riesco a cavare un ragno dal buco del perchè non restituisce il numero di giorni richiesto da drt87.
    Ho invece volgarmente scritto così:
    GIORNI RIMANENTI: [DATA FINE] - Date()
    e funziona: Boh!

    Seguendo le istruzioni indicate qui
    Microsoft Access: come calcolare il tempo che intercorre fra due date - PMI.it
    si riesce a usare DateDiff, quindi
    GIORNI RIMANENTI: DateDiff('g';Date();[DATA FINE])
    altro test e funziona.

    Rimango comunque perplesso sulle varie fonti che forniscono indicazioni diverse, ma che neanche a me funzionano:
    Funzione DateDiff - Supporto tecnico Microsoft
    Calcolare il numero di giorni tra due date - Supporto tecnico Microsoft
    Video: uso di DateDiff e DateAdd nei criteri di query - Supporto tecnico Microsoft
    questi ultimi due utilizzano addirittura la virgola come separatore in controllo di maschera e colonna di query.

    Boh!

  • Re: Calcolo giorni rimanenti. #Funz!

    28/09/2023 - OsvaldoLaviosa ha scritto:


    Ho fatto vari test con DateDiff e anch'io non riesco a cavare un ragno dal buco del perchè non restituisce il numero di giorni richiesto da drt87.
    Ho invece volgarmente scritto così:
    GIORNI RIMANENTI: [DATA FINE] - Date()
    e funziona: Boh!

    Adesso puoi crearla come funzione :) “differenzadate”

  • Re: Calcolo giorni rimanenti. #Funz!

    Ragazzi, non so cosa dirvi, continua a rigettare ogni vostro suggerimento. Ho provato, in ultimo, il consiglio di OsvaldoLaviosa, GIORNI RIMANENTI: DateDiff('g';Date();[DATA FINE]) e mi cancella il nome della tabella…

    nella maschera della query compare: #Nome?

    se gli ripongo di nuovo la tabella, al salvataggio: Parentesi chiusa in eccesso: ) nell'espressione… RICHIESTE.[DateDiff('g';Date();[DATA FINE])]

  • Re: Calcolo giorni rimanenti. #Funz!

    28/09/2023 - drt87 ha scritto:


    Ho provato, in ultimo, il consiglio di OsvaldoLaviosa, GIORNI RIMANENTI: DateDiff('g';Date();[DATA FINE]) e mi cancella il nome della tabella…

    Si tratta di un campo calcolato, non devi fare riferimento alla tabella, è normale/giusto che in corrispondenza di Tabella: resti vuoto (visualizzazione struttura query).

  • Re: Calcolo giorni rimanenti. #Funz!

    28/09/2023 - OsvaldoLaviosa ha scritto:


    Ho fatto vari test con DateDiff e anch'io non riesco a cavare un ragno dal buco del perchè non restituisce il numero di giorni richiesto da drt87.
    Ho invece volgarmente scritto così:
    GIORNI RIMANENTI: [DATA FINE] - Date()
    e funziona: Boh!

    Osvolado, funziona (*) perché le date sono memorizzate come la parte intera (l'ora rappresenta la parte decimale) di un campo numerico.

    La funzione datediff effettua la differenza tra 2 date ma è possibile specifcare come ottenere il risultato (anni,mesi,giorni,ore , etc) cosa che ovviamente non puoi specificare facendo la banale differenza che hai effettuato tu.

    (*) Funziona ma potrebbe fornire risultati non corretti in relazione della presenza della parte decimale (ore/minuti/secondi) motivo per il quale si usa DateDiff.

Devi accedere o registrarti per scrivere nel forum
16 risposte