¿Puedo crear un campo en una tabla de la base de datos access que funcione como autonumérico?

Quisiera saber si es posible tener un campo que funcione como autonumérico, pero sin serlo.
Me explico: en una tabla, el primer campo es un Identificador (de tipo numérico), y quiero que a cada registro nuevo le asigne automáticamente uno más que el anterior, de la misma forma que que se genera en el tipo autonumérico, pero sin usar ese tipo.

1 Respuesta

Respuesta
1
No hay problema en conseguir lo que comentas. Te lo explico a través de un ejemplo.
1. Creamos una tabla (yo la he llamado "Datos") y creamos un campo (que llamaré "Registro") de tipo "número". Añades todos los campos que necesites.
2. Creamos un formulario basado en la tabla "Datos"
3. Sacamos las propiedades de ese formulario y en el evento "Al Activar registro" le ponemos el siguiente código:
---
Private Sub Form_Current()
    Dim numReg As Variant
    numReg = DMax("[Registro]", "Datos")
    If IsNull(numReg) Then
        numReg = 1
    Else
        numReg = numReg + 1
    End If
    Me.Registro.Value = numReg
End Sub
...
Ahora, cada vez que añadas un registro, te irá incrementando una unidad el campo "Registro", pero ya no es autonumérico, como pedías.
Ya me dirás cosas si te surge algún problema.
No cierres aún la consulta. Compruebo una cosa y te digo cosas
OK. Te explico:
El código que te había pasado funciona siempre que estés añadiendo registros, pero si te paseas por los registros (registro anterior o siguiente) cada vez te volverá a cambiar el número de registro.
Para evitar eso podemos hacer lo siguiente:
1.- Cuando creamos el campo "Registro" (al crear la tabla) le ponemos que su valor predeterminado sea 0 (cero)
2.- Ponemos el siguiente código al evento de formulario "Al activar registro":
---
Private Sub Form_Current()
    Dim numReg, existe As Variant
    existe = Me.Registro.Value
        'Si el valor encontrado es cero ejecuta el procedimiento.
        'En caso contrario sale del mismo
    If existe = 0 Then
        numReg = DMax("[Registro]", "Datos")
            'Este If es para detectar si es el primer registro
            'que se introduce
        If IsNull(numReg) Then
            numReg = 1
            Me.Registro.Value = numReg
        Else
            numReg = numReg + 1
            Me.Registro.Value = numReg
        End If
    Else
        Exit Sub
    End If
End Sub
---
Para evitar errores del usuario a la hora de introducir los datos también sería aconsejable, en el formulario en vista diseño, sacar las propiedades del campo "Registro" y en la pestaña "Datos" establecer la propiedad Bloqueado en "Sí", e incluso quitarle el punto de tabulación (Pestaña "Otras"->Punto de tabulación: NO). Así nos evitamos borrados accidentales del número asignado.
Ahora debería funcionarte. Si tienes algún problema me dices cosas.
Suerte!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas