Access - Insertar más de 23:59 horas en un cuadro de texto

 
Vista:

Insertar más de 23:59 horas en un cuadro de texto

Publicado por Akuod (4 intervenciones) el 28/07/2016 18:35:28
Hola, a ver si alguien me puede ayudar.
Tenía un problema con la suma de horas que fueran superiores a 23:59 horas. Lo solucioné de esta forma por si a alguien le interesa, lo vi en google:
Creé una función en el formulario:

Function TiempoTotal(intervalo As Double) As String
TiempoTotal = DateDiff("h", 0, intervalo) & _
Format$(intervalo, ":nn:ss")
End Function

Tengo en Detalle del formulario un cuadro de texto llamado [HORAS] tiene formato hora corta

en el pie del formulario otro cuadro de texto para que me suma las horas que hay en detalle:
en el origen de control de este cuadro de texto escribí esto:
=TiempoTotal(Nz(Suma([HORAS])))

Todo perfecto, me suma el total de horas y si supera las 23:59.
Ejemplo en el primer cuadro de texto hay 23:59 y en el segundo 10:01 y en el cuadro de texto suma me sale:
34:00
-------------------
Mi pregunta. se puede escribir en el cuadro de texto [HORAS] un valor superior a 23:59?

Muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Insertar más de 23:59 horas en un cuadro de texto

Publicado por Enrique Heliodoro (1664 intervenciones) el 28/07/2016 19:00:05
En un cuadro de texto se puede escribir cualquier cosa (incluso las ilegibles).

Si tenemos una suma (que pueden ser horas o guisantes) se le puede dar el formato que nos apetezca y creo que la suma que haces de tiempos no es la mas correcta, pues si la función que utilizas (DateDiff) se utiliza con el parámetro 'H', devolverá HORAS y despreciara los minutos, con lo cual perderá fiabilidad.

Siempre se ha de sumar en el dato MENOR y en una pretendida presentación de 'HH:MM' lo mas pequeño son los minutos, el parámetro correcto en la función seria 'n' (que implica minutos y se utiliza en lugar de la 'm' reservada para los meses).

Lo ideal .... olvidarse de los formatos predefinidos y trabajar con números simples ¿minutos por ejemplo?...

Un intervalo de tiempo se trataría asi:

MisMinutos: DateDiff("n", tiempo1, tiempo2)

Los sumamos: Sum (MisMinutos)

Y donde deseemos verlo en nuestro particular formato:

MisMinutos\60 & Format (MisMinutos Mod 60 ," \:nn")

En la ventana de inmediato:

MisMinutos = 12345

?MisMinutos\60
205
?Format(MisMinutos mod 60 ,"\:00")
:45

?MisMinutos\60 & Format(MisMinutos mod 60 ,"\:00")
205:45
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar más de 23:59 horas en un cuadro de texto

Publicado por Akuod (4 intervenciones) el 28/07/2016 19:09:16
Ok, probaré. Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar más de 23:59 horas en un cuadro de texto

Publicado por Akuod (4 intervenciones) el 29/07/2016 10:45:35
Hola de nuevo.
Bueno he estado mirando lo que me dijiste y me hay cosas que no entiendo.

el formulario tiene estos datos: imaginemos que relleno dos registros
En detalle
FECHA - DENOMINACION - AMBITO - TIPO - HORAS
01/01/2016 denom.1 ámb.1 tipo1 aquí tendría que poner si son 3 horas (1560) minutos para poner 26 horas?
02/01/2016 denom.2 ámb.2 tipo2 no se puede poner (25:20) en horas? 25 h y 20 m?
en el pié del formulario
TOTAL HORAS
----------------

MisMinutos: DateDiff("n", tiempo1, tiempo2) ........ Misminutos, tiempo1, tiempo2....etc... no sé cómo declararlos, es un cuadro de texto que hay en detalle del formulario............ tiempo 1, tiempo2 etc... se llaman de la misma manera HORAS

Lo siento estoy perdido o saturado de darle vueltas a esto....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar más de 23:59 horas en un cuadro de texto

Publicado por Enrique Heliodoro (1664 intervenciones) el 29/07/2016 13:37:27
Hay que 'alejarse un poco' para ver el conjunto y no pararse en los detalles que no tienen mayor importancia.

Hablamos de tres horas ... pero tres horas ¿no son un intervalo?
Y si son un intervalo ¿no tienen que tener un inicio y un final?
Y si no hay un inicio declarado ¿Dónde se comienzan a contar esas horas?
.....
Se supone que desde el momento que comencemos a contar tenemos un CERO y si lo utilizamos (al cero: punto inicial) como uno de los parámetros de la función .... ¿Qué obtenemos en minutos o segundos o días o años?

En minutos: DateDiff("n", 0, #03:00#) ==> 180
en segundos:DateDiff("s", 0, #03:00#) ==> 10800
en días :DateDiff("d", 0, #03:00#) ==> 0 (si devolviera decimales seria :3/24 o asi 1/8 o asi 0,125)
En años ... mas de lo mismo


Si se utiliza la notación consensuada (días de 24 horas, horas de 60 minutos, minutos de 60 segundos).... tenemos un numero complejo que no facilita los cálculos y que (por causa de las reglas consensuadas) todo lo que sobrepase a las veinticuatro horas es ... UN DIA, jamás presentara 25:31 (por poner una cifra)

Asi que ... supongamos que ese dato a tratar es un dato de tipo DATE de Access (no un texto con un formato mas o menos bonito)
tres horas ... lo mostrara asi 3:00
8 horas y 34 minutos asi: 8:34

Y quiero 'sumar esos datos en minutos' en un cuadro de texto:
Comenzamos
SUM () <== una función de Access que se debería conocer
le damos el dato que será el cuadro de texto 'horas' pero lo deseamos en minutos
= Sum(DateDiff("n", 0,[horas]))

ya tenemos EN MINUTOS ese intervalo de tiempo, le damos formato a ese cuadro de texto (pero 'nuestro' formato, no el consensuado porque este no mostrara días de mas de veinticuatro horas).

= Sum(DateDiff("n", 0,[horas])) \ 60 & Format (Sum(DateDiff("n", 0,[horas])) ,"\:00")

Y por esas cosas extrañas de conocer como funcionan las cosas, obtenemos 'días de mas de veinticuatro 'estéticas' horas (que a lo mejor ni tan siquiera es un dato valido), si esa suma de tiempos parciales se refiere a 'jornadas de trabajo' (y una jornada es de 8 horas), 24 horas se corresponderían con TRES jornadas de trabajo (o TRES DIAS trabajados).

Asi que aprendamos a abstraernos y ver un poco mas alla que utilizar solo el dos para contar guisantes, el tres para calabazas ... etc. son números y el tres y/o el dos representaran a aquello que nos venga en gana en función de las circunstancias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar más de 23:59 horas en un cuadro de texto

Publicado por Akuod (4 intervenciones) el 29/07/2016 17:35:59
Hola Enrique,
Mira que me estoy alejando para ver el conjunto y cuando más me alejo, veo las cosas menos nítidas, si pido ayuda es porque no encuentro la solución y… te agradezco mucho el tiempo que estás utilizado para poder resolver esto.

Te aseguro que me da igual contar guisantes, patatas, pimientos o lo que sea, al final como tú dices se trata de contar lo que sea. Tu en este caso sabes cómo contar, yo lamentablemente no sé hacerlo.

Te agradecería que me lo explicaras como si fuera el más bobo de este foro. Seguro que al final esta lección magistral que te pido y me reitero (con absoluto agradecimiento) le valdrá a mucha gente.

Te iré preguntando poco a poco para no agobiarte.

En la tabla, el dato [HORAS] qué tipo de dato tengo que poner? Fecha/hora o Numérico y si es numérico, doble, con decimales?
Al crear el formulario de esa tabla, al cuadro de texto [HORAS] si le digo que es de tipo Date, le he aplicado el formato ##:## para poner las horas ejemplo 5:20, (primer problema aquí, ya no admite más de 23:59 por el tipo de datos [HORAS]. Si en la tabla le digo que es numérico con el formato ##:## la cosa cambia ya puedo introducir datos superiores a esos 23:59.

Este es el primer paso, qué tipo de datos he de dar a [HORAS]?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Insertar más de 23:59 horas en un cuadro de texto

Publicado por Enrique Heliodoro (1664 intervenciones) el 29/07/2016 22:34:53
Tengo que suponer que si en una tabla hay un campo que guarde datos de tipo tiempo (y repito: tiempo, que pueden ser horas o días o ....), el campo estará definido como de tipo DATE (si no es asi ... lo adecuado seria revisar ese diseño).


Si el campo (contenga días u horas, pues el tipo de campo ES EL MISMO, un campo de tipo DATE) no hay mas que 'ponerlo' y punto.

Access (y cualquier otro tipo de base de datos) no almacena las fechas como TEXTO, las presenta como texto (y se adapta a la configuración regional: al país, en Europa de una forma, en América de otra, en Japón de otra ...) pero en el formato que sea es ... la misma fecha ¿porque?...

Porque la fecha no es mas que un numero, un numero con parte entera (los días) y parte decimal (la fracción del día)

¿Qué se utilizan ambas? .. será el 3 de enero del año 2022 a las 4 horas cuarenta minutos y veintidós segundos
Que se desprecia la parte decimal? ... será el 3 de enero del año 2022
Que se desprecia la parte entera? ... serán las 4 horas cuarenta minutos y veintidós segundos

Mas simple imposible .

Pero ATENCION estamos 'hablando' de datos de tipo FECHA ACCESS (campos de tipo DATE)
Si lo que tenemos es un texto que representa un dato de tipo fecha, para 'trabajar con el' de forma correcta (para que Access lo interprete de forma correcta) se le tendrá que indicar que 'es un texto que parece representar a una fecha' y eso se hace con los marcadores adecuados (#) o se le aplica una FUNCION ( CDATE ) que 'reconocerá' el texto como fecha/hora si se ajusta a cualquiera de los formatos admitidos en la configuración regional.

¿Qué tenemos un simil de fecha en un cuadro de texto independiente? ... para que 'sea una fecha/hora' habrá que convertirlo, pongamos que tenemos 12/4/2016 20:55 (es un formato de fecha admitido en la configuración regional española)

Si no 'hacemos nada' Access creerá que es una división (y daría error por tener parametros incorrectos, la hora es otra división y hay un espacio que la separa), asi que
12/4/2016 20:55 <== no nos es valido como fecha
#12/4/2016 20:55 # <== será interpretado como fecha
CDate("12/4/2016 20:55") <== será CONVERTIDO a un dato de tipo fecha

Ya tienes los principios básicos de como 'tratar e interpretar' a las fechas, aplícalos en función de lo que hay disponible (y si el campo esta ligado a una tabla y en la tabla esta definido como de tipo DATE, Access lo considerara una fecha y no hay que manipularlo)

Hoy es el 29/7/2016 y son las 22:21

Veamos que guarda Access (ventana de inmediato)

MiFecha= Now
?mifecha
29/07/2016 22:21:04

En modo numero (el dato real):
?CDbl(mifecha)
42580,9312962963

Que nos lo muestre:
?Format (mifecha,"d/mm/yyyy hh:nn")
29/07/2016 22:21

?Format (mifecha,"d/mm/yyyy hh:nn:ss")
29/07/2016 22:21:04

Veamos para que sirve el numero anterior:
?Format (42580.9312962963,"d/mm/yyyy hh:nn")
29/07/2016 22:21

?Format (42580.9312962963,"d/mm/yyyy hh:nn:ss")
29/07/2016 22:21:04

¿Cuál es la fecha consensuada como inicial (el dia cero de Access)

?format(0,"d/mm/yyyy hh:nn:ss")
30/12/1899 00:00:00

¿Y el dia uno?
?format(1,"d/mm/yyyy hh:nn:ss")
31/12/1899 00:00:00

o el dia diez
?format(10,"d/mm/yyyy hh:nn:ss")
9/01/1900 00:00:00


¿Qué tipo de datos es 'HORAS'? ... se da por supuesto que será un dato que represente a un FRACCION del dia (menos de 24 horas, ) y es el dato de que dispones (y que si se guarda en una tabla, esto es: 'no se inventa' será un dato de tipo FECHA ACCESS y valido para sumar etc, porque en esencia es ... un numero) aunque el numero sea una fracción.

Por cierto, vamos a sumarle al 'dia cero' unas horas ¿11 por ejemplo?
?0 + 11/24
0,458333333333333
?format(0.458333333333333,"d/mm/yyyy hh:nn:ss")
30/12/1899 11:00:00
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar