Generar número automático en access

Y estoy manejándolo para afrontar un registro de libros antiguos. La cuestión es que sigo la catalogación del fondo, que es secuencial, y quiero generar automáticamente esa secuencia de números, que es mi Campo ID, y no tener que introducirlos uno a uno.

Es como sigue: AH 53 XXXXX, siendo X los números desde 00001 en adelante.

¿Alguien podría echarme un cable?

2 Respuestas

Respuesta
1

Consultas:

¿Tu campo ID es numérico o de texto?

¿Cómo se llama la tabla que usas?

Hola, polored;

Es de texto, la tabla se llama "Table1"

Ya...

Crea un módulo en tu base de datos y pega esto:

Option Compare Database
Public txtSQL As String
Public MiRecordset As Recordset
Sub Genera_Libro()
    txtSQL = "SELECT Table1.Id " _
           & "FROM Table1;"
    Set MiRecordset = CurrentDb.OpenRecordset(txtSQL)
    With MiRecordset
        .AddNew
        !Id = correlativo_Id_Libro
        .Update
        .Close
    End With
End Sub
Function correlativo_Id_Libro()
    Dim Maximo As String
    'Máximo de Id:
    '=============
    Maximo = "SELECT Max(val(right(Table1.Id,6))) AS [MAX] " _
           & "FROM Table1;"
    correlativo_Id_Libro = "AH 53 " & Format(MaxCORR(Maximo), "000000")
End Function
Function MaxCORR(Maximo As String)
    Dim CONS As Recordset
    '========================================
    'CALCULA CORRELATIVO:
    '========================================
    Set CONS = CurrentDb.OpenRecordset(Maximo)
    If Not (IsNumeric(CONS!Max)) Then
        MaxCORR = 1
    Else: MaxCORR = CONS!Max + 1
    End If
    Set CONS = Nothing
End Function

El "Sub Genera_Libro()" es el que guarda el nuevo correlativo. Lo que está dentro de este sub lo puedes poner en tu formulario (por ejemplo en el evento "al hacer clic" de un botón.

Lo que se está haciendo es:

Revisar la tabla "Table 1".

Ir al campo texto "Id".

Extraer el número que está registrado en los últimos 6 digitos.

Sumarle 1 al número anterior.

Agregarle "AH 53 " al principio y darle el formato con 6 ceros al correlativo.

Guardar este nuevo valor en la tabla "Table 1".

Ve como te funciona. Si lo queres mándame tu correo y te envío un archivo para que veas esto funcionando en ejecución.

Ja! Recién vi que tienen que ser solo 5 ceros... quítale entonces un cero a la función format: Format(MaxCORR(Maximo), "00000")

PoloRed

Respuesta
1

Una alternativa más sencilla, es que le generes este código, por ejemplo, en el evento "Después de actualizar" del primer campo que rellenes sin que sea el ID:

Private Sub....AfterUpdate()
Dim vNum As Variant, vUltimo As Variant
Const miSerie As String * 6="AH 53 "
vNum = Me.ID
If Not IsNull(vNum) Then Exit Sub
vUltimo = DMax("[ID]", "Table1")
If IsNull(vUltimo) Then
vUltimo = 0
Else
vUltimo=CLng(Right(vUltimo,5))
End If
vUltimo = vUltimo + 1
Me.ID = miSerie & Format(vUltimo,"00000")
End Sub

Otra opción sería que pusieras ese código en el evento "Al activar registro" del formulario, pero a mí personalmente me gusta menos esta opción, porque al ir a un registro nuevo, ya se te crea (y almacena) el id, con lo que se te pueden crear registros sólo con el ID, por ejemplo si cierras el formulario sin añadir el resto de datos.

Otra opción más, si tienes un botón para añadir nuevos libros, sería que lo pusieras en el código del botón.

Te dejo un mini-ejemplo para que lo veas en acción.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas