[Risolto] Base e migrazione a Firebird

Salve a tutti.
Con la nuova versione di Base sembra che sia obbligatorio aggiornare il motore del database altrimenti ogni volta che si fa un’operazione compare la finestra che ti chiede di aggiornare.
Per evitare ciò mi sono deciso a fare la suddetta migrazione. >Però ciò ha comportato problemi che ancora non sono riuscito a risolvere e quindi chiedo aiuto a chi ne sa più di me.
Ecco il problema.
Dopo aver effettuato la migrazione mi compare il seguente errore:

Codice di errore: 1 firebird_sdbc error: *Dynamic SQL Error*SQL error code = -804*Function unknown*CASEWHENcaused by'isc_dsql_prepare

Cercando in rete, anche dal link di suggerimento nella finestra di conversione, ho sostituito l’espressione:

SELECT "IngressoDati".*, "Imponibile" + "IVA" "Tot. Fattura", CASEWHEN( "Codice Tributo" = 'N.A.', 0, CASEWHEN( "Codice Tributo" = 1040, "Imponibile" * 20 / 100, "Imponibile" * 4 / 100 ) ) "R.A.", CASEWHEN( "Verifica Date" = 1, "Data Operazione", NULL ) "Data Versamento RA", "Imponibile" + "IVA" - CASEWHEN( "Codice Tributo" = 'N.A.', 0, CASEWHEN( "Codice Tributo" = 1040, "Imponibile" * 20 / 100, "Imponibile" * 4 / 100 ) ) "Importo Bonifico", "Imponibile" + "IVA" "Uscite" FROM "IngressoDati"

con la:

SELECT "IngressoDati".*, "Imponibile" + "IVA" "Tot. Fattura", IIF( "Codice Tributo" = 'N.A.', 0, IIF( "Codice Tributo" = 1040, "Imponibile" * 20 / 100, "Imponibile" * 4 / 100 ) ) "R.A.", IIF( "Verifica Date" = 1, "Data Operazione", NULL ) "Data Versamento RA", "Imponibile" + "IVA" - IIF( "Codice Tributo" = 'N.A.', 0, IIF( "Codice Tributo" = 1040, "Imponibile" * 20 / 100, "Imponibile" * 4 / 100 ) ) "Importo Bonifico", "Imponibile" + "IVA" "Uscite" FROM "IngressoDati"

Cioè in pratica ho sostituito CASEWHEN con IIF (ho fatto bene?). Ho salvato il tutto e sembrava andare bene.
A questo punto ho aperto il relativo formulario e mi ha dat un altro errore:

codice di errore: 1 firebird_sdbc error: *conversion error from string "1" caused by 'isc_dsql_fetch'

Come posso risolvere?
Grazie anticipatamente

Non è obbligatorio passare a Firebird, anzi io lo sconsiglio per evitare i problemi che hai riscontrato.
Basta deselezionare la voce Abilita le funzionalità sperimentaliin Strumenti > Opzioni > LibreOffice > Avanzate

Se la mia riposta ti ha aiutato, votala con :heavy_check_mark: (qui a sinistra)

Ciao e grazie per la risposta. Comunque avevo già percorso questa strada ma il problema è che la casella è già senza spunta e comunque chiede di migrare

Nella mia versione (6.2.1.2 per macOS) funziona perfettamente. Togliendo e rimettendo la spunta Lo mi chiede di riavviare. A te succede?

Non sono un esperto di database, ma ti consiglio di dare un’occhiata a questa pagina di istruzioni relative alla migrazione:

Documentazione/HowTo/MigrareDaHSQLDB - The Document Foundation Wiki

Nel caso dai un’occhiata anche alla sua versione in inglese, che è più affidabile.

Grazie avevo già consulto il link. Ma non ho trovato nulla di utile

Mah, se leggi le ultime righe alla fine della pagina a me pare che sarebbe preferibile usare la funzione CASE WHEN (staccato e senza uso di parentesi) al posto di CASEWHEN o IIF.

Capisco che anche IIF dovrebbe funzionare e che hai diversi annidamenti e forse con CASE WHEN diventa troppo complicata.

In questa forma, stando a quanto riportato nella tabella, dovrebbe essere compatibile con entrambi i motori di database.

Ancora una cosa, per i campi data e ora, hai seguito la procedura manuale descritta nella pagina?

Non vorrei che quell’errore di conversione stringa sia dovuto ad un valore sballato nelle date/orari generato dalla conversione automatica.

Sono a conoscenza del problema dei campi data/ora. Però da quello che ho capito io la conversione dovrebbe avvenire lo stesso solo che i dopo i suddetti campi non riportano più correttamente i dati inseriti.

Il messaggio di errore che ricevo si riferisce alla stringa “1”. Chi sarebbe questa stringa 1? Nella prima colonna? o in quale colonna? Se si riuscisse a capire a chi si riferisce con stringa 1 forse potrebbe essere più semplice capire come correggere l’errore. Nel frattempo faccio un po’ di prove a “esclusione”

Ho fatto la prima prova ed è come pensavo.
Ho creato un semplice database con il motore HSQLDB con una colonna data. Ho inserito giusto tre date e l’ho salvato. Ho riaperto il file ed eseguito la conversione a firebird. La conversione è avvenuta senza errori apparenti ma la colonna data è cambiata riportando le date inizialmente inserire indietro di un giorno. Quindi almeno, nel mio caso, l’errore di conversione non è dovuto al campo data

Ho individuato dove c’è il problema. Sta nella seguente istruxzione:

IIF( "Verifica Date" = 1, "Data Operazione", VUOTO )

e la stringa che non converte è quel “1”.
“Verifica Data” è un valore booleano (Si/No) che corrisponde a 1 o 0. Come correggo??

Non so come è memorizzato il tipo di campo, se apri la tabella in modo struttura, dopo la conversione che tipo di campo dice di essere?

Se è in effetti booleano direi di sostituire l’1 con true, se invece dovesse essere un campo di tipo Char allora proverei a mettere "1" (in pratica aggiungerei le virgolette).

Ok ha funzionato. Ho messo true (che ha convertito in vero) e ora non mi da più errore. Resta solo da correggere il problema delle date :-((

Ma c’è un modo per evitare che ogni volta che apro il database mi appaia la finestra di conversione??