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.