Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473

    Access Inserire Orario 32:00:00

    Ciao a tutti...
    DB ACCESS

    Io vorrei salvare in un campo un orario nel formato hh:mm:ss dove pero sia possibile inserire un orario superiore alle 24 ore, perche questo campo è il risultato di una differenza di 2 date che potrebbe essere superiore alle 24 ore...
    il formato di questo campo puo essere ad esempio 23:17:58, lo so che potrei salvare il risultato in un campo testo, pero se poi dopo volessi fare una somma di questi campi dovrei fare uno split dei secondi minuti e ore per poi fare una somma e mi chiedevo se qlcn sapeva come potrei aggirare qst problema...


    spero di essere stato chiaro

    grazie


  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Se ho ben capito tu hai nella tabella due campi di tipo data/ora e necessiti di eseguire la differenza nel formato hh:mm:ss.

    E' sbagliato inserire in una tabella dei campi calcolati. In quanto tali si calcolano di volta in volta quando occorrono.

    Ciò che ti occorre e la funzione datediff()

    http://www.techonthenet.com/access/f...e/datediff.php

    che però accetta un solo parametro per volta. Quindi occorre che ci ragioni un pò su usando anche la funzione mod() per giocare con ore,minuti e secondi.

    Così su due piedi non sono in grado di darti più ragguagli ma il senso è quello.

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ho buttato giù una funzioncina.

    codice:
    Function differenza(data1 As Date, data2 As Date) As String
    
    Dim ore As Long
    Dim minuti As Long
    Dim secondi As Long
    
    secondi = DateDiff("s", data1, data2)
    
    ore = Int(secondi / 3600)
    minuti = (Int(secondi / 60)) - (ore * 60)
    secondi = Int(secondi Mod 60)
    
    
    If secondi = 60 Then
        minuti = minuti + 1
        secondi = 0
    End If
    
    If minuti = 60 Then
        minuti = 0
        ore = ore + 1
    End If
    
    differenza = Format(CStr(ore), "00") & ":" & Format(CStr(minuti), "00") & ":" & Format(CStr(secondi), "00")
    
    End Function
    La devi inserire all'interno di un modulo. A questo punto la puoi utilizzare come una funzione nativa di access.

    esempio

    codice:
    select data_inizio,data_fine,differenza(data_inizio,data_fine) as diff
    from tabella

  4. #4
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Uhm... c'è qualcosa che non mi torna...

    Se secondi = Int(secondi mod 60) non potrò mai avere che secondi sia = 60
    Il mod, che peraltro mi restituisce comunque sempre un intero tra 0 e 59 (e quindi non serve int) mi restituirebbe 0 e quindi non vale poi la parte sottostante con "If secondi=60"

    Ugualmente mi verrebbe da dire (ma ho fatto i conti a mente e magari mi sbaglio... ) non mi torna la parte relativa a "If minuti = 60"
    L'unico modo per cui minuti sia 60 è che secondi sia 3600 ma in questo caso le prime 3 istruzioni me lo calcolano comunque giusto

    secondi = 3600

    Ore = Int(3600/3600) = 1
    Minuti = Int(3600/60) - (1*60) = 0
    Secondi = Int(3600 mod 60) = 0

    O mi sbaglio ?

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ciao mod^2.
    Mi hai messo la pulce nell'orecchio e in effetti ricontrollando a dovere il codice la parte relativa agli if è superflua. Ho provato prima a risolvere tramite concatenazioni di datediff per ore, minuti e secondi e quello che mi ha fuorviato.

    Altra boiata l'aver definito mod una funzione anzichè un operatore. Scusate, dopo una giornata passata a 40° non so più nemmeno come mi chiamo.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Ciao a tutti...

    quella soluzione la uso già infatti io ho una tabella che raccoglie la durata (differenza tra data1 e data2) tramite il codice che hai scritto tu, purtroppo devo salvare i risultati di volta in volta e non posso ricarcolarli ogni volta...
    percio nella tabella avro diversi record con la durata, e mi chiedevo se fosse possibile fare la somma di queste durate...

    grazie... ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.