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-30T16:45:42+00:00

    Ciao Vladimiro,

    non è facilissimo entrare nella logica della routine senza conoscerne i presupposti.

    Ad ogni modo, da quello che vedo:

    • il test EOF su rs2 dovresti spostarlo, credo, subito dopo l'inizio del ciclo sul rs1 ovvero:

    --- 

                ...

                Do Until rs1.EOF

    If rs2.EOF Then Exit Do

    ...


    Altrimenti, per come hai condiviso la demo, ricevi un errore di runtime 3201 "Nessun record corrente", quando rs2 non contiene nessun record in base al filtro WHERE che hai impostato nella sua apertura

    • l'istruzione di update di Filtro_Analisi, va modificata nel modo seguente:

            ...

            CurrentDb.Execute "UPDATE Filtro_Analisi SET Progressivo = " & j

            ...


    David

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-03-30T14:13:46+00:00

    Ciao David,

    abbandoniamo per un po' questo progetto e tuffiamoci in un altro simile in cui c'è sempre il tuo zampino :-)

    Per evitare di costruirmi 56 query di creazione tabella con altrettante 56 routine di calcolo per ogni tabella, ho pensato di inserire tutto in un'unica tabella specificando dei parametri univoci servendomi di un ciclo For - Next. 

    Purtroppo pare che la "tua routine" non accetti parametri e non capisco perché.

    Ti va di darci un'occhiata?

    Qui c'è una piccola demo per facilitarti, credo, il compito.

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-03-19T07:41:41+00:00

    Ciao Vladimiro,

    dal seguente link puoi scaricare la demo su cui ho fatto il test. Credo che il problema possa dipendere dal formato del campo Ora. Calcola_Ritardi

    David

    Ciao David,

    purtroppo ancora non ci siamo: più passa il tempo e più mi rendo conto di come possano essere complicati certi risultati da ottenere.

    A prescindere dagli zero che comunque si possono facilmente togliere successivamente, come puoi vedere tu stesso, ci sono due errori di interpretazione.

    Il primo riguarda la singola data come la 01/02/2019 con la V a cui non viene assegnato il valore; il secondo, nelle date gemelle  come la 09/02/2019 a cui ad una V non viene assegnato il valore.

    Fatti coraggio se puoi :-)

    E, con calma, se magari ti viene qualche idea, io ti aspetto.

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-03-19T06:02:43+00:00

    Ciao Vladimiro,

    dal seguente link puoi scaricare la demo su cui ho fatto il test. Credo che il problema possa dipendere dal formato del campo Ora. Calcola_Ritardi

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2019-03-18T17:46:52+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

    Ciao David,

    non riesco a rappresentare il risultato :-(

    Richiamando la funziona nella query:

    RM: fCalcolaRitardi([Data];[Ora])

    mi rilascia tutti zero, così come nella finestra immediata:

    Non è che puoi allegare una demo?

    Sicuramente a me sfugge qualcosa...

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento