Cómo cambiar el orden o posición de un registro concreto que se muestra en vista hoja de datos en un subformulario

Tengo en un subformulario una tabla en vista hoja de datos tal y como se muestra en el siguiente pantallazo:

En este tabla tengo un campo llamado [prioridad] que me indica el orden de prioridad que tiene un alumno concreto para ser atendido.

Lo que quiero hacer (y no doy con la tecla) lo explico con un ejemplo: imaginemos que el alumno que tiene la prioridad 17 quiero que pase a la la posición 16. Tendría que posicionar el cursor en ese registro y pulsar el botón verde de arriba para que fuera subiendo en la posición de la tabla. De esta forma, según va subiendo, el número que está en el campo [prioridad] pasaría a 16, 15... Y así sucesivamente cada vez que pulse el botón.

Lo mismo tendría que ocurrir con el botón de abajo verde de abajo solo que, en este caso pasaría del número de prioridad 17, al número 18, 19, 20... Y así sucesivamente cada vez que pulsase ese botón.

Respuesta
3

Se puede hacer de una forma más sencilla. Supongamos que tengo el formulario con el subformulario, llamado Copia. Fíjate en el número 8

Ahora selecciono ese registro

Pulso el botón y

Si vuelvo a seleccionar el registro y vuelvo a pulsar el botón

El código del botón es simplemente

Private Sub Comando1_Click()
Dim d As Integer
d = Forms!Formulario1!Copia!Prioridad
DoCmd.RunSQL "update copia set prioridad=1000 where prioridad=" & d & "-1"
DoCmd.RunSQL "update copia set prioridad=" & d & "-1 where prioridad=" & d & ""
DoCmd.RunSQL "update copia set prioridad=" & d & " where prioridad=1000"
Me.Copia.Form.RecordSource = "select * from copia order by prioridad"
End Sub

Me explico, cuando pulso el botón crea la variable d, que es igual al valor de prioridad del registro seleccionado.

Después le asigna al valor de Prioridad del registro anterior un valor exagerado, en este caso 1000.

Luego, al registro interesado le cambia el valor de prioridad, por el valor que tenia antes(d) menos 1

Le vuelve a dar a Prioridad del registro anterior el valor que le corresponde

Por ultimo, "reordena" los registros

Te dejo como práctica hacerlo "para abajo", que es más o menos lo mismo

Si ves que tienes pegas, lo dices y te pongo el código.

1 respuesta más de otro experto

Respuesta
2

Te he preparado un ejemplo que hace lo que pides y "algo más":

http://www.filebig.net/files/HGYYKjk8tE 

El ejemplo parte de dos premisas:

1º/ Que el campo "Prioridad" no sea autonumérico

2º/ Que estén ordenados secuencialmente y sin saltos entre números (no como en la captura)

De todas formas, con unas ligeras modificaciones en el código, se podría adaptar a la circunstancia de que haya "huecos" en las prioridades, aunque yo entiendo que no debería haberlos.

Un saludo.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas