It is currently 22 April 2025, 21:45 Advanced search

Ricerca su date (baco driver JDBC)

Domande e risposte su come utilizzare Instant Developer Foundation al meglio

Ricerca su date (baco driver JDBC)

Postby C.Zecca » 1 October 2013, 14:31

Ero incappato in questa discussione

Ricerca su date
viewtopic.php?f=5&t=979&p=3917&hilit=between

che purtroppo è stata chiusa (*).
La continuo aggiornandola.

In videata Table Oriented una clausola di selezione cronologica in query source value (campo Aggregatore) produce erroneamente in ricerca un insieme vuoto di elementi.
Il codice SQL di query eseguito direttamente

[§]
Code: Select all
select A.AGGREGATORE as AGGREGAGGREG
      , A.AGGREGATORE || ' - ' || A.DESCRIZIONE as AGGRDESCAGGR
   from AGGREGATORI A
  where ((NVL( null  /* <- Param 1 = null */
             , NVL(A.DATA_FINE_VALIDITA, TO_DATE('2200-12-31', 'YYYY-MM-DD'))
             )
          BETWEEN
            A.DATA_INIZIO_VALIDITA
          AND
            NVL(A.DATA_FINE_VALIDITA, TO_DATE('2200-12-31', 'YYYY-MM-DD'))
         )
        )

Param 1 = Null


produce invece l'insieme corretto di valori.
Stesso problema riprodotto
o - in query di lookup e decodifica costruita su nuovo campo di pannello ad hoc
o - su videata di lookup assemblata al volo, sempre per test

Image

La sostituzione di between() con confronto tra date (>=, <=) non corregge il malfunzionamento.
Rimozione parziale delle clausole cronologiche non corregge il malfunzionamento.
Problema di passaggio date? (cfr. viewtopic.php?f=5&t=979&p=3917&hilit=between, appunto)

E' intervenuto Matteo Sirri, vorrei riportare qui i risultati interessanti dell'intervento.


1) Verifica del malfunzionamento
Primo giro di test. Matteo ha verificato che a tempo di esecuzione la combo associata ad Aggregatore erroneamente non presentava alcun valore per la scelta.

2) Verifica del comportamento diretto in base dati
Ha estratto dal tracer la query source value generata per il campo aggregatore e l'ha eseguita direttamente da IDE In.De (v. § sopra).

Ha chiesto se variassimo la base dati connessa in corso di esecuzione e a risposta negativa ha aperto una videata della base dati So4. La tecnica è quella di selezionare una tabella qualsiasi in albero di progetto, menù contestuale, Wizard – Mostra Dati

Image

e di incollare, nella finestra creata, il testo della query ed eseguirla.

Image

La query così eseguita recuperava, correttamente, i due record attesi.


3) Driver JDBC?
Matteo ha sospettato che potesse essere un problema di driver JDBC.

4) Verifica driver JDBC via codice In.De: con iniezione
In una qualche procedura (Matteo ha scelto per rapidità l'evento Initialize() dell'applicazione) egli
o - ha creato un PreparedStatement
o - gli ha impostato come comando l'istruzione di query (v. q sopra)
o - ha iniettato (via add()) il parametro nullo
o - ha eseguito il comando, recuperandone il record set
o - ha tracciato via DTTLogMessage il numero di record in esso contenuti.

Image

Il tracer riportava zero come valore ottenuto in output (zero record caricati).
Il codice esercitava l'iniezione del valore null nella istruzione SQL.

Image

5) Verifica driver JDBC via codice In.De: senza iniezione
A questo punto Matteo ha verificato il comportamento senza inizione del parametro null, cablando direttamente questo valore nella query.

Image

Il risultato è stato che il record set era popolato dei due record come avrebbe dovuto essere.

Image

6) Diagnosi
Il driver JDBC in questo caso ha problemi con l'iniezione del parametro null.

7) Soluzione
Riscrivere la query in modo alternativo
Ad esempio la clausola di selezione cronologica come

Code: Select all
  isNull(AUO.Al) and isNull(DataFine)
or
  not isNull(AUO.Al) and isNull(DataFine) and DatraInizio <= AUO.Al
or
  not isNull(AUO.Al) and not isNull(DataFine) and AUO.Al between DataInizio and DataFine
Last edited by C.Zecca on 2 October 2013, 9:12, edited 1 time in total.
C.Zecca
 
Posts: 347
Joined: 19 May 2011, 12:29

Re: Ricerca su date (baco driver JDBC)

Postby d.arrivabene » 1 October 2013, 15:03

Bravo! Grazie per l'aggiornamento, tornerà utile sicuramente ad altri!
User avatar
d.arrivabene
Pro Gamma
Pro Gamma
 
Posts: 1232
Joined: 5 October 2011, 8:36
Location: Bologna

Re: Ricerca su date (baco driver JDBC)

Postby C.Zecca » 2 October 2013, 9:25

Il tempo è tiranno quasi per tutti e quindi capisco che a volte non è possibile riportare i risultati di un intervento di assistenza.
Purtroppo però sono innumerevoli le discussioni nel forum che si concludono con un "E' necessario esaminare il problema in assistenza" e che poi non ne riportano il risultato, lasciando la questione in sospeso.
In questo caso ho voluto fornire la risposta, spero sia utile alla comunità.

Per quanto riguarda il rimando (*) sopra nel primo intervento, purtroppo ci sono molte discussioni - no, ad un esame veloce direi tutte le discussioni "vecchie" - bloccate.
Questo impedisce di postare delle risposte a problemi già presenti nel forum, spesso senza conclusione (come in questo caso), terminando o completando la discussione e porta ad un'inutile proliferazione di discussioni e poi a dover passare da una all'altra togliendo loro organicità.

Come mai questa scelta?

Si possono imparare molte cose da un intervento di assistenza. Grazie a Matteo per l'intervento.
C.Zecca
 
Posts: 347
Joined: 19 May 2011, 12:29

Re: Ricerca su date (baco driver JDBC)

Postby g.cassanelli » 2 October 2013, 9:46

Piccolo OT
Concordo.
Il forum è una miniera di know-how e la critica è corretta.
Molto spesso mi è capitato di "beccare" lo stesso problema e trovarmi in fondo .... "bisogna vederlo in assistenza..."
E si noti, la possibilità di mettere la conclusione, che è quella che darebbe reale utilità alla cosa, non è solo da parte dei bravissimi ragazzi di Progamma, ma anche di noi utenti.
Fine OT
Informatica ! Meglio lavorare con il granito, è duro, ma è stabile ! - Computer Science ! Better to work with granite, it's hard, but it's stable !

Giuseppe Cassanelli http://www.lab-ud.com
User avatar
g.cassanelli
 
Posts: 2653
Joined: 9 November 2010, 19:00
Location: BOLOGNA

Re: Ricerca su date (baco driver JDBC)

Postby g.lanzi » 2 October 2013, 10:47

Avete visto bene, tutte le discussioni inattive per più di due settimane vengono bloccate. Non è una prassi rara nei forum, anche se in molti non ha usano.

La scelta è stata fatta per separare i problemi, per evitare che si accodino nuove domande ad una richiesta già vecchia. Altrimenti si rischia di andare "fuori tema", o almeno questo è quello che succedeva prima.

Per quanto riguarda le risposte di completamento sul forum è vero che il tempo è tiranno, ma devo dire che attualmente non è prevista una fase della gestione dell'assistenza nella quale viene riportata la risposta sul forum. Ogni tanto lo facciamo, ma per questo ci affidiamo soprattutto ai membri della community. Come hai fatto tu ora, grazie :)

Però mi viene da pensare che potremmo alzare a 30 giorni il tempo di inattività di un topic prima di chiuderlo. Dovrebbe essere un tempo sufficiente per eliminare il problema.
Giuseppe Lanzi
Director of Support services
Pro Gamma S.p.A.
User avatar
g.lanzi
Pro Gamma
Pro Gamma
 
Posts: 3503
Joined: 29 September 2010, 10:24
Location: Bologna


Return to Tips & Tricks - Foundation

Who is online

Users browsing this forum: Google [Bot] and 91 guests