Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/06/2003, 11:02
Avatar de Bravenap
Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 5 meses
Puntos: 4
Bueno vale, reconozco que es bastante lioso, yo mismo estuve dalequetepego al tema un buen rato.
Ahora no estoy en casa, pero en cuanto pueda te completo el ejemplo pero más simplificado.

De momento, y no sé si se puede, por qué no pruebas a hacer directamente la suma con Access. Es decir, a modo de hoja de cálculo, sumas todos los registros en una celda y luego recuperas con ASP el valor de esa celda. No sé si te permitirá definir el tipo de datos del campo como HH:MM:SS para que te los sume correctamente. Es una opción, si no también está la posibilidad de exportar los datos a Excell.

Suerte y un saludo.

YA ESTÁ, AGGGGGGGGGGG
Por favor, dime que te vale porque si no me suicido :

Código:
<html>
<head>
<%
Dim vecHoras()
Dim vecMinutos()
Dim vecSegundos()

SET BASE = Server.CreateObject("ADODB.Connection")
BASE.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& Server.MapPath("./tiempos.mdb")
		
SQL = "SELECT * FROM Tiempos"
SET RS = Server.CreateObject ("ADODB.RecordSet")
RS.Open SQL, BASE

i=0

IF NOT RS.EOF THEN
	RS.Movefirst
	DO UNTIL RS.EOF
	
	Tiempo = RS("Tiempos")

	vecTiempo = split(CDate(Tiempo),":")
	IF i=0 THEN
		Redim vecHoras(i)
		Redim vecMinutos(i)
		Redim vecSegundos(i)
	ELSE 
		Redim Preserve vecHoras(i)
		Redim Preserve vecMinutos(i)
		Redim Preserve vecSegundos(i)
	END IF	
	
	vecHoras(i) = vecTiempo(0)
	vecMinutos(i) = vecTiempo(1)
	vecSegundos(i) = vecTiempo(2)

	i=i+1
	
	RS.Movenext
	LOOP
END IF	

%>
</head>

<body>
<table>
<%FOR i=0 TO UBound(vecHoras)%>
<tr>
<td>Ronda <%=i+1%>.-</td><td align="right"><%=vecHoras(i)%>h<%=vecMinutos(i)%>'<%=vecSegundos(i)%>''</td>
</tr>
<%NEXT%>

<tr><td colspan="2"><hr></td></tr>

<%
SumaSegundos = 0
SumaMinutos = 0
SumaHoras = 0

FOR i=0 TO UBound(vecHoras)
	SumaSegundos=SumaSegundos+vecSegundos(i)
	SumaMinutos=SumaMinutos+vecMinutos(i)
	SumaHoras=SumaHoras+vecHoras(i)
NEXT

masMinutos=Int(SumaSegundos/60)
SumaSegundos=SumaSegundos-(masMinutos*60)

SumaMinutos=SumaMinutos+masMinutos
masHoras=Int(SumaMinutos/60)
SumaMinutos=SumaMinutos-(masHoras*60)

SumaHoras=SumaHoras+masHoras

%>
<tr><td colspan="2" align="right"><b>TOTAL: <%=SumaHoras%>h<%=SumaMinutos%>'<%=SumaSegundos%>''</b></td></tr>
</table>
</body>
</html>
Te explico un poco. En al base de datos hay dos columnas, una de identificación del usuario y otra de los tiempos en formato HH:MM:SS. En este caso he guardado en el recordset todos los tiempos por lo que no sería necesario el primer campo del usuario. Si crees que si lo necesitas no hay más que modificar el SQL (fácil ¿no?).

Bien, pues se recoge en el vector vecTiempo los valores de las horas, minutos y segundos y se hacen corresponder con las entradas de los vectores vecHoras, vecMinutos y vecSegundos respectivamente. Esta parte es la que más me ha costado porque había que ir redimensionando esos vectores guardando los anteriores valores.

Una vez almacenados todos los datos y mostrados (opcional) se suman todos los valores de cada uno de los vectores. Después con cada suma se va hallando la parte entera de su división por 60 que será lo que se le añada al siguiente vector. Primero para segundos y lugo para los minutos.

Al final se muestra el valor total.

SÍ SÍ SÍ SÍ, JA JA JA JA. POR FÍN.

A mí me ha funcionado perfectamente así que espero que no te de problemas.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!

Última edición por Bravenap; 17/06/2003 a las 11:11