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.
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
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
Vamos a continuar con el ejemplo para crear un campo ID personalizado usando VBA. 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
Espero que te haya sido de utilidad este post y que hayas aprendido a crear en una tabla un campo ID personalizado usando VBA.
Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.
Un saludo y hasta la próxima.
Si te ha servido y quieres donar
Descarga el archivo del ejemplo
Últimas publicaciones
0 comentarios