Renumerar campo en formulario access

Tengo un formulario con corredores puntuados por categorías como la siguiente:

Necesito renumerar el campo PosClasif, por orden TotalPuntos decreciente, para cada CircuitoIdCategoria.

Gracias.

2 respuestas

Respuesta
2

Antes déjeme decirle que el campo PosClasif sobra en la tabla porque éste se obtiene mediante una consulta, no obstante, le preparé el ejemplo considerando el campo en la tabla.

TABLA

Hago una consulta para ordenar y con base en ésta hago la actualización

CONSULTA ORDENAR DATOS

CONSULTA DE ACTUALIZACIÓN

Observe que actualizo con base en la función RT_NumeraParcialSQL(), el autor es el maestro JESUS MANSILLA CASTELLS -Mihura-.

FORMULARIO RENUMERA

Le asigno como origen de datos la consulta qryOrdena. (Me faltaron los encabezados del formulario).

Observe que la información esta ordena. Ahora, cambio el TotalPuntos de EDUARDO 670 por 630 y obtengo.

Efectivamente me lo reclasifica en puesto 4.

CÓDIGO DEL BOTÓN RENUMERAR

Private Sub btnRenumerar_Click()
DoCmd. OpenQuery "qryActualizaPuntaje"
DoCmd. Close acQuery, "qryActualizaPuntaje"
Me. Requery
End Sub

CÓDIGO OTROS EVENTOS DEL FORMULARIO

Private Sub Form_AfterUpdate()
  Call btnRenumerar_Click
End Sub
Private Sub Form_Load()
  DoCmd.MoveSize , 1 * 1440, , 5.5 * 1440
End Sub
Private Sub Form_Open(Cancel As Integer)
  Call btnRenumerar_Click
End Sub

CÓDIGO DE LA FUNCIÓN 

' Autor : JESUS MANSILLA CASTELLS -Mihura-
'---------------------------------------------------------------------------------------------
Public Function RT_NumerarParcialSQL(nDato) As Long
'variable que no se pierde entre las distintas llamadas
 Static nCONTADOR As Long, nANTERIOR As String
     If IsNull(nDato) Then 'si nDato es nulo: Iniciamos valor
         nCONTADOR = 0
         nANTERIOR = ""
         Exit Function
     End If
     '- si nDato es igual al valor memorizado sumamos 1 al contador
     If nDato = nANTERIOR Then
         nCONTADOR = nCONTADOR + 1
       Else '- iniciamos valor y memorizamos el anterior
         nCONTADOR = 1
         nANTERIOR = nDato
     End If
     RT_NumerarParcialSQL = nCONTADOR
End Function

Observe como la función utiliza variables estáticas. Esta es una forma utilizando la cuadrícula de Access, pero también se puede hacer mediante solo SQL. Si quiere el ejemplo lo puede solicitar a [email protected] 

Respuesta
2

Lo puedes hacer mucho más sencillo, sin necesidad de escribir la Enciclopedia Británica

Si tengo la tabla Corredores, donde le pongo unos puestos aleatorios

Y en un formulario basado en esa tabla

Cuando pulso el botón

Y el código del botón es simplemente

Private Sub Comando9_Click()
DoCmd.RunSQL "update corredores set posclasif=null"
Me.Requery
Dim i As Byte
Me.RecordSource = "select * from Corredores order by IdCircuito,totalpuntos desc"
DoCmd.GoToRecord , , acFirst
For i = 1 To Me.Recordset.RecordCount
PosClasif = Nz(DMax("nz([posclasif])", "Corredores", "IdCircuito=" & Me.IdCircuito & "")) + 1
DoCmd.GoToRecord , , acNext
Next
End Sub

De todas formas, si yo fuera Alexander me quejaría por discriminación, ya que Ana tiene los mismos puntos que yo y a ella la pones segunda y a mí tercero.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas