Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

sumar una hora

Estas en el tema de sumar una hora en el foro de Bases de Datos General en Foros del Web. Veamos, en un formulario de acces, en un campo tengo lo siguiente: =CFecha(SiInm(Hora([TxtTiempoTrancurrido])>9;Hora([TxtTiempoTrancurrido]);'0' & Hora([TxtTiempoTrancurrido])) & ':' & SiInm(Minuto([TxtTiempoTrancurrido])>54;(Hora([txtTiempoTrancurrido]))+1 & ':00:00';SiInm(Minuto([TxtTiempoTrancurrido])>45;'45';SiInm(Minuto([TxtTiempoTrancurrido])>29;'30';SiInm(Minuto([TxtTiempoTrancurrido])>15;'15';'00') & ':00')))) El problema ...

  #1 (permalink)  
Antiguo 02/09/2008, 04:37
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
sumar una hora

Veamos, en un formulario de acces, en un campo tengo lo siguiente:

=CFecha(SiInm(Hora([TxtTiempoTrancurrido])>9;Hora([TxtTiempoTrancurrido]);'0' & Hora([TxtTiempoTrancurrido])) & ':' & SiInm(Minuto([TxtTiempoTrancurrido])>54;(Hora([txtTiempoTrancurrido]))+1 & ':00:00';SiInm(Minuto([TxtTiempoTrancurrido])>45;'45';SiInm(Minuto([TxtTiempoTrancurrido])>29;'30';SiInm(Minuto([TxtTiempoTrancurrido])>15;'15';'00') & ':00'))))

El problema que tengo es en la parte en que pongo que si es mayor de 54 se sume una hora al campo txtTiempoTrancurrido. Alguien sabe cómo hacerlo? (el resto de lo expuesto me funciona).
__________________
Cámara Oscura
Etheria
  #2 (permalink)  
Antiguo 02/09/2008, 05:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

Koudelka,

No entiendo bien toda la lógica y, la verdad, creo que corres peligro con una sintaxis de > 54, > 45, > 30 y > 15, pues lo que es mayor que 15 también puede ser mayor que todos los demás. Yo intentaría hacerlo con rangos between 15 and 30, between 30 and 45, etc. Y además.
No sé cómo has anidado los SiInm, pero parece que esto debería funcionar
SiInm(Minuto([TxtTiempoTrancurrido])>54;Hora([txtTiempoTrancurrido])+1 & ':00:00'; Hora([txtTiempoTrancurrido]))
Necesitas las dos condiciones: si supera, se le suma una hora, y, si no, no se le suma.
No estoy seguro...
  #3 (permalink)  
Antiguo 02/09/2008, 05:33
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

No me funciona lo de la hora, de todas formas ya me han dicho que quite esa opción. No se porqué dices que 15 puede ser mayor que los demás, ya que lo único que modifico son los minutos o_O.
__________________
Cámara Oscura
Etheria
  #4 (permalink)  
Antiguo 02/09/2008, 05:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

Cita:
Iniciado por Koudelka Ver Mensaje
No me funciona lo de la hora, de todas formas ya me han dicho que quite esa opción. No se porqué dices que 15 puede ser mayor que los demás, ya que lo único que modifico son los minutos o_O.
Lo que digo (quizás no me he expresado bien) es que un número de minutos mayor que 15 puede ser también mayor que 30, que 45 y que 54.
Me explico, qué ocurrirá con tu consulta cuando el minuto sea 56, por ej. 1:56:00
le afectarán las codiciones para mayor que 15, que 30, que 45 y que 54. Cuál de ellas tomará, etc.
A eso me refiero.
  #5 (permalink)  
Antiguo 02/09/2008, 05:43
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

Ya te entiendo, pero yo lo veo de la siguiente manera.

Si te fijas, lo primero que mira los minutos es si es mayor de 54, en caso de que sí lo sea, haría lo de sumar una hora más (que al final lo he quitado), en caso de que sea menor, salta al siguiente paso que es 45. Y así sucesivamente.

Así es como yo lo veo, quizás me equivoque y no lo haga así (de momento no me ha dado problemas)
__________________
Cámara Oscura
Etheria
  #6 (permalink)  
Antiguo 02/09/2008, 05:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

llevas razón, anidando esos SiInm, y ordenando de mayor a menor, también te funcionará. De hecho te está funcionando.
Saludos.
  #7 (permalink)  
Antiguo 08/09/2008, 04:03
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

resurjo mi tema porque ahora sí que necesito sumar la hora (si es que los jefes no se aclaran!).

Partiendo de lo anterior, sería añadir un nuevo SiInm... en el que si es mayor de 54 minutos que se sume la hora. He intentado poner que los minutos se cambien a 60 (igual colaba y se sumaba la hora) pero no funciona y necesito ideas >.<
__________________
Cámara Oscura
Etheria
  #8 (permalink)  
Antiguo 08/09/2008, 05:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

Prueba esto, Koudelka:

=CFecha(SiInm(Minuto([txttiempotranscurrido])>54,AgregFecha('n',-Minuto([txttiempotranscurrido]),AgregFecha('h',1,([txttiempotranscurrido]))),'minutos inferiores a 54'))

Si el minuto es superior a 54, suma una hora y resta los minutos... ¿es eso lo que querías...? En el lugar de 'minutos inferiores a 54, pones los otros SiInm... que te funcionaban).

Última edición por jurena; 08/09/2008 a las 06:59
  #9 (permalink)  
Antiguo 12/09/2008, 03:27
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

Bueno jurena, siento haber tardado en contestar (nunca me dejan terminar las cosas y ya me ponen otras para hacer ¬¬). He intentado ponerlo de la siguiente manera:


=CFecha(SiInm(Hora([calculo2])>9;Hora([calculo2]);'0' & Hora([calculo2])) & ':' & SiInm(Minuto([calculo2])>54;AgregFecha('n',-Minuto([calculo2]) & AgregFecha('h',1,([calculo2])));SiInm(Minuto([calculo2])>28;'30';SiInm(Minuto([calculo2])>13;'15';'00') & ':00')))

El problema es que si lo pego al origen de datos se me borra entero o_O
__________________
Cámara Oscura
Etheria
  #10 (permalink)  
Antiguo 14/09/2008, 08:17
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

Koudelka,

Esto lo he probado en consulta y sobre un campo hora llamado calculo2. Creo que hace lo que pides, pero seguramente haya otra solución más fácil.

salida: SiInm(Hora(SiInm(Minuto([calculo2])>54,AgregFecha('n',-Minuto([calculo2]),AgregFecha('h',1,([calculo2]))),SiInm(Minuto([calculo2])>28,AgregFecha('n',30-Minuto([calculo2]),([calculo2])),SiInm(Minuto([calculo2])>13,AgregFecha('n',15-Minuto([calculo2]),([calculo2])),AgregFecha('n',-Minuto([calculo2]),([calculo2]))))))>9,SiInm(Minuto([calculo2])>54,AgregFecha('n',-Minuto([calculo2]),AgregFecha('h',1,([calculo2]))),SiInm(Minuto([calculo2])>28,AgregFecha('n',30-Minuto([calculo2]),([calculo2])),SiInm(Minuto([calculo2])>13,AgregFecha('n',15-Minuto([calculo2]),([calculo2])),AgregFecha('n',-Minuto([calculo2]),([calculo2]))))),'0' & SiInm(Minuto([calculo2])>54,AgregFecha('n',-Minuto([calculo2]),AgregFecha('h',1,([calculo2]))),SiInm(Minuto([calculo2])>28,AgregFecha('n',30-Minuto([calculo2]),([calculo2])),SiInm(Minuto([calculo2])>13,AgregFecha('n',15-Minuto([calculo2]),([calculo2])),AgregFecha('n',-Minuto([calculo2]),([calculo2]))))))
  #11 (permalink)  
Antiguo 15/09/2008, 04:23
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

He copiado lo que me has dicho y me sale el siguiente error:

http://img139.imageshack.us/my.php?image=errorwg8.jpg

Según tú lo has hecho en una consulta, yo lo hago en un formulario (no creo que esto influya no?), de todas formas... no tendría que estar separado por ; en vez de comas? me explico:

SiInm([Lo que sea]=algo;opción verdadera; segunda opcion)

Aún así veo la sentencia un poco larga @_@. No se, no se podría acortar de esta manera?:


=CFecha(SiInm(Hora([calculo2])>9;Hora([calculo2]);'0' & Hora([calculo2])) & ':' & SiInm(Minuto([calculo2])>45;(AgregFecha('h',1,([calculo2])) & Minuto('n',-Minuto([calculo2])));SiInm(Minuto([calculo2])>28;'30';SiInm(Minuto([calculo2])>13;'15';'00') & ':00')))

Esta opción la he probado y me salta con otro error eh?
__________________
Cámara Oscura
Etheria
  #12 (permalink)  
Antiguo 15/09/2008, 07:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

Koudelka,
varias cosas: lo de la coma o punto y coma depende; si en tu programa separas con punto y coma, cambia la coma por punto y coma (en el mío sólo me acepta la coma: cosas de la configuración regional y de algún otro detalle). Pon punto y coma en tus separaciones de las condicionales.
No lo he probado en un formulario, pero la única diferencia sería que un dato pasado al formulario fuera interpretado como cadena de texto, y tendrías que añadir CFecha([calculo2]) en todas las ocasiones en que trabajases sobre el dato, es decir, cuando escribías Minuto([calculo2]), tendrías que escribir Minuto(CFecha([calculo2])). Y cuando escribes ([calculo2]), deberías escribir CFecha([calculo2]). Es decir, siempre que trabajases con el dato y lo quisieras usar como hora, deberías hacer la conversión.
En cuanto a la longitud de la consulta, no creo que sea un problema, pero piensa que lo que estás haciendo es:


si minutos > 9 (si (mayor que 54; añade una hora y deja los minutos a 0; si (mayor que 28; deja los minutos a 30; si (mayor que 13; deja los minutos a 15; deja los minutos a 0 ))); '0'&(si (mayor que 54; añade una hora y deja los minutos a 0; si (mayor que 28; deja los minutos a 30; si (mayor que 13; deja los minutos a 15; deja los minutos a 0 )))

Una condicional encadenada para los minutos, pero para añadir el 0, la condicional engloba a las encadenadas, pues eso será posterior a lo otro; piensa una hora que es 9:56; primero pasará a 10:00 y luego se quedará ahí; pero si encadenas la otra condicional, pasará a 10:00, y luego a 00:00.
  #13 (permalink)  
Antiguo 15/09/2008, 07:55
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

Originalmente yo lo tengo así:

=CFecha(SiInm(Hora([calculo2])>9;Hora([calculo2]);'0' & Hora([calculo2])) & ':' & SiInm(Minuto([calculo2])>43;'45';SiInm(Minuto([calculo2])>28;'30';SiInm(Minuto([calculo2])>13;'15';'00') & ':00')))

Y así me funciona correctamente, por lo que no se porqué hay que añadirle el CFecha todo el rato >.<

He intentado guiarme con lo que me has dicho, poniendo lo siguiente:

=CFecha(SiInm(Minuto([calculo2]))>54;AgregFecha('n',-Minuto([calculo2]),AgregFecha('h',1,([calculo2])));SiInm(Minuto([calculo2])>28;'30';SiInm(Minuto([calculo2])>13;'15';'00'))))

Pero me sale el siguiente error:
http://img136.imageshack.us/my.php?image=errorab6.jpg

Creo que lo que puede dar error es es lo que marco en rojo:

=CFecha(SiInm(Minuto([calculo2]))>54;AgregFecha('n',-Minuto([calculo2]),AgregFecha('h',1,([calculo2])));SiInm(Minuto([calculo2])>28;'30';SiInm(Minuto([calculo2])>13;'15';'00'))))
__________________
Cámara Oscura
Etheria
  #14 (permalink)  
Antiguo 15/09/2008, 08:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

pon ahí también punto y coma, por si 'cuela'.

edito: no veo la imagen del error.
  #15 (permalink)  
Antiguo 15/09/2008, 08:33
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

El error estaba en unos paréntesis de más, pero sigue dando un error que dice:

Omitió un operando o un operador, introdujo un carácter o coma no válidos o introdujo texto sin encerrarlo en comillas

Poniéndole el ; en donde la coma sale el mismo mensaje >.<
__________________
Cámara Oscura
Etheria
  #16 (permalink)  
Antiguo 15/09/2008, 09:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

para comprobar el error, parcela la sintaxis y ve por partes:
= SiInm(Hora(SiInm(Minuto([calculo2])>54; AgregFecha('n',-Minuto([calculo2]),AgregFecha('h',1,([calculo2])));"54 o menos minutos")

Prueba esto y observa qué ocurre con las horas que pasen de 54 minutos

Si sigue dando problema, prueba a añadir el punto y coma dentro del AgregFecha
= SiInm(Hora(SiInm(Minuto([calculo2])>54; AgregFecha('n';-Minuto([calculo2]);AgregFecha('h';1;([calculo2])));"54 o menos minutos")
  #17 (permalink)  
Antiguo 15/09/2008, 09:07
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

Da el mismo error de antes de las dos formas T.T
__________________
Cámara Oscura
Etheria
  #18 (permalink)  
Antiguo 15/09/2008, 09:18
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

Koudelka,

he probado esto con datos en un formulario:
=SiInm(Minuto([calculo2])>54,AgregFecha('n',-Minuto([calculo2]),AgregFecha('h',1,([calculo2]))),"54 o menos minutos")

y a mí me ha funcionado perfectamente. Prueba tú con puntos y coma, como en esta de abajo):

=SiInm(Minuto([calculo2])>54;AgregFecha('n',-Minuto([calculo2]),AgregFecha('h',1,([calculo2])));"54 o menos minutos")


y como tercera opción así:
=SiInm(Minuto([calculo2])>54;AgregFecha('n';-Minuto([calculo2]);AgregFecha('h';1;([calculo2])));"54 o menos minutos")

a ver si ahora empezamos a ver la luz
  #19 (permalink)  
Antiguo 15/09/2008, 09:25
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

La primera línea me dice que es posible que haya introducido un operador sin un operador

Las otras dos dan el error anterior -.-
__________________
Cámara Oscura
Etheria
  #20 (permalink)  
Antiguo 15/09/2008, 09:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

Koudelka,

he probado de nuevo en un formulario con un campo texto y añadido la sintaxis y funciona bien.
Sólo por lanzar un disparo al aire, no será que estás escribiendo dos iguales, es decir, cuando pegas la sintaxis, ya el programa añade un igual, por lo que el primer igual sobra y da el problema que dices (con el mensaje que pareces estar recibiendo). Vuelve a empezar y pega esto:

SiInm(Minuto([calculo2])>54,AgregFecha('n',-Minuto([calculo2]),AgregFecha('h',1,([calculo2]))),"54 o menos minutos")
  #21 (permalink)  
Antiguo 15/09/2008, 09:54
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

poniendo eso no me da error, pero si ejecuto el formulario pone #¿Nombre?
__________________
Cámara Oscura
Etheria
  #22 (permalink)  
Antiguo 15/09/2008, 10:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

EDITO para decirte que creo que esto funcionará:

Cita:
Formato(SiInm(Minuto([calculo2])>54,AgregFecha('n',-Minuto([calculo2]),AgregFecha('h',1,([calculo2]))),SiInm(Minuto([calculo2])>28,AgregFecha('n',30-Minuto([calculo2]),([calculo2])),SiInm(Minuto([calculo2)>13,AgregFecha('n',15-Minuto([calculo2]),([calculo2])),AgregFecha('n',-Minuto([calculo2]),([calculo2]))))),"hh:mm")
Con el formato hh:mm sacamos los ceros que quieres, y solo mostramos horas y minutos.

Última edición por jurena; 15/09/2008 a las 13:36
  #23 (permalink)  
Antiguo 16/09/2008, 02:24
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

No me hace nada, sólo pone #¿Nombre?
__________________
Cámara Oscura
Etheria
  #24 (permalink)  
Antiguo 16/09/2008, 03:08
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

¡Qué raro!
si quieres, envíame a mi correo particular una versión comprimida de tu base con las tablas implicadas, con datos ficticios, y con las consultas y formularios necesarios; indícame dónde quieres sacar eso y trataré de resolverlo y enviártelo hecho. Mi versión de Access es de 2002, con lo que probablemente tendrías que guardarla con un formato anterior si tienes una versión muy actualizada.
Mi correo es [email protected]
  #25 (permalink)  
Antiguo 16/09/2008, 03:22
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

uso el 2003, a ver qué puedo hacer con la base de datos para enviartela.
__________________
Cámara Oscura
Etheria
  #26 (permalink)  
Antiguo 16/09/2008, 04:37
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

Ya te he enviado el e-mail con la BD. Decir que laiba a convertir a 2002, pero me he dado cuenta de que estaba hecha para access 2000 o_O
__________________
Cámara Oscura
Etheria
  #27 (permalink)  
Antiguo 16/09/2008, 05:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

Koudelka,

ya lo he recibido y trataré de echarle un vistazo, aunque esta tarde me será imposible...
  #28 (permalink)  
Antiguo 18/09/2008, 01:47
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

ya he hecho lo que me pedías y sigue fallando (mira el mp)
__________________
Cámara Oscura
Etheria
  #29 (permalink)  
Antiguo 18/09/2008, 04:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: sumar una hora

Koudelka,

dime cómo llega calculo2 a ese formulario. ¿Qué es exactamente, se trata de un alias de un cálculo que viene de una consulta y se muestra en ese formulario, o qué? Eso es importante, pues, como te dije, la sintaxis funciona perfectamente cuando se trata de un campo creado en tabla y mostrado en un formulario. Me dices que algo que te dije no funciona, ¿a qué te refieres? ¿qué es ese mp?
  #30 (permalink)  
Antiguo 18/09/2008, 06:17
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: sumar una hora

hice lo que tú me pediste, crear una nueva base de datos, hacer una tabla con un campo llamado calculo2 de formato hora larga y después introdujese varias horas.

Creé un formulario en el que se mostraba calculo2 (las horas que había metido) y he creado un nuevo campo de texto con esto de origen de datos:

Formato(SiInm(Minuto([calculo2])>54,AgregFecha('n',-Minuto([calculo2]),AgregFecha('h',1,([calculo2]))),SiInm(Minuto([calculo2])>28,AgregFecha('n',30-Minuto([calculo2]),([calculo2])),SiInm(Minuto([calculo2)>13,AgregFecha('n',15-Minuto([calculo2]),([calculo2])),AgregFecha('n',-Minuto([calculo2]),([calculo2]))))),"hh:mm")

Poniéndole un = me da error y si no lo pongo me muestra #¿Nombre? en el campo de texto.
__________________
Cámara Oscura
Etheria
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:34.