Descubre Cómo Funcionan los Campos Autonuméricos en Access y Mantén la Integridad de tus Datos con Opciones de Reinicio Efectivaspost-template-default single single-post postid-46 single-format-standard et_pb_button_helper_class et_fixed_nav et_show_nav et_secondary_nav_enabled et_primary_nav_dropdown_animation_fade et_secondary_nav_dropdown_animation_fade et_header_style_left et_pb_footer_columns4 et_cover_background et_pb_gutter et_pb_gutters3 et_right_sidebar et_divi_theme et-db
771 715 4434

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. 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.

¿Qué son los Campos Autonuméricos en Access?

Una cosa propia de lo que es el "Access" es crear los campos autonuméricos. O sea por ejemplo, vamos al número de campo y le vamos a decir... ...un campo que sea código de... ...empleado.

¿Qué es lo que conseguimos con estos campos autonuméricos? Que los vaya numerando automáticamente le va a ir poniendo un número a cada uno de ellos. ¿Para qué? Muy sencillo, para tener un número inequívoco de cada uno, de cada registro, esto pues es muy útil para lograr hacer relaciones.

Por ejemplo, siguiendo un poquito un ejemplo que teníamos de una tabla de empleados, pues a cada empleado de nuestra empresa le queremos asignar un número de empleado, pues, a cada uno, según nos han ido introduciendo.

Podemos decir que sea el tamaño del campo entero largo, nuevos valores que sean incrementales, o sea que vaya 1,2,3,4 tal... ...porque en la otra opción de aleatorio es simplemente para hacer replicas y eso que no nos interesa. Ahora es que va a ir incrementando, le podemos dar el formato que queramos.

Lea también: El campo de aplicación de la auditoría

Aquí, más que ponerle los formatos, típicos que vienen aquí, ¿para qué se utiliza esto de formato? Muy sencillo, vamos a imaginarnos que tenemos una empresa que tiene... ...miles de empleados, dos decenas de miles, claro, me da muy feo que sea el 1, el 2, ¿qué le he podido poner? Que siempre tengan cinco dígitos ¿cómo le puedo poner eso? En el formato le puedo poner cinco ceros, con lo cual será "0001", "00 tal", así para rellenar siempre todos los dígitos que tiene. Y por el resto de las propiedades, nada de especial, si yo esto... ...lo guardo y me cambio de vista, vemos cómo tenemos el "0001", el "0002", el "0003".

Siempre que queramos crear ese tipo de códigos, es un campo autonumérico, que como veis no tiene asignada de especial en las propiedades y lo único es si queremos personalizar un poco el formato para que sea más homogéneo lo que son los datos, pero ojo, es un formato de número, seguiría siendo "1,2,3" y por supuesto para todos los efectos, lo que genera es un campo numérico, o sea, después si quisiéramos hacer comparaciones o filtros, lo que fuera para todos los efectos es un campo numérico, ¿de acuerdo?

Comportamiento y Restricciones de los Campos Autonuméricos

Quiero que os fijéis el nombre en un par de cosas. Lo primero, he puesto espacios, sí, a un campo se le pueden poner espacios lo que pasa es que según para después, para lo que vayas a utilizar la base de datos, más o menos espacios a lo mejor nos pueden dar más problemas a la hora de programar, o a la hora de trabajar con "SQL", si es solamente para un trabajo normal la verdad que nos da igual. De todos modos lo que no he hecho, ha sido ponerle acentos a los campos, ¿los admite? Sí, los admite, pero mejor, mejor no ponerlos. En este caso yo no le pongo nunca, acentos en los nombres de los campos. ¿De acuerdo? Entonces no le he puesto el acento en "codigo".

Por supuesto, aquí en estos campos no se puede escribir, o sea me dice que nada hay, si lo vemos en la barra de estado aquí nos dicen que no se pueden modificar estos controles o sea no se puede modificar un campo autonumérico ya que es el propio "Access" el que lo crea. Por otro lado, tampoco tiene ningún sentido, pero realmente no me va a dejar es el tener varios campos autonuméricos dentro de una misma tabla.

Eso sí, una cosita que tenemos que tener cuidado, podemos decir con esto. Si yo por ejemplo, aunque borrase el "0003", cuando yo me cree otro registro ya no me vuelvo a crear el "3", me creará el "4", el "3" ese ya se perdería, ¿por qué? Muy sencillo, porque ese "3" podría tener otras tablas relacionadas entonces puedo ir a dar lugar a errores y a equivocaciones. Ya cuando se elimina uno de los valores autonuméricos, ya ese no se recupera, la única manera de recuperarlo sería borrar el campo autonumérico y volverlo a crear para que volviera a numerarlo, pero ya le digo muy peligroso en el momento que haya tablas relacionadas. O sea, no es una cosa que se deba hacer aunque se puede hacer.

Lea también: ¿Sueñas con una casa de campo? Inspírate con este diseño tipo hacienda.

Campos Autonuméricos y la Integridad Referencial

Imagina que tienes una tabla de alumnos relacionada con otra tabla de tutores... a cada alumno le corresponde un tutor... y a cada tutor le puede corresponder mas de un alumno (hermanos por ejemplo)... estamos en una relacion uno a muchos...

  1. Si activaste una "relacion por referencia" entonces la baja no te la permitiria access... el cual te obligaria primero a eliminar a todos los alumnos que hagan referencia a dicho idtutor Ana Berenice, osea los alumnos ana y berenice... esto con la finalidad de salvaguardar la integridad de los datos... como te daras cuenta es una actividad bastante laboriosa pero es la forma correcta de hacerlo... al parecer access tiene una opcion que permite "arrastrar" esta eliminacion de forma automatica para evitar que lo hagamos manualmente y que al borrar al tutor Ana Berenice pues automaticamente nos borre a los alumnos berenice y ana.
  2. Pero si no activas esta "relacion por refencia", entonces no existe una referencia estricta entre el idtutor de la tabla alumnos con la de tutores, por lo que puede considerarse sin ninguna relacion y nosotros asumimos dicha relacion de forma implicita aunque access no lo hara.... por tal motivo no cabe duda que lograras borrar dicho registro tutor de Ana Berenice sin tener que borrar las referencias de la tabla alumnos(ana y berenice) pero como te daras cuenta la tabla alumnos tendra referencias al "aire", por lo que ana y berenice apuntaran a un tutor que ya no existe y que fue borrado... y esto es un mal vicio en las bases de datos por que existen inconsistencias en los datos... si queremos hacer las cosas bien por este metodo debemos observar todas las referencias y eliminarlas manualmente... de tal modo que debo eliminar manualmente tanto a ana como berenice, cosa que vuelve complicado el mantenimiento si no existe una buena documentacion de la base de datos.

Si con estas cosas ya tenemos chamba ahoraaaaa imaginaaa que pueda hacerse lo que quieres.... estarias ante un gravisimo error.... por que si borras el registro de ana Berenice que es el id 3 y metes alguien despues por ejemplo que se llame jose a ocupar el mismo id 3 ... olvidate... ahora los alumnos berenice y ana apuntaran a PEPE... ¡UN ERROR GRAVE!.

Cómo "Reiniciar" un Campo Autonumérico en Access

Como puedo hacer para volver a cero un campo autonúmerico en Access. Por más que borre todos los datos de una base, siempre queda el campo autonúmerico queda en el último número.

Finalmente averigüé como se puede hacer. Se borran todos los datos y luego se va a compactar y reparar. No es necesario borrar el campo autonumérico. Para volver a cero el autoinumérico basta con compactar la base de datos (desde menu-herramientas-compactar/compactar y reparar base de datos), despues de haber eliminado los registros de la tabla. Si no eliminas los registros, la proxima vez que insertes un registro tras compactar el fichero, el número asignado será el inmediatamente superior al mayor preexistente.

Una opción que se me ocurre es eliminando el campo luego de borrar todos los registros, guardar la tabla y luego volver a crearlo, aunque esto es muy peligroso en el momento que haya tablas relacionadas.

Lea también: Auditoría Administrativa: Áreas de Impacto

Reinicio Programático de Autonuméricos

A continuación, se presenta una descripción de los argumentos de una posible función para el reinicio de autonuméricos, basada en el trabajo de Juan M Afán de Ribera:

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.

Desafíos y Problemas Específicos con Autonuméricos

Tengo una tabla con un campo "id" autonumerico incrementalmente e indexado sin duplicados y a la cual le tengo que insertar unos valores que he copiado desde un exell, ningún valor se repite y no son incrementales. Para que el campo id no me de problemas he tenido que modificar los valores del campo en la tabla y cambiar autonumerico por numerico e indexado por NO. El problema viene como ya sabeis al volver a cambiar el valor del campo ID a autonumerico e indexado sin duplicados, access no te deja. No se si habrá alguna forma de hacerlo o algún ejemplo que me sirva, o sencillamente no puede hacerse.

Cuando yo tengo que meter un valor "a pedal" en un campo autonumerico (a veces meto un valor en el registro 0) lo que utilizo es un recordset. De esa forma no tengo que cambiar el tipo de datos del campo. Eso si, obliga a abrir 2 recordsets: uno sobre el Excel de origen y otro sobre la tabla de destino. Como alternativa puedes seguir utilizando un campo numérico estandar (indexado sin duplicados) y simular el autonumérico.

La tabla tiene, como clave primaria, un campo AUTONUMÉRICO. Si me voy a la tabla, y relleno los campos primarios (Codigo + Nombre + Actividad), y guardo el registro, todas las columnas de la tabla me aparecen con el texto ELIMINADO. Lo mismo pasa cuando hago uso del formulario. Cuando cargo el campo CODIGO, relleno los campos NOMBRE y ACTIVIDAD, y uso un Me.Refresh. Después de ello, todos los controles del formulario muestran el texto ELIMINADO. Esto, por supuesto, nunca antes me había pasado. Mi intuición me dice que al refrescar el registro, no se llega a refrescar el campo autonumérico. Finalmente, cabe decir que en algunos casos si que entran los datos. En este caso SI que se guarda el registro bien. Cabe destacar que solo rellenando alguno de esos campos SMALLINT, ya tenga un DEFAULT o no, el registro se guarda bien. Realicé algunas otras pruebas. Algunas llegaban a registrarse. Otras no. Pero aunque intentara esquivar el problema, el hecho de usar un autonumérico como clave primaria, es algo básico. Mientras escribía esta pregunta, acabo de detectar otro problema relacionado con los autonuméricos. Lo que me importa en este caso es afirmar, que hasta el día 14, esto el Access "se lo tragaba". Esto es una prueba más que apoya mi hipótesis de que algo ha cambiado respecto a los autonuméricos. Ojalá sirva de algo para Microsoft.

tags: #campo #autonumérico #que #se #reinicia #anualmente