La proposta è quella di aggiungere a
o - hour()
o - minute()
o - second()
una ulteriore funzione (subsecond() ?) che permetta di accedere e rappresentarre la parte di un Time con precisione superiore a quella del minuto secondo.
Dettagli qui sotto.
---------------------------------------
Ho un pannello "di testata" (master) implementata su IMDB (vista la presenza di ciò che in table orientation sarebbero state due colonne calcolate e quindi inibite all'input, ovvero Data Operazione e Ora Operazione).
Per vari motivi essa è stata implementata con SalvaAutomatico acceso (permette di evitare che partano cicli di salvataggio indesiderati) ma ciò comporta, in uscita dalla videata, che sia necessario controllare a mano se i dati di testata siano stati modificati o meno.
In fase di aggiornamento (in fase di creazione ciò non si verifica, non possono essere considerati modificati dati prima inesistenti) ciò avviene verificando se i dati in memoria e quelli ricaricati da base dati siano uguali.
Al momento della creazione, si chiede al sistema il time(): questa contiene, sibillamente, una parte di riferimento temporale inferiore al secondo (decimi, centesimi, millesimi o inferiore). InDe, d'altra parte, NON mette a disposizione (sto usando la 13.5), attualmente, la gestione dei Time per parti inferiori al minuto secondo (intendo una API per la gestione di decimi, centesimi di secondo, etc. anche se nelle maschere qualcosa del genere fa capolino).
Insomma, in salvataggio il sistema scriveva una Date SQL con decimi, centesimi, etc. di secondo, originata proprio col riferimento cronologico (time()) iniziale.
Problema
Al momento del controllo inerente la modifica o meno della testata, si assemblava un Time di fatto troncato al secondo (con InDe, non è possibile una precisione superiore): il riferimento cronologico caricato da base dati risultava diverso da quello in memoria, nonostante essi fossero uguali al secondo.
Soluzione
Al momento della creazione della operazione di movimento, ora tronchiamo il tempo al minuto secondo; esso viene salvato poi così in base dati (insert in tabella master) e risulta coerente (quindi anche uguale) con i dati in memoria, il sistema non dà più dei falsi positivi (ovvero non dice più che il Time di pannello è diverso da quella caricata da base dati).
Nell''immagine qui sotto, il tracer, al momento della Close Form, sezione inerente i controlli cronologici.
o - la parte Time in memoria (campo di pannello, lOraMemoria, parametro pTimeOp)
o - la parte Time caricata da base dati (originata con la chiamata a time() e precisione superiore al min. secondo ovveronon troncata al min. secondo)
risultano diverse (lOreDiverse = -1 (true) anche se uguali al secondo.