ResetNumber: reinicializar por código un campo autonumérico
Pregunta
¿Cómo puedo reinicializar por código un campo autonumérico?
Respuesta
La función ResetNumber reinicializa un campo autonumérico, con opción a empezar a numerar en un número e intervalo concretos, tanto si el campo reside en una tabla de la base de datos actual como si reside en una tabla de otra base de datos.
Debo puntualizar que el propósito de los campos autonuméricos es para diferenciar de manera única a cada uno de los registros de una tabla. Para ello, el campo autonumérico debería tener la casilla “Indexado” con el valor “Sí(Sin duplicados)”.
Muchas veces los usuarios piensan que, tal vez por su nombre (Autonumérico), estos campos tienen como finalidad hacer las veces de campo contador. Pero aunque pueda parecer lo contrario, ese no es su cometido y el hecho de usarlos de esa manera traerá bastantes dolores de cabeza a quien lo intente. Si se quiere un campo contador, podeis buscar a pie de página, en la sección “Temas relacionados” para encontrar alternativas a los campos autonuméricos.
Argumentos
Argumento | Descripción |
---|---|
TableName | Requerido. Nombre de la tabla que contiene el campo autonumérico |
FieldName | Requerido. Nombre del campo autonumérico |
FirstNum | Opcional. Número por el que empezará a contar el autonumérico después de ser reinicializado |
Interval | Opcional. Intervalo entre los números generados por el autonumérico |
DBPath | Opcional. Ruta y nombre de la base de datos donde reside el campo autonumérico. Si se omite este argumento o está vacío (“”), la función buscará en la base de datos actual |
Ejemplo de uso
Dim ret As Long
ret = ResetNumber("MiTabla", "Id", 1000, 1, "C:\MiBd.mdb")
If ret = -1 Then
MsgBox "El campo se reinicializó con éxito"
Else
MsgBox "Se ha producido el error: " & ret
End If
Código
'---------------------------------------------------------
'
' ResetNumber
'
' Código escrito originalmente por Juan M Afán de Ribera.
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
' En el caso de querer publicarlo en una página Web,
' por favor, contactar con el autor en
'
' accessvbafaq@ya.com
'
' Este código se brinda por cortesía de
' Juan M. Afán de Ribera
'
Function ResetNumber( _
TableName As String, _
FieldName As String, _
Optional FirstNum As Long = 1, _
Optional Interval As Long = 1, _
Optional DBPath As String) As Long
Dim db As Object 'DAO.Database
Dim SQL As String
SQL = "ALTER TABLE " & TableName _
& " ALTER COLUMN " & FieldName _
& " COUNTER(" & FirstNum & ", " & Interval & ")"
On Error GoTo err_ResetNumber
If DBPath = "" Then
Set db = CurrentDb
Else
Set db = DBEngine.OpenDatabase(DBPath)
End If
db.Execute SQL
ResetNumber = -1
exit_Function:
If Not db Is Nothing Then db.Close
Set db = Nothing
Exit Function
err_ResetNumber:
ResetNumber = Err.Number
Resume exit_Function
End Function
'---------------------------------------------------------
Créditos
con el fin de dar a conocer el trabajo de uno de los más grandes en el mundo de Access en español, y tras solicitar su permiso, replico este artículo de Juan M Afán de Ribera. Todos los derechos y autoría corresponden a él. Access & VBA FAQ – ResetNumber (archive.org)
Pregunta Sé cómo imprimir un informe mediante código y sé cómo hacer para que aparezca el cuadro de diálogo imprimir,…
Cómo conseguir en un informe calcular sólo el total para cada página