REINICIAR UN CAMPO AUTONUMÉRICO POR CÓDIGO SIN COMPACTAR LA BASE DE DATOS.

Antes que nada, he de decir que no nos debería importar el valor que
tiene un campo autonumérico, pues este tipo de campos se debería utilizar
sólo para poder diferenciar registros en una tabla, y no como campos 
contadores. Para campos contadores deberíamos implementar nuestras 
propias rutinas.

Normalmente, y si no queremos complicarnos la vida, el proceso más 
simple para reiniciar un autonumérico otra vez al número 1 es borrando 
todos los registros de la tabla y después compactando la base de datos.

Si queremos complicarnos la vida y queremos hacerlo por código, sin 
tener que compactar la base de datos, conozco de momento 2 formas 
diferentes de hacerlo (para  Access 97 hay una pequeña particularidad 
y sólo aceptará la primera que expondré).

La primera función lo que hace es: (Access 97, 2000 y 2002)

   1.Ejecutar una sentencia SQL para borrar los registros de la 
     tabla escogida 
   2.Otra sentencia SQL que inserta el valor -1, primero y 0 después
     si es Access 97, y 0 solamente si es Access 2000 o superior
   3.Por último una sentencia SQL que borra de nuevo los registros.

De esta manera, el siguiente autonumérico será otra vez el número uno.

La segunda función (Access 2000 y 2002 solamente) utiliza DDL para 
nuestros propósitos

   1.Ejecuta una sentencia SQL para borrar los registros de la tabla 
     escogida
   2.Redefine, mediante DDL, el campo autonumérico, poniendo sus 
     valores a 1 el primer valor y a 1 el intervalo entre registros 
     (esto es opcional)

Esta sentencia DDL vendría a ser:
	
	ALTER TABLE MiTabla ALTER COLUMN Autonumerico COUNTER(1,1)

Los argumentos de ambas funciones son

NomTabla: Nombre de la tabla donde está el autonumérico
NomCampo: Nombre del campo autonumérico
Db: (Opcional) Nombre de la base de datos donde se encuentra el 
autonumérico (hay que tener en cuenta que la sentencia DDL generará 
un error si se intenta ejecutar sobre una tabla vinculada, ya que no
se puede modificar el diseño de una tabla vinculada).

'----------------------------------------------
'
' 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.
'
' Versiones: Access 97, 2000 y 2002
'
' Autor: Juan M. Afán de Ribera y Francisco
'        García Aguado (Búho)
'
' Enero 2003.
'
'----------------- CÓDIGO ----------------------
Function resetAutonum(nomTabla As String, _
   nomCampo As String, _
   Optional db) As Boolean

Dim cadSQLDel As String
Dim cadSQLIns97 As String
Dim cadSQLIns As String

   cadSQLDel = "Delete * From " & nomTabla
   cadSQLIns97 = "Insert Into " & nomTabla & _
   "(" & nomCampo & ") Select -1 As tmp"
   cadSQLIns = "Insert Into " & nomTabla & _
   "(" & nomCampo & ") Select 0 As tmp"
   
   If IsMissing(db) Then
      Set db = CurrentDb
   Else
      Set db = DBEngine.OpenDatabase(db)
   End If
   
   On Error GoTo err_Trans
   DBEngine.BeginTrans
      db.Execute cadSQLDel, 128
      ' Para Access 97 solamente
      If SysCmd(acSysCmdAccessVer) = "8.0" Then
         db.Execute cadSQLIns97, 128
      End If
      db.Execute cadSQLIns, 128
      db.Execute cadSQLDel, 128
   DBEngine.CommitTrans
   
   resetAutonum = True
   Exit Function
   
err_Trans:
   MsgBox "Error: " & Err.Number & vbCrLf _
   & Err.Description
   DBEngine.Rollback
   resetAutonum = False
   
End Function


'----------------------------------------------
'
' Función resetAutonumDDL
'
' Propósito: resetear un campo autonumérico
' y que empiece a contar desde 1, sin tener
' que compactar la base de datos.
'
' Versiones: Access 2000 y 2002
'
' Autor: Juan M. Afán de Ribera
'
' Febrero 2003.
'
'----------------- CÓDIGO ----------------------
Function resetAutonumDDL(nomTabla As String, _
   nomCampo As String, _
   Optional db) As Boolean

   Dim cadSQL As String
   
   On Error GoTo err_Trans
   If IsMissing(db) Then
      Set db = CurrentDb
   Else
      Set db = DBEngine.OpenDatabase(db)
   End If
      
   DBEngine.BeginTrans
      cadSQL = "DELETE * FROM " & nomTabla
      db.Execute cadSQL
      cadSQL = "ALTER TABLE " & nomTabla _
      & " ALTER COLUMN " & nomCampo & " COUNTER(1,1)"
      db.Execute cadSQL
   DBEngine.CommitTrans
   
   resetAutonumDDL = True
   Set db = Nothing
      
   Exit Function
      
err_Trans:
   MsgBox "Error: " & Err.Number & vbCrLf _
   & Err.Description
   DBEngine.Rollback
   resetAutonumDDL = False
   Set db = Nothing
   
End Function
'----------------- FIN CÓDIGO -----------------


    Source: geocities.com/es/ensolva/Descargas/Documentos

               ( geocities.com/es/ensolva/Descargas)                   ( geocities.com/es/ensolva)                   ( geocities.com/es)