Os paso un procedimiento para resetear un autonumérico y que vuelva a
numerar a partir de uno, sin tener que compactar la base de datos.
He de decir que comparto totalmente la opinión de Víctor en cuanto a que los
autonuméricos son unos campos que deben usarse para hacer de identificador
de registros y no como campos contadores, para eso es mejor implementar una
rutina tal y como él indica.
Esta es una idea que empezó cuando al Búho se le metió entre ceja y ceja
conocer el valor del siguiente autonumérico y una cosa lleva a la otra...
Para llamar a este procedimiento hay que pasarle como argumentos el nombre
de la tabla, el nombre del campo autonumérico y opcionalmente un objeto
database (lo declaro Object por si las moscas). Si no se le pasa el
argumento referente al objeto database, entonces entenderá que se quiere
hacer en la base de datos actual. Hay una línea de código que se ejecutará
sólo para Access 97, pues el método tiene un pequeño matiz (una vez borrados
los registros hay que numerar a partir de -1) para esta versión que no es
necesaria para las versiones posteriores.
También, y dado que se trata de borrar registros, he puesto las consultas de
acción entre instrucciones "Trans", para, en caso de error, dejar las cosas
como estaban.
Al procedimiento se le puede llamar así:
resetAutonum "MiTabla", "MiAutonum"
o bien, si se quiere hacer en otra base de datos:
Dim db As Object
Set db = DBEngine.OpenDatabase("c:\BaseLejana.mdb")
resetAutonum "MiTabla", "MiAutonum", db
Set db = Nothing
y aquí el código:
'*******************************************
' Función: resetAutonum
'
' Propósito: resetear un campo autonumérico
' y que empiece a contar desde 1, sin tener
' que compactar la base de datos.
'
' Autor: Juan M. Afán de Ribera y Francisco
' García Aguado (Búho)
'
' Enero 2003.
'
' *********** CÓDIGO ***********************
Sub resetAutonum(tblName As String, _
fldAutonum As String, Optional db As Object)
Dim strSQLDel As String
Dim strSQLIns97 As String
Dim strSQLIns As String
strSQLDel = "Delete * From " & tblName
strSQLIns97 = "Insert Into " & tblName & _
"(" & fldAutonum & ") Select -1 As tmp"
strSQLIns = "Insert Into " & tblName & _
"(" & fldAutonum & ") Select 0 As tmp"
If db Is Nothing Then Set db = CurrentDb
On Error GoTo err_Trans
DBEngine.BeginTrans
db.Execute strSQLDel, 128 '128=dbFailOnError
If SysCmd(acSysCmdAccessVer) = "8.0" Then
db.Execute strSQLIns97, 128
End If
db.Execute strSQLIns, 128
db.Execute strSQLDel, 128
DBEngine.CommitTrans
Exit Sub
err_Trans:
MsgBox "Error: " & Err.Number & vbCrLf _
& Err.Description
DBEngine.Rollback
End Sub
' ************ FIN CÓDIGO **************************
               (
geocities.com/es/ensolva/Descargas)                   (
geocities.com/es/ensolva)                   (
geocities.com/es)