Grabar registros sin duplicar por 3 campos

Tengo una tabla INSCRIPTOS que se carga por medio de un formulario y quiero que no se permita cargar registros duplicados por la combinación de 3 campos, teniendo en cuenta que si se puede repetir cada campo en forma individual por lo que no me sirvió ponerle Si (sin duplicados) en cada campo por mas que a los 3 campos los definí como claves.

Gacias!

1 respuesta

Respuesta
1

Como no sé ni los nombres ni los valores de tus campos, te pongo cómo sería el código "en general", y tu deberás cambiar por los nombres de tu tabla lo que está en negrita y por los nombres de los cuadros de texto de tu formulario lo que está subrayado.

Supuse que campo1 es tipo texto, campo2 es Fecha/Hora y campo3 número entero

Private Sub Campo1_AfterUpdate()
'Declaramos las variables
Dim valor1 As String
Dim valor2 As Date
Dim valor3 As Integer
Dim rst As Recordset
'Definimos la estructura de la consulta de datos agrupados de los 3 campos
Const miSQL As String = "SELECT INSCRIPTOS.[Campo1], INSCRIPTOS.[Campo2], INSCRIPTOS.[Campo3] " _
& "FROM INSCRIPTOS GROUP BY INSCRIPTOS.[Campo1], INSCRIPTOS.[Campo2], INSCRIPTOS.[Campo3]"
'Si alguno de los 2 campos están vacíos no hacemos nada
If IsNull(Me.Campo1) Or IsNull(Me.Campo2) Or IsNull(Me.Campo3) Then Exit Sub
'Asignamos los valores
valor1 = Me.Campo1.Value
valor2 = Me.Campo2.Value
valor3 = Me.Campo3.Value
'Creamos el recordset sobre la consulta de datos agrupados
Set rst = CurrentDb.OpenRecordset(miSQL, dbOpenDynaset)
'Si no hay registros, salimos
If rst.RecordCount = 0 Then Exit Sub
'Recorremos los registros, comparando los 3 valores
rst.MoveFirst
Do Until rst.EOF
If rst("Campo1").Value = valor1 And rst("Campo2").Value = valor2 And rst("Campo3").Value = valor3 Then
MsgBox "Si continuas se creará un registro repetido", vbCritical, "AVISO"
Exit Do
End If
Loop
End Sub
Private Sub Campo2_AfterUpdate()
Call Campo1_AfterUpdate
End Sub
Private Sub Campo3_AfterUpdate()
Call Campo1_AfterUpdate
End Sub

Las dos líneas que están en cursiva son donde tienes que poner el mensaje y/o acciones que quieres tomar:

Si quieres borrar los valores introducidos, usa Me.Nombredelcampo.Value="" y sitúa el foco en uno de ellos, com Me.Nombredelcampo.SetFocus

Cualquier cosa me comentas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas