Crear un campo ID personalizado en una tabla usando VBA

id-vba

Escrito por Administrador

1 de diciembre de 2021

Vamos a ver hoy cómo crear en una tabla un campo ID personalizado usando VBA.

En primer lugar, para quién no lo sepa, un campo ID es aquél que va a identificar un registro de manera unívoca, es decir, no van a existir dos registros con el mismo valor ID.

Y, para entender bien este concepto, he preparado un ejemplo (adjunto al final del post) con una tabla y dos formularios.

El primero de ellos, "Lista de clientes", nos muestra todos los clientes que hemos dado de alta en nuestra base de datos.

bloquear-access-fecha

De esta manera, cada registro se encuentra identificado por un ID, que en este caso es un número cardinal.

Además, he añadido código en el evento "Al hacer clic" del campo "ID" para que al pinchar sobre él, se abra el segundo formulario "Detalles de clientes" en modo edición. Así, podremos editar el registro y modificar el dato que sea necesario.

Private Sub ID_Click()

'Recoge el valor del ID del registro seleccionado del formulario

Dim srtTemp As String

srtTemp = Me.Form.ID.Value

'Abre formulario en modo edicion con la condicion de que el codigo del cliente sea el seleccionado

strSql = "Id =" & srtTemp

DoCmd.OpenForm ("Detalles de clientes"), acNormal, , strSql, acFormEdit, acWindowNormal

End Sub

bloquear-access-fecha

Por el contrario, si pulsamos el botón Nuevo cliente del formulario "Lista de clientes", se abrirá el formulario "Detalles de clientes" en modo añadir registros.

Al mismo tiempo que se abre dicho formulario, el programa va a ir a la tabla "Clientes" a buscar el valor más alto de ID.

Si no hay aún registros en la tabla, establecerá el valor 1. Sin embargo, en caso de existir registros previos, sumará una unidad al valor de ID más alto encontrado.

Private Sub Nuevo_Click()

'Abrimos el formulario "Detalles de clientes" en modo añadir datos

DoCmd.OpenForm "Detalles de clientes", acNormal, , , acFormAdd

'Declaramos el RecordSet

Dim dbs As DAO.Database
Dim rst As DAO.Recordset

Set dbs = CurrentDb()

'Buscamos el último valor de ID en la tabla Clientes

strSql = "SELECT Max(val([ID])) AS cod FROM Clientes"
Set rst = dbs.OpenRecordset(strSql, dbOpenSnapshot)

'Si no hay aun registros en la tabla, le damos el valor 1. En caso contrario, sumamos una unidad al último valor encontrado

If Not rst.EOF Then

Forms![Detalles de clientes].Idnueva = IIf(IsNull(rst!cod), "1", rst!cod + 1)

End If

End Sub

bloquear-access-fecha

Vamos a continuar con el ejemplo. Para ello, rellenamos los campos y pulsamos el botón Guardar.

A continuación, se ejecuta el código que funciona de la siguiente manera.

En primer lugar, comprueba que los campos obligatorios se encuentren rellenos. A continuación, inserta los valores del nuevo registro (cliente) en la tabla y cierra el formulario.

Por último, actualiza y ordena el formulario "Lista de clientes" para que aparezca el último registro introducido.

Private Sub Guardar_Click()

'Comprobamos que los campos Nombre y Apellidos estén rellenos

If IsNull(Form!Nombre) Then

Me.Nombre.BackColor = RGB(241, 241, 14)
DoCmd.OpenForm "Error_Nombre"
GoTo final

End If

If IsNull(Form!Apellidos) Then

Me.Apellidos.BackColor = RGB(241, 241, 14)
DoCmd.OpenForm "Error_Apellidos"
GoTo final

End If

'Insertamos el valor del ID nuevo en la tabla Clientes usando VBA

Dim servicioSQL As String

DoCmd.SetWarnings False

servicioSQL = "INSERT INTO [Clientes] ([ID],[Nombre],[Apellidos],[Fecha Alta]) VALUES ('" & Form!Idnueva & "','" & Form!Nombre & "','" & Form!Apellidos & "','" & Form!FechaAlta & "')"
DoCmd.RunSQL servicioSQL

DoCmd.SetWarnings True

'Cerramos el formulario de introducción de clientes

DoCmd.Close

'Si el listado de clientes está abierto, lo actualizamos

If CurrentProject.AllForms("Lista de clientes").IsLoaded Then

Forms![Lista de clientes].Requery
Forms![Lista de clientes].OrderBy = "ID"
Forms![Lista de clientes].OrderByOn = True

End If

final:

End Sub

bloquear-access-fecha

Espero que te haya sido de utilidad este post y que hayas aprendido a crear en una tabla un campo ID personalizado usando VBA.

Un saludo y hasta la próxima.

Descarga el archivo del ejemplo

Por favor, ayúdame y haz clic en el anuncio. Solo te lleva un segundo 😉

 


0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Quizá te interese,

Contacto