Calcolo ritardo tra record.

Anonimo
2019-02-28T20:05:17+00:00

Ciao,

non riesco a trovare un ciclo che mi dia gli stessi risultati scritti nel campo "Risultato_Esatto":

La tabella in questione si chiama "Singoli" con i campi: "Data", "Ora","GG" e "R" in cui debbono uscire gli stessi risultati scritti manualmente nel campo "E" delle immagini postate.

In definitiva debbo contare quante date intercorrono tra l'una e l'altra (considerando quelle gemelle una sola volta) inserendo il risultato nel campo "GG" con la lettera "V".

Spero riusciate a capire il senso del risultato, in quanto a spiegarlo è un tantino complicato :-)

Vladimiro

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

36 risposte

Ordina per: Più utili
  1. Anonimo
    2019-03-03T20:17:03+00:00

    Dai, meno peggio di quel che pensavo :-)

    Ma per te, 0 e valore vuoto sono diversi? Ovvero se al 29 e 30 gennaio scrivo 0 anziché "nulla" è sbagliato?

    David 

    Ciao David,

    il valore deve essere  nullo per successivi calcoli.

    In realtà il discorso è un po' diverso e non ti nego che ci ho messo del tempo prima di capire il funzionamento!

    Vediamo di analizzare il risultato visto che sono pochi record.

    P=persa

    V=vinta

    e comunque sia la persa che la vinta, siccome sono il risultato di una giocata, nella singola data P e V hanno lo stesso valore = 1

    Quando ci sono più date simili, prevale sempre la V:

    27/01/2019 14.00 V 1
    29/01/2019 16.00 P
    30/01/2019 14.00 P
    30/01/2019 16.00 V 2

    In questo caso, la V del 30/01/2019 è uguale a 1 e prevale sulla P (stessa data) + 1 (la P della singola data diversa del 29/01/2019)

    01/02/2019 16.00 V 1
    02/02/2019 14.00 V 1
    02/02/2019 15.00 V 0
    02/02/2019 16.00 V 0
    03/02/2019 14.00 V 1
    03/02/2019 15.00 P
    03/02/2019 16.00 V 0

    singola data la V = 1

    Su più date simili, la prima V = 1 le restanti V (stesse date) =0

    Nelle tre date del 03/02/2019 prevale sempre la prima V =1 annulla la P e l'altra V=0

    09/02/2019 14.00 V 1
    09/02/2019 15.00 V 0
    09/02/2019 16.00 V 0
    10/02/2019 14.00 P
    10/02/2019 15.00 V 1
    10/02/2019 16.00 V 0
    12/02/2019 15.00 V 1

    Stesso discorso per le tre date del 09/02/2019 la prima V=1 le restanti =0

    Per le altre tre date del 10/02/2019 prevale la prima V=1 annulla la P e l'altra V=0

    l'ultima data singola V=1 mentre se ci fosse stata la P il valore sarebbe stato nullo.

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-03-03T19:50:59+00:00

    Dai, meno peggio di quel che pensavo :-)

    Ma per te, 0 e valore vuoto sono diversi? Ovvero se al 29 e 30 gennaio scrivo 0 anziché "nulla" è sbagliato?

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-03-03T19:21:54+00:00

    Dovendo approntare una demo mi sono preoccupato più che altro della logica della routine.

    Effettivamente l'ho sviluppata come campo aggiuntivo di una query.

    Ad ogni modo quello che mi interessa è la correttezza della logica della funzione e quindi del suo risultato.

    Se vuoi provarla, crea una tabella tRitardi con tre campi, Data (formato del campo Data), Ora (formato del campo numerico) e GG (formato del campo stringa). Inserisci dei dati di esempio nella tabella e poi crea una query del tipo 


    select Data, Ora, GG, fCalcolaRitardi([Data],[Ora]) AS Risultato_Esatto From tRitardi Order By Data, Ora


    Domani scarico la tua Demo e vedo come implementare la funzione.

    David

    Ciao David,

    scusa il ritardo nella risposta ma ho dovuto sostituire nuovamente la demo in quanto mi sono accorto che mi modificava i dati scritti manualmente per via di uno stupido errore: nella prima e seconda query, usavo come origine la stessa tabella. Ora è tutto a posto e domani puoi scaricarla senza errori.

    Dunque, ho fatto quanto da te richiesto, ma il risultato non cambia:

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-03-03T18:25:05+00:00

    Dovendo approntare una demo mi sono preoccupato più che altro della logica della routine.

    Effettivamente l'ho sviluppata come campo aggiuntivo di una query.

    Ad ogni modo quello che mi interessa è la correttezza della logica della funzione e quindi del suo risultato.

    Se vuoi provarla, crea una tabella tRitardi con tre campi, Data (formato del campo Data), Ora (formato del campo numerico) e GG (formato del campo stringa). Inserisci dei dati di esempio nella tabella e poi crea una query del tipo 


    select Data, Ora, GG, fCalcolaRitardi([Data],[Ora]) AS Risultato_Esatto From tRitardi Order By Data, Ora


    Domani scarico la tua Demo e vedo come implementare la funzione.

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2019-03-03T18:24:03+00:00

    Ciao Vladimiro 

    per facilità di calcolo e vista la rappresentazione che hai fatto delle ore, nella funzione le ho considerate come "interi"

    David 

    Ciao David,

    a prescindere, probabilmente hai pensato di inserire la funzione direttamente nel campo della query (anche se riscontro diversi errori come ad esempio il riferimento alla tabella "tRitardi"  che ho sostituito, forse sbagliando, con il nome della query "Singola_Query") mentre ho bisogno di una routine che mi implementi il campo della query direttamente da un pulsante: come da esempio messo on line.

    In poche parole non sono riuscito nell'intento.

    Vladimiro

    Ciao David,

    ho modificato il codice rendendo tipo alfanumerico "iOra":

    Public Function fCalcolaRitardi(ByVal dData As Date, ByVal iOra As String) As Integer

        Dim db As DAO.Database

        Dim rst As DAO.Recordset

        Dim iRitardo As Integer

        Dim iContaP As Integer

        Dim dDataPrec As Date

        Dim sGGprec As String

        Set db = CurrentDb

        Set rst = db.OpenRecordset("SELECT Data, Ora, GG From Singola_Query " _

                & "WHERE Data <= # " & Format(dData, "mm/dd/yyyy") & "# " _

                & "AND Ora <='" & Replace(iOra, "'", "''") & "'" & " Order By Data, Ora", dbOpenSnapshot, dbReadOnly)

    Nella query ho questi risultati purtroppo non esatti:

    e comunque resta sempre il fatto di fare in modo di crearmi una routine indipendente.

    Mi rendo conto che chiedo troppo, questi dati da ottenere sono complicati ma ti posso assicurare che hanno una loro logica.

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento