[Risolto]Zero=esaurito in griglia

Discussioni sulle caratteristiche di database
Rispondi
Muset
Messaggi: 124
Iscritto il: lunedì 29 marzo 2021, 14:35
Località: Fagagna UD

[Risolto]Zero=esaurito in griglia

Messaggio da Muset »

Buongiorno,
nei report con la funzione IF(([nome campo]=0);"esaurito";[nome campo]) ottengo "esaurito" al posto dello 0 oppure IF(ISBLANK([nome campo]);"esaurito";[nome campo]) se il campo è vuoto;
1> è possibile ottenere altrettanto nella griglia di una subform? (Form Giacenze)
2> come mai nei report le funzioni sopracitate non funzionano su campo orario? (report Presenze)
Ultima modifica di Muset il martedì 27 aprile 2021, 19:14, modificato 1 volta in totale.
LibreOffice 7.3.4.2 (x64) Windows 11
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Zero=esaurito in griglia

Messaggio da charlie »

Ciao, perchè le tue domande siano comprensibili sempre e a tutti, o alleghi il file o metti un link alla discussione che lo contiene. Grazie.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Muset
Messaggi: 124
Iscritto il: lunedì 29 marzo 2021, 14:35
Località: Fagagna UD

Re: Zero=esaurito in griglia

Messaggio da Muset »

Buongiorno, scusa hai ragione, allego...
Allegati
ProvaPasta (2).odb
(246.14 KiB) Scaricato 121 volte
LibreOffice 7.3.4.2 (x64) Windows 11
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Zero=esaurito in griglia

Messaggio da charlie »

Ciao,
  1. Nelle query che stanno a base dei formulari (ma anche dei report) puoi usare la funzione CASEWHEN(... , ... , ...) o la funzione CASE WHEN ... THEN ... ELSE ... END.
  2. IF(ISBLANK ......) provata con il campo DataLab nel report PROVA, funziona. (PROVA è uguale a Stotgiornata con DataLab al posto di DataTot)
Allegati
ProvaPasta_3.odb
(252.21 KiB) Scaricato 133 volte
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Muset
Messaggi: 124
Iscritto il: lunedì 29 marzo 2021, 14:35
Località: Fagagna UD

Re: Zero=esaurito in griglia

Messaggio da Muset »

Ciao,
1> Puoi farmi un esempio di CASEWHEN(....,....,....) ? dove la inserisco in CRITERIO nella query?
2> Se guardi il report SPresenze in oreMat e orePom ho usato due soluzioni, ma non mi restituiscono il risultato, probabilmente devo intervenire sulla query come dici tu
LibreOffice 7.3.4.2 (x64) Windows 11
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Zero=esaurito in griglia

Messaggio da charlie »

charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Muset
Messaggi: 124
Iscritto il: lunedì 29 marzo 2021, 14:35
Località: Fagagna UD

Re: Zero=esaurito in griglia

Messaggio da Muset »

ho provato a inserire in un campo vuoto della query RFGiacenza CASEWHEN( "Giacenza" = 0, 'esautiro', "Giacenza" ), ma mi da errore "Tipo di dato errato:Java.lang.NumberFormatException.Not a Digit in statment.... , dove sbaglio?
LibreOffice 7.3.4.2 (x64) Windows 11
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Zero=esaurito in griglia

Messaggio da charlie »

I tre parametri devono essere dello steso tipo, "Giacenza" è un campo numerico , 'esaurito' è un testo.
Prova ad inserire NULL al posto di 'esaurito' e poi ad adoperare ISNULL nei report.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Muset
Messaggi: 124
Iscritto il: lunedì 29 marzo 2021, 14:35
Località: Fagagna UD

Re: Zero=esaurito in griglia

Messaggio da Muset »

Gia provato, non funziona perche il campo non è vuoto, c'è 0 e credo sia lo stesso problema con il report Sprezenze oreMat e orePom in cui avevo provato anche quella soluzione
LibreOffice 7.3.4.2 (x64) Windows 11
Muset
Messaggi: 124
Iscritto il: lunedì 29 marzo 2021, 14:35
Località: Fagagna UD

Re: Zero=esaurito in griglia

Messaggio da Muset »

Ciao, aggiornamento report Spresenze:
ho risolto il problema sostituendo lo 0 con lo zero orario come stringa "0:00" con la seguente istruzione nel campo dati del report

IF(([OreMat]="0:00" );"assente";[OreMat]) e IF(([orePom]="0:00" );"assente";[orePom]) rispettivamente Mattina e Pomeriggio

ora mi rimane da capire per i form. Ce la farò? chissà...
comunque senza il forum e charlie sarei ancora sulla porta della caverna :super:
LibreOffice 7.3.4.2 (x64) Windows 11
Muset
Messaggi: 124
Iscritto il: lunedì 29 marzo 2021, 14:35
Località: Fagagna UD

Re: Zero=esaurito in griglia

Messaggio da Muset »

Ciao,
niente da fare, per i form è impossibile(per me) ottenere quello che voglio, l'unica via sarebbe cambiare il formato del campo nella tabella, ma questo poi non mi permetterebbe di fare i calcoli... :knock: :crazy:
LibreOffice 7.3.4.2 (x64) Windows 11
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Zero=esaurito in griglia

Messaggio da charlie »

Per i formulari, prepara prima le query:
  • trasforma l'ora in stringa (i campi vuoti diventeranno NULL):

    Codice: Seleziona tutto

    TO_CHAR( "Ora", 'HH:mm' )
  • in una seconda query sostituisci i campi NULL con una stringa

    Codice: Seleziona tutto

    CASEWHEN( "Ora" IS NULL, 'assente', "Ora" )
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Muset
Messaggi: 124
Iscritto il: lunedì 29 marzo 2021, 14:35
Località: Fagagna UD

Re: Zero=esaurito in griglia

Messaggio da Muset »

Buongiorno, intanto grazie charlie
ho iniziato con la prima query RcostotoTotDip inserendo in campo vuoto TO_CHAR( "OreMat", 'HH:mm' ) poi ripeterò lo stesso per orePom e nella seconda query che userò per il form userò la funzione per "assente", ma non la accetta, mi dice Errore di serializzazione in statment.... dove sbaglio?
LibreOffice 7.3.4.2 (x64) Windows 11
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Zero=esaurito in griglia

Messaggio da charlie »

Errore mai visto prima e assolutamente non documentato.
Evidentemente c'è qualcosa nel dato di origine (in RPresenze) che complica le cose perché nelle prove fatte con un campo di tipo "time" il problema non si presenta.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Zero=esaurito in griglia

Messaggio da charlie »

L'errore potrebbe essere dovuto all'uso doppio di TO_CHAR:
  • COALESCE ( TO_CHAR( CAST( '00:' || COALESCE ( DATEDIFF( 'mi', "Ingresso", "Uscita" ), 0 ) || ':00' AS "TIME" ), 'HH:MI' ), 0 ) AS "OreMat"
  • TO_CHAR( "OreMat", 'HH:MI' )
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Muset
Messaggi: 124
Iscritto il: lunedì 29 marzo 2021, 14:35
Località: Fagagna UD

Re: Zero=esaurito in griglia

Messaggio da Muset »

Ho provato a eliminare il COALESCE in RPresenze per ottenere Vuoto invece di 0:00 , ma non la riconosce come colonna quindi anche come funzione(pensando di eliminare un passaggio e visto che voglio una stringa al posto di 0 o vuoto il COALESCE non mi serve più su quei due campi.
In RcostoTotDip trovi come l'ho scritta e l'errore che mi dà (effettivamente in tutti gli errori che mi sono usciti finora, questo non lo avevo visto nemmeno io), se togli la spunta a Visibile nella colonna dell'istruzione, la query funziona regolarmente
Allegati
ProvaPasta (2).odb
(246 KiB) Scaricato 75 volte
LibreOffice 7.3.4.2 (x64) Windows 11
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Zero=esaurito in griglia

Messaggio da charlie »

In RPresenze ho modificato

Codice: Seleziona tutto

COALESCE ( TO_CHAR( CAST( '00:' || COALESCE ( DATEDIFF( 'mi', "Ingresso", "Uscita" ), 0 ) || ':00' AS "TIME" ), 'HH:MI' ), 0 ) AS "OreMat"
con

Codice: Seleziona tutto

COALESCE ( TO_CHAR( CAST( '00:' || COALESCE ( DATEDIFF( 'mi', "Ingresso", "Uscita" ), NULL ) || ':00' AS "TIME" ), 'HH:MI' ), NULL ) AS "OreMat"
quindi ora questo codice in RcostoTotDip funziona senza dare errori:

Codice: Seleziona tutto

CASEWHEN( "RPresenze"."OreMat" IS NULL, 'assente', "RPresenze"."OreMat" ) AS "OreMat"
N.B. Nell'allegato la modifica riguarda solo il campo "OreMat" delle query RPresenze e RcostoTotDip e non ho controllato se la cosa comporti problemi ad altre query collegate. Nella tabella Presenze ho modificato il primo record per poter testare il codice.
Allegati
ProvaPasta_4.odb
(251.74 KiB) Scaricato 82 volte
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Muset
Messaggi: 124
Iscritto il: lunedì 29 marzo 2021, 14:35
Località: Fagagna UD

Re: Zero=esaurito in griglia

Messaggio da Muset »

Come sempre sei una garanzia, un bravo maestro, funziona tutto perfettamente
per chi osserva questo argomento:
- ho cambiato il tipo di campo nella griglia del form da "campo orario" a Campo formattato" e nelle Proprietà campo > Dati> Lo string vuoto è ZERO > NO
- nel report ho usato IF(ISBLANK([nome campo]);"messaggio";[nome campo])

ora il problema mi si ripresenta con le giacenze, immagino li possa usare TO_CHAR, ma non so cosa inserire come formato TO_CHAR("Giacenza", '????') ho provato con CHAR e VARCHAR ...flop
LibreOffice 7.3.4.2 (x64) Windows 11
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8819
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Zero=esaurito in griglia

Messaggio da charlie »

TO_CHAR funziona solo con date e orari.
Devi usare

Codice: Seleziona tutto

CONVERT(term,type)
converts exp to another data type

CAST(term AS type)
converts exp to another data type
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Muset
Messaggi: 124
Iscritto il: lunedì 29 marzo 2021, 14:35
Località: Fagagna UD

Re: Zero=esaurito in griglia

Messaggio da Muset »

Ho usato il CONVERT , PERFETTO!!
Ho fatto una query per convertire dopo aver provato a combinare in una riga CONVERT+CASEWHEN sulla scia di COALESCE(TO_CHAR(CAST(00:||...... ma le mie aspirazioni si sono infrante :D
Comunque funziona tutto perfettamente. Grazie guru charlie :bravo:
LibreOffice 7.3.4.2 (x64) Windows 11
Rispondi