Orden de numeración por grupos

A ver si me puedes echar una mano.
Tengo una base de datos de deportistas para una competición. Cada deportista pertenece a un club. Cada vez que meto los tiempos de cada uno, puedo sacar una clasificación general y una clasificación de cada equipo. Pero necesito crear una columna nueva que me numere empezando por 1 la clasificación de cada equipo, y hay que renumerar cada vez que se meten clasificaciones nuevas. Con una consulta creo la clasificación por equipos como quiero, pero no se como crear la numeración.

1 respuesta

Respuesta
1
Si quieres el número por pantalla es difícil de hacer en access. En cambio si lo quieres en un informe es muy sencillo.
Para el informe consulta: http://accessvbafaq.mvps.org/item.asp?pagina=34
Si quieres numerarlos en pantalla no hay más narices que pasar por VBA.
Gracias por contestar.
Efectivamente, en un informe es muy sencillo, es como lo tengo ahora.
El problema es que lo necesito en la tabla como un campo más, porque necesito ese dato para incluirlo en la fórmula que calcula la clasificación por equipos (el mejor equipo).
¿Me puedes ayudar para ver como se hace en VBA? ¿Es muy complicado?
Un poquillo. Vamos por partes.
Crea una consulta en la que te salgan ordenados los registros que quieres numerar empezando por el primero y que también te salga el campo que quieres rellenar conelnúmero de orden. Pongamos que les has llamado qryConsulta
Si la consulta tiene parámetros, no pasa nada, se pueden controlar desde código. Por ejemplo supondré que hay un parámetro llamado Param1
Crea un módulo y creas dentro una función que ponga.
public function RellenarOrden()
   dim db as database
   dim qry as querydef
   dim rst as recordset
   dim a as long
   set db = currentdb
   set qry = db.Querydefs("qryConsulta")
   qry("Param1") = <- Aquí pones el valor que quieres asignar al parámetro Param1 ->
   set rst = qry.openrecordset(dbOpenDynaset)
   a =1
   do until rst.eof
       rst.edit
      rst("CampoOrden") = a
      rst.update
    rst.MoveNext
loop
Rst. Close
Qry. Close
Db. Close
end funtion
Llama a esta función desde un botón.
Si el parámetro es por ejemplo el número de competición, tendrás que recorrer todos los números.
Buenos días y muchas gracias por contestar.
¿A que te refieres con "parametros"
Me pierdo un poquito: te explico un poco mejor.
Tengo 50 clubes cada uno con sus deportistas (no son el mismo número en cada uno) que compiten en carreras. Cada corredor tiene siempre el mismo dorsal en todas las carreras (para facilitar la base de datos), y cada club tiene un número identificativo. Supongamos que el orden de llegada en una carrera es el siguiente (pongo los campos interesantes)
Corredor - Club - Orden_carrera - Orden_Club
54 - 4 - 1 - 1
12 - 3 - 2 - 1
18 - 1 - 3 - 1
55 - 4 - 4 - 2
68 - 4 - 5 - 3
25 - 1 - 6 - 2
y así sucesivamente. Lo que necesito es que me rellene el campo "Orden_Club" para obtener tablas como la siguiente:
Club - Corredor - Orden_Club
4 - 54 - 1
4 - 55 - 2
4 - 68 - 3
Club - Corredor - Orden_club
1 - 18 - 1
1 - 25 - 2
para hacer esto, genero una consulta ordenada por club y orden_carrera de la siguiente forma
Club - Corredor - Orden_carrera - Orden_club
1 - 18 - 3
1 - 25 - 6
3 - 12 - 2
4 - 54 - 1
4 - 55 - 4
4 - 68 - 5
y la cuestión es rellenar el orden_club, reiniciando numeración cada vez que cambia de club.
A ver si no lo he complicado mucho. Muchas gracias
Dame las definiciones de las tablas que intervienen. Es decir, nombre de tablas y campos. TODOS!
Buenos días.
Las tablas con sus campos son:
CLUBES: Club(Numérico*), Nombre(Texto), Dirección(Memo), Presidente(texto)
CORREDORES: Dorsal(Numérico*), Club(Numérico), Nombre(Texto), FechaNacimiento(Date), Categoría(Texto), Activo(Si/No)
CARRERAS: Numero(Numérico*), Localidad(Texto), Fecha(Date), Distancia(Numérico)
COMPETICION: Carrera(Numerico),Corredor(numerico),Tiempo(numerico)
Entiendo que competición es la participación de un corredor en una carrera.
Ahora te pongo sólo el código para el orden de las carreras, sin el del club. A ver si te sale bien.
Vamos a hacer campos precalculados. Es decir, calcularemos esos valores de orden para que luego sea solo mostrarlos. Cada vez que se añada una carrera o un corredor o lo que sea, tendrás que volver a recalcularlo. Sé que no es lo más óptimo, pero es lo más fácil.
1.- Añadiremos los campos OrdenCarrera y OrdenClub a la tabla COMPETICIÓN.
2.-Crea una consulta nueva de selección. E incluye la tabla COMPETICIÓN. Baja todos los campos uno a uno (no con *, sino uno a uno), en el siguiente orden y configurándolos así:
Carrera, visible=si, Orden=Ascendente
Tiempo, visible=no, Orden=Ascendente
OrdenCarrera, visible = si, Oden=vacio
OrdenClub, visible = si, orden=vacio.
Graba la consulta con el nombre qryResultadosOrdenados
3.- Crea un módulo y copias el siguiente código
public function RellenarOrdenCarrera()
    dim db as database
    dim qry as querydef
    dim rst as recordset
    dim or_car as long
    dim ult_car as long
    ult_car = 0
    set db = currentdb
    set qry = db.Querydefs("qryResultadosOrdenados")
     set rst = qry.openrecordset(dbOpenDynaset)
     do until rst.eof
        if rst!Carrera <> ult_car then
            ult_car = rst!Carrera
             or_car = 1
        else
              or_car = or_car + 1
         end if
         rst.edit
         rst("OrdenCarrera") = or_car
         rst.update
         rst.MoveNext
     loop
     rst.close
    qry.close
    db.close
end funtion
Si te va bien, hacemos el de los clubes también
Un millón de gracias. Funciona perfectamente
¿Podemos seguir con los clubes?
¿No te atreves a hacerlo sólo?
Venga, te iré dando pistas. Así aprendes.
1.- Haz otra consulta en la que ya te salgan ordenados de forma que sea ir numerando del 1 al que sea hasta que algo cambie y volver a comenzar la numeración.
2.- Copia el código, cambia el nombre de la consulta y vigila en la sentencia if a ver que valores son los que cambian..
Buena suerte :)
Ok, lo intento.
Lo que pasa es que con VBA no estoy muy suelto. Si las sentencias son las mismas que en la que me has pasado, no creo que tenga problemas.
Muchas gracias
He creado otro bucle IF dentro del que teníamos y funciona perfectamente.
Muchísimas gracias por tu ayuda.
Tengo otro par de preguntas, pero mejor las abro independientes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas