Hacer clasificación deportiva por tiempo y orden

He creado una pequeña base de datos para obtener los resultados de una competición. Tengo una tabla llamada resultados, en la que tengo los campos nombre, categoría, sexo, prueba, tiempo, y empate en la que voy introduciendo los tiempos mediante un formulario. Hasta ahora saco la clasificación mediante un informe ordenando todos los datos y enumerando las filas del informe insertando la formula =1 en un cuadro de texto. El campo empate me sirve para ordenar el tiempo porque a veces aunque sea empate según el criterio que haya tenido el juez la posición será la misma o no. Pero me gustaría sacar la clasificación y que a la hora de poner los puestos 1º, 2º, 3º, ... Aparecieran los empates con el mismo puesto, es decir, por ejemplo, si hubiese dos segundos: 1º, 2º, 2º, 4º, a menos que yo en el campo empate le de la diferencia de orden.

Espero haber explicado bien la situación, a ver si alguien puede ayudarme.

1 respuesta

Respuesta
1

De vuelta de vacaciones y repasando he visto tu pregunta. Te lo voy a poner con mis datos y luego le cambias los nombres

Supongamos que tienes una tabla1 con Nombre, prueba, marca y puesto. Añádele un campo Aux numérico.

Supongamos que tienes un formulario continuo donde vas a ir poniendo los nombres, la prueba y el resultado. En el encabezado del formulario crea un botón de comando y en sus propiedades-otras-nombre ponle Buscaprueba. En el origen de la fila de este combinado, con el generador de consultas, añade el campo Prueba y agrupa(para que no se repita el nombre). En sus propiedades-eventos-después de actualizar, crea un procedimiento de evento y entre Private Sub y End Sub escribe

DoCmd.SetWarnings False
DoCmd.RunSQL "update tabla1 set puesto=0 where prueba=forms!tabla1!buscaprueba"
Form.RecordSource = "select * from tabla1 where prueba=forms!tabla1!buscaprueba order by marca asc"
Dim i As Integer
For i = 1 To Form.Recordset.RecordCount
Aux = i
DoCmd.GoToRecord , , acNext
Next
DoCmd.GoToRecord , , acFirst
Dim a As Integer
For a = 1 To Form.Recordset.RecordCount

If Marca = DLookup("marca", "tabla1", "prueba=forms!tabla1!prueba and aux=(forms!tabla1!aux)-1") Then
Puesto = a - 1
Else
Puesto = a
End If
DoCmd.GoToRecord , , acNext
Next

Así, cuando abras el formulario, pones nombres, pruebas y marcas. No hace falta que los pongas en orden, quiero decir que puedes poner primero Pepe 400 42:56, luego Juan 3000 13:50

Luis 800 22:22, Antonio 400... porque luego te los v a ordenar por prueba y por marca ascendente. Cuando quieras, ver la clasificación de una prueba, en el combinado la eliges y...

De todas formas, si te parece complicado, aunque es sencillo, y quieres, mándame un mensaje a [email protected] y te mando un ejemplo. Si lo haces, en el asunto del mensaje, pon tu alias Here Here, ya que si no sé quien lo manda no los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas