Perchè tieni differenziati i campi Data ed ORA che poi li riunisci spero sia dato da impistazioni non dipendenti da te...
Per l'ottimizzazione del codice
Dim dtPrev As Date
Set RsTempi = DB.OpenRecordset("select * from tempi order by data DESC, ora DESC, stato")
RsTempi.MoveFirst
dtPrev = DateValue(RsTempi!Data) + TimeValue(RsTempi!Ora)
RsTempi.MoveNext
' calcolo tempi macchina
Do Until RsTempi.EOF
RsTempi.Edit
RsTempi!Durata = dtPrev-(DateValue(RsTempi!Data) + TimeValue(RsTempi!Ora))
RsTempi.Update
dtPrev = DateValue(RsTempi!Data) + TimeValue(RsTempi!Ora)
RsTempi.MoveNext
Loop
RsTempi.Close
Set RsTempi=nothing
Per l'ipotesi di gestirlo ui nfase di Inserimento...
Su Evento AFTERINSERT del Record, puoi memorizzare il Valore Data/Ora, poi spostarti al Record Precedente, andare in EDIT inserendo il calcolo, e poi ritornare al Record inserito...
Private Sub Form_AfetInsert()
' Verifica che ci siano i Valori di Data/Ora, altrimenti Esci
Dim dtPrev As Date
dtPrev = DateValue(Me!Data) + TimeValue(Me!Ora)
With Me.RecordsetClone
.MovePRevious
.Edit
.Fields("Durata") = dtPrev - (DateValue(!Data) + TimeValue(!Ora))
.Update
.Bookmark=Me.Bookmark
End With
End Sub
Il Codice l'ho scritto a braccio senza testarlo, ma solo per farti comprendere il senso tecnico, ciò detto dovrebbe essere corretto.