Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Duda Cálculo de Horas

Estas en el tema de Duda Cálculo de Horas en el foro de Visual Basic clásico en Foros del Web. Hola buenos días a todos... Tengo una duda, hice un programa en VB para calcular la diferencia entre horas de entrada y salida de alumnos ...
  #1 (permalink)  
Antiguo 10/09/2009, 10:04
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Duda Cálculo de Horas

Hola buenos días a todos... Tengo una duda, hice un programa en VB para calcular la diferencia entre horas de entrada y salida de alumnos de una escuela. Las horas están almacenadas en una BD de Access. Paso los datos de el campo de las horas a variables para entrada y salida, convierto a cadenas, extraigo datos y trato de hacer el cálculo, en fin el código explicado es el siguiente, hecho en VB6:

Código:
Private Sub btnCalcular_Click()
Dim he As Date
Dim hs As Date
Dim Total As Double
Dim Pago As Double
Dim Total2 As Double
Dim Pago2 As Double
Dim Mult As Double
Dim Suma As Double
Dim MyStringS As String
Dim MyStringE As String
Dim Cadena1 As String
Dim Cadena2 As String
Dim Cadena3 As String
Dim Cadena4 As String
Dim Entero1 As Integer
Dim Entero2 As Integer
Dim Entero3 As Integer
Dim Entero4 As Integer
Dim i As Long


'Paso valores de tipo fecha a variables de tipo fecha
hs = Val("HSalida")
he = Val("HEntrada")

'Convierto los valores tipo fecha a tipo cadena
MyStringS = CStr(hs)
MyStringE = CStr(he)

'Extraer horas de cadena de Horas Salida
Cadena1 = Left(MyStringS, 8)
Cadena2 = Mid(MyStringS, 4, 2)

'Extraer horas de cadenas de Horas Entrada
Cadena3 = Left(MyStringE, 8)
Cadena4 = Mid(MyStringE, 4, 2)

'Convertir cadenas en Enteros
Entero1 = Val(Cadena1)
Entero2 = Val(Cadena2)
Entero3 = Val(Cadena3)
Entero4 = Val(Cadena4)

'Calcular Pago por Horas
Total = Entero3 - Entero1
Pago = Total * 100

'Calcular pago por minutos
Total2 = Entero4 - Entero2
Pago2 = Total2 * 1.6
If Pago2 < 0 Then
    Mult = Pago2 * -1
Else
    Mult = Pago2
End If

Suma = Pago + Mult

boxht = Val(Total) & ":" & Val(Total2)
boxpagar = Str(Suma)

End Sub
Ahora, he probado imprimir en una caja de texto (boxht) valor por valor para saber como va saliendo y donde está el error, el cuál es el siguiente:

1. La hora de salida toma el valor exacto de la base de datos, p.ej. 12:00, sin embargo la hora de entrada no toma el valor exacto, p.ej. 07:00, la hora de entrada me toma el mismo valor que la hora de salida y en el resultado me sale lo siguiente:

boxht = 00:00
boxpagar = 0

El funcionamiento, al parecer es el correcto, ya que si toma como valores 12:00 (salida) y 12:00 (entrada) por ovbias razones el resultado será el mostrado anteriormente. Sin embargo no sé porque no toma el valor correcto de la hora de entrada.

Si se preguntan poque no use Datadiff, es porque leí por ahí que había problemas con algunos tipos de horas (Doce de la noche = 00:00 a.m.). Configuré el campo de las horas en Access para que quede de las 01:00 a.m. a las 24:00 p.m.

Regresando al error, alguien sabe porque no me toma la hora normal?

Como dato opcional, estoy usando ADO en la conexión y uso un objeto Adodc para visualizar a cada empleado y ahi si veo las horas correctamente (entrad y salida)

Saludos a todos.
  #2 (permalink)  
Antiguo 10/09/2009, 11:47
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Duda Cálculo de Horas

Puede que esté en un error, ya que nunca me he aclarado con las bases de datos, pero en mi opinión, y mirandola así por encima, la hora con la que trabajas todo el tiempo es 0:00:00
La razón es que cargas las variables he y hs con el valor que devuelve una cadena que no contiene ningún número, con el resultado = 0
hs=val("cadena") te devuelve un número de valor 0
prueba con
hs=val(HSalida)
si hsalida es una cadena con numeros
o
hs=hsalida
si hsalida es una variable Date como hs.

Por otro lado la variable de tipo Date ¿no es para fechas?. ¿¿No deberías usar Time??

En fin, igual hasta te sirve de ayuda.

Saludos.
  #3 (permalink)  
Antiguo 10/09/2009, 13:25
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Duda Cálculo de Horas

De hecho si coloco en boxht el valor de hs, me da la hora tal cual está en la bd de Access, excepto la hora de he.

Por otro lado, con lo que me comentas de Time por Date, voy a probarlo y veremos que sucede.

Saludos
  #4 (permalink)  
Antiguo 11/09/2009, 10:13
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Duda Cálculo de Horas

Mmmm, si, ya probé con Timer y no cambió nada, sigue el mismo problema.
  #5 (permalink)  
Antiguo 11/09/2009, 10:20
Avatar de nonpublic  
Fecha de Ingreso: agosto-2009
Mensajes: 240
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: Duda Cálculo de Horas

en lugar de extraer las horas y fechas de una cadena guardalas en una variable
Ej.
Cita:
SELECT time(now()) as my_hora, date(now()) as my_fecha
Incluso las puedes formatear desde las sentencias y evitas manipular la informacion si solo es para visualizarla
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 05:04.