Access - Arrotondamento ore

Anonimo
2020-04-15T10:11:53+00:00

Buongiorno.

Vi disturbo per sottoporre questo mio quesito:

Ho una tabella, chiamata T90_Transito, struuturara in questa modo:

Cod_Dip     Data                 Ora            Ident

002             01/04/2020       08:58:00     1002             01/04/2020       13:10:00     2

003             01/04/2020       06:43:00     1

003             01/04/2020       12:10:00     2

003             01/04/2020       13:53:00     3

003             01/04/2020       14:10:00     4

Avrei bisogno di una funzione che mi trasformi i dati in questa maniera e me li aggiorni su T90_Transito

Cod_Dip     Data                 Ora            Ident

002             01/04/2020       09:00:00    1002             01/04/2020       13:10:00     2

003             01/04/2020       07:00:00    1

003             01/04/2020       12:10:00     2

003             01/04/2020      14:00:00    3

003             01/04/2020       14:10:00     4

Normalmente i dati da "arrotondare" hanno, nel campo Ident, un valore dispari.

GRAZIE PER IL SUPPORTO CHE POTRETE DARMI

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
Risposta accettata dall'autore della domanda
Anonimo
2020-04-15T12:39:00+00:00

ciao Francesco,

data la tabella :

ottengo  :

con questo predicato Sql :

SELECT

      T.codiceDip,

      T.data, T.oraIn,

      T.ident, IIf(IsNull([number]),[orain],roundOffTime([orain],60)) AS r

FROM

      Tabella2 AS T

LEFT JOIN

        Tabella3

ON

      T.ident = Tabella3.number;

appoggiandomi alla funzione UDF roundOffTime da copiare in un modulo VBA standard :_

Public Function roundOffTime(dttime As Date, intinterval As Long) As Date

Dim lngTime   As Long

Dim sgltime   As Single

Dim lngHour   As Long

Dim lngMinute As Long

Dim lngDate   As Long

lngDate = DateValue(dttime)

sgltime = TimeValue(dttime) * 24

lngHour = Int(sgltime)

lngMinute = CInt((sgltime - lngHour) * 60)

lngMinute = CInt(lngMinute / intinterval) * intinterval

roundOffTime = CDate(lngDate + ((lngHour + lngMinute / 60) / 24))

End Function

e a questa tabella di appoggio in cui inserire solo gli ident a cui vuole che l'arrotondamento sia applicato.

Facci sapere.

Ciao, Sandro.

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2020-04-15T14:26:19+00:00

    ciao Francesco,

    figurati, io mi diverto sempre un sacco.

    Se puoi contrassegnare il post o i post che maggiormente ti hanno aiutato come risposta, aiuterai altri che come te dovessero imbattersi nello stesso problema in futuro.

    Ciao, Sandro.

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2020-04-15T11:22:33+00:00

    ….bene ma quante sono allora le condizioni….

    1,3,5,7 sono in progressione ma 1002 come lo individuiamo?

    Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2020-04-15T11:16:47+00:00

    Buongiorno.

    Il campo Ident identifica, appunto, l'ora d'inizio turno.

    E' proprio quella che deve essere "arrotondata".

    Se il campo Data = 08:59:00 e Ident  = 1

    vuol dire che inizia il turno a quell'ora e questa deve essere aggiornata alle 09:00:00

    così anche per i turni spezzati dove Ident inizio turno possono essere

    1 - 3 - 5 - 7 - ecc...

    Spero di essere stato chiaro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2020-04-15T11:05:19+00:00

    ciao FrancescoSG.

    il criterio per il quale le ore 12.10 e 14.10 sono da escludere "dall'arrotondamento" quale è?

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento