Registros duplicados en Access

Necesito saber de que manera puedo validar la captura de registros duplicados sin esperar a ingresar todos los campos del registro, sino que al momento de capturar el dato envíe mensaje indicando que el dato ya esta ingresado
El tema es que la tabla donde figura el dato no tiene clave principal, modifique un código (lo adapte) para que me funcione.
En un subformulario continuo que depende de uno principal, el usuario carga y cuando sale no funciona el código.
Si abro el subformulario solo sin el principal si funciona. ¿Qué agho mal?
De antemano, muchas gracias
Acá dejo el Codio. La tabla de llama "02_Registro Contribuyentes" y el campo en cuestión "Numero de Certificado".
Dim reg As DAO.Recordset
Set reg = Me.RecordsetClone
reg.FindFirst "[02_Registro Contribuyentes] = (" & [Numero de Certificado].Value & ")"
If Not reg.NoMatch Then
MsgBox "El Código '" & [Numero de Certificado].Value & "' ya existe. " & _
"se localiza en el registro No '" & reg.AbsolutePosition + 1 & "'.", vbExclamation, "Error"
Cancel = True
[Numero de Certificado].SetFocus
[Numero de Certificado].Value = Null
End If
Set reg = Nothing

1 Respuesta

Respuesta
1
Probemos lo siguiente:
Lo primero es asegurarse de que el campo a comprobar esta indexado y es clave principal. Supongamos una base de datos de pacientes que ingresan en un hospital y el objetivo es detectar que no se repita el dato introducido en el campo NumHistoria.
Abrir el formulario en vista Diseño, elegir Ver/Codigo e incluir en el apartado General/Declaraciones (General a la izquierda y Declaraciones a la derecha) el siguiente código:
Dim BaseDatos as DataBase
Dim Pacientes as Recordset
Con ello se define que van a utilizarse dos objetos DAO o de acceso a datos: una base de datos y un recordset y asegurando que serán visibles en todos los procedimientos del formulario.
En el evento Al cargar del formulario incluir estas lineas de codigo:
Set BaseDatos = CurrentDB()
Set Pacientes = BaseDatos.OpenRecordset("PacientesIngresados",dbOpenTable)
La primera linea asigna la base de datos actual a la variable BaseDatos, la segunda asigna a la variable Pacientes los registros existentes en la tabla Pacientes Ingresados de la base de datos BaseDatos, y la abre de tipo tabla, es decir, se va a poder leer de ella por indice, que sera el que se indica con la siguiente instrucción que debe ir a continuación de las dos anteriores:
Pacientes.Index = "PrimaryKey"
En el evento Antes de actualizar de la variable NumHistoria incluir:
Sub NumHistoria_BeforeUpdate (Cancel as integer)
Pacientes.Seek "=", NumHistoria
If Not Pacientes.NoMatch then
Msgbox "Num. de historia ya existente.",48
Cancel = True
Exit Sub
End If
End Sub
La instrucción que contiene Seek (que es un método que solo se puede utilizar con los Recordset abiertos con dbOpenTable), lo que hace es intentar encontrar en la tabla Pacientes alguno con el numero de historia igual a la variable NumHistoria, y va a buscar en números de historia porque al cargar el formulario ya sabe que el indice iba a ser la clave principal, que hemos supuesto que va por Numero de Historia.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas