Rellenar Campo con valor Aleatorio No Repetido

Tengo una tabla simple que unicamente dispone de los campos nombre, apellidos, edad y código. El campo código está vacío.
Necesitaría saber como puedo rellenar automáticamente el campo código (numérico) con cifras del 1 al 9400 (ya que existen 9400 registros) de forma aleatoria, y que estas cifras no se repitan.

1 Respuesta

Respuesta
1
Entiendo que quieres crear un proceso único para rellenar toda la tabla. Por si acaso siempre haz una copia de seguridad de la base de datos, o haz las pruebas en un archivo por separado. Primero crea una tabla nueva por ejemplo tabla2. En esta tabla pones un campo por ejemplo codigox cierras la tabla. En cualquier formulario pones un botón para lanzar código pondremos lo siguiente en ese botón:
Dim contador As Integer
Dim db As Database
Dim rs As DAO.Recordset
Dim rs2 As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("select * from tabla2")
Randomize
contador = 0
Do
contador = contador + 1
rs.AddNew
rs("codigox") = Int((9400 * Rnd) + 1)
rs.Update
Loop Until contador = 9400
rs.MoveFirst
Set rs2 = db.OpenRecordset("select * from tabla1")
Do
rs2.Edit
rs2("codigo") = rs("codigox")
rs2.Update
rs2.MoveNext
rs.MoveNext
Loop Until rs2.EOF
MsgBox "hecho"
Cuando acabe ya puedes borrar el código del botón, y la tabla2 temporal que hemos creado.
Gracias!
Funciona perfectamente!
Saludos.
Disculpame no hagas caso de la respuesta anterior porque sí te pondrá repetidos. Olvida lo de la tabla auxiliar nueva, te pongo un código que puedes poner en cualquier botón, haz las pruebas sobre una copia o haz copia de seguridad primero.
Tardará un poco porque buscará que no esté repetido,
Dim db As Database
Dim rs As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim mivalor As Integer
Set db = CurrentDb
Set rs = db.OpenRecordset("select * from tabla1")
Randomize
Do
Do
libre = 0
mivalor = Int((9400 * Rnd) + 1)
Set rs2 = db.OpenRecordset("select codigo from tabla1 where codigo = " & mivalor)
If rs2.EOF And rs2.BOF Then libre = 1
Loop Until libre = 1
rs.Edit
rs("codigo") = mivalor
rs.Update
rs.MoveNext
Loop Until rs.EOF
MsgBox "hecho"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas