Autonumérico manual

Siguiendo vuestro consejo dentro de está página, he realizado un campo de autonumérico manual con la siguiente instrucción:
    If Me.NewRecord Then
        Me.Registre = Nz(DMax("Registre", "[Dades personals]")) + 1
    End If
En antes de insertar, para que cuando borre el último registro no me pase como con el autonumérico, que me añade uno. Pero cuando borro cualquier otro registro que no es el último (p.e. El 27 de 57), no me los actualiza, es decir el 28 pasa a ser el 27, el 29 pasa a ser el 28, etc. Etc.
¿Hay alguna forma de que los registros superiores al borrado corrijan su posición?

1 Respuesta

Respuesta
1
De una forma sencilla... no.
Jugando con recordsets, contadores y teniendo en cuenta posibles relaciones con otras tablas... algo se podría hacer.
Xavi
http://www.llodax.com
http://www.mvp-access.com
http://www.aesoft-databases.com
¿Qué necesitas saber para ayudarme?
Gracias
Guille
¿Yo? Nada. Eres tu el que debe saber como utilizar recodsets, un contador (mediante variables) y si tienes o no relaciones entre esa tabla que quieres reordenar y otras tablas.
Se utilizar un recordset, un contandor y tengo relaciones entre la tabla principal y el resto de tablas.
Y ahora, ¿qué instrucciones y que pasos he de seguir?
Gracias
Abrir el recordset sobre la tabla ordenado por numero.
Recorrerlo y, paralelamente, tener un contador. Si el numero del registro coincide con el contador no se hace nada.
Si no coincide, actualizas el numero de la tabla al del contador y, a continuación, buscas el numero antiguo en cualquier otra tabla para poner el nuevo.
Así de simple.
Perdona Xavi, pero no logro entenderte.
El paso de actualizar el numero de la tabla al del contador, en caso de que no coincida, sería un paso manual, es decir, ¿yo ponerlo en el contador? ¿Y los siguientes a ese?
Ejemplo:
Tengo 40 registros, borro el 23, el contador es el 23 y el registro tiene el 24. ¿Le pongo al registro manualmente el 23? ¿Y el resto hasta el 40?
Si quieres automatizarlo, puedes utilizar una función que debes lanzar en cada eliminación de un registro de la tabla que estas controlando. Obviamente, ese control sobre la eliminación solo lo puedes realizar en un formulario: ni las tablas ni las consultas tienen eventos.
Dim rst As DAO.Recordset
Dim i As Integer, j As Integer
Set rst = CurrentDb.OpenRecordset("SELECT Numero FROM Tabla ORDER BY Numero")
i = 1
While Not rst.EOF
  If rst!Numero <> i Then
    j = rst!Numero ' aqui guardamos el valor 'antiguo' para poder hacer las consultas despues
    rst.Edit
    rst!Numero = i
    rst.Update
  End If
  ' Ahora deberías ejecutar las consultas de actualización necesarias para las tablas vinculadas por el campo Numero
  CurrentDb.Execute "UPDATE otratabla SET Numero = " & i & " WHERE Numero = " & j & ";", dbFailOnError
  rst.MoveNext
  i = i + 1
Wend
Rst. Close
Set rst = Nothing
Escrito del tirón

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas