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 -----------------
               (
geocities.com/es/ensolva/Descargas)                   (
geocities.com/es/ensolva)                   (
geocities.com/es)