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-18T10:01:25+00:00

    Ciao Vladimiro,

    prova a valutare la seguente funzione che, apparentemente, restituisce un risultato corretto sulla base delle evidenze precedenti.


    Option Compare Database

    Option Explicit

    Private iContaP As Integer

    Public Function fCalcolaRitardi(ByVal dData As Date, ByVal dOra As Date) As Integer

        Dim db As DAO.Database

        Dim rst As DAO.Recordset

        Dim dDataPrec As Date

        Dim dOraPrec As Date

        Dim sGGPrec As String

        Dim iRitardo As Integer

        Set db = CurrentDb

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

                & "WHERE cdbl(Data) + cdbl(Ora) <= " & Replace(CDbl(dData) + CDbl(dOra), ",", ".") _

                & " ORDER BY Data, ORA")

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

                & "WHERE CDbl(([Data]) + Cdbl([Ora])) <= " & Replace(CDbl(dData + dOra), ",", ".") _

                & " ORDER BY Data, Ora")

        With rst

            iContaP = 0

            Do While Not .EOF

                Debug.Print !Data; !Ora; !GG

                If !GG = "V" Then

                    If sGGPrec = "V" Then

                        iRitardo = 0

                    Else

                        iRitardo = iContaP + 1

                    End If

                Else

                    If sGGPrec = "V" Then

                        If dDataPrec <> !Data Then

                            iContaP = iContaP + 1

                        Else

                            If iRitardo > 0 Then

                                iContaP = 0

                            Else

                                iContaP = 1

                            End If

                        End If

                        iRitardo = 0

                    Else

                        iRitardo = 0

                    End If

                End If

                dDataPrec = !Data

                dOraPrec = !Ora

                sGGPrec = !GG

                .MoveNext

            Loop

            Debug.Print "Data: " & dDataPrec; " | Ora: " & dOraPrec; " | GG: " & sGGPrec; _

                        " | Ritardo: " & iRitardo; " | ContaP: " & iContaP

        End With

        fCalcolaRitardi = iRitardo

        rst.Close

        db.Close

        Set rst = Nothing

        Set db = Nothing

    End Function


    David

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-03-14T10:22:24+00:00

    Ciao Vladimiro,

    come ho un po' di tempo mi ci rimetto di impegno.

    David

    Ciao,

    ok, posso ancora sperare allora! :-)

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-03-14T09:00:02+00:00

    Ciao Vladimiro,

    come ho un po' di tempo mi ci rimetto di impegno.

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-03-13T12:04:35+00:00

    Ciao David,

    c'è ancora possibilità di trovare una soluzione?

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2019-03-07T18:16:04+00:00

    Ciao David,

    eccomi qui.

    Continuano ad esserci cose che non capisco :-(

    • la P del 29/01 ore 16 vale 1

    - la P del 30/01 ore 14 vale 0

    Essendo la data del 29/01 una data univoca, la P vale 1.

    Il significato di quanto detto deriva dal fatto che nella giornata del 29/01 si è giocato una sola volta per cui la P anche se perdente, bisogna comunque considerarla.

    Cosa diversa la P del 30/01 in quanto si trova coinvolta in più date simili (con orari naturalmente diversi) e con la presenza di una V.

    Quando in una stessa data formata da più date simili c'è una V, tutte le P coinvolte in quella data si annullano e le altre eventuali V assumono il valore di zero.

    perchè invece

    • la P del 01/02 ore 16 vale 1

    - la P del 02/02 ore 14 vale 1

    Per la P del 01/02 vale lo stesso discorso di sopra riguardante la data univoca.

    Per quanto riguarda la P del 02/02:

    quando in una stessa data formata da più date simili c'è solo la presenza della P, vale solo una P =1 e le altre si annullano.

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento