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: Meno recente
  1. Anonimo
    2019-03-02T17:14:26+00:00

    Ciao Vladimiro,

    Non ti nego che ho tentato di buttare giù una routine ma per mancanza di tempo ho desistito.

    Mi sono ripromesso di tornarci sù lunedì.

    Ti aggiorno se arrivo ad un risultato significativo

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-03-03T17:26:54+00:00

    Ciao Vladimiro,

    prova a valutare la seguente funzione. Ci sono alcune cose che non tornano rispetto alle immagini che hai pubblicato ma in alcuni casi, ammesso che abbia capito bene il meccanismo, ho l'impressione che l'errore non sia nella funzione.

    Diciamo che vuole essere un inizio :-)


    Public Function fCalcolaRitardi(ByVal dData As Date, ByVal iOra As Integer) 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 tRitardi " _

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

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

        With rst

            Do While Not .EOF

                'Debug.Print !Data; !Ora

                If !GG = "P" Then

                    If dDataPrec = !Data And sGGprec = "P" Then

                        iContaP = iContaP + 1

                    Else

                        iRitardo = 0

                    End If

                ElseIf !GG = "V" Then

                    If dDataPrec = !Data And sGGprec = "P" Then

                        iRitardo = iContaP + 1

                    ElseIf dDataPrec = !Data And sGGprec = "V" Then

                        iRitardo = 0

                    Else

                        iRitardo = 1

                    End If

                End If

                dDataPrec = !Data

                sGGprec = !GG

                .MoveNext

            Loop

        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
  3. Anonimo
    2019-03-03T17:42:28+00:00

    Ciao David,

    mi hai anticipato di qualche minuto :-)

    Siccome mi sono accorto che nelle immagine postate all'inizio di questo thread ci sono degli errori,

     ho provveduto a sostituirle con altre immagini; in più ho sostituito allo stesso link una demo con più esempi.

    Tutto questo prima di provare la tua routine.

    Ti faccio sapere.

    Grazie Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-03-03T17:51:40+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

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2019-03-03T18:11:20+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

    La risposta è stata utile?

    0 commenti Nessun commento