Validar datos de clave principal

En un formulario de ingreso de datos en Acces 2007 quiero saber como hago para que cuando termine de ingresar el dato en el cuadro o control que me sirve de clave principal genere un aviso en caso de que el dato este repetido y no deba esperar a digitar todos los datos en el formulario y únicamente muestre el aviso cuando se guarda o se da siguiente registro.

2 respuestas

Respuesta
2

Charles: Programa el Evento BeforeUpdate (Antes de Actualizar) del Control que quieras validar

Private Sub ClaveP_BeforeUpdate(Cancel As Integer)
Dim CriterioUno As String
Dim CantReg As Byte
'Compruebo que si esa Clave realmente existe
CriterioUno = "ClaveP = " & Me.ClaveP
CantReg = Nz(DCount("[ClaveP]", "TuTabla", CriterioUno), 0)
If CantReg > 0 Then
        MsgBox "Esta Clave ya existe en la Tabla TuTabla........" & vbCrLf & "Repasa la entrada e intenta de nuevo", vbCritical, "CLAVE EXISTENTE"
        DoCmd.CancelEvent
        Me!ClaveP.Undo
End If
CriterioUno = ""
CantReg = 0
Numero_BeforeUpdate_Salir:
On Error GoTo 0
Exit Sub
Numero_BeforeUpdate_TratamientoErrores:
MsgBox "Error " & Err & " en Procedimiento.: ClaveP_BeforeUpdate de Documento VBA: Form_TuFormulario (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume Numero_BeforeUpdate_Salir
End Sub

Deberás cambiar: ClaveP, TuTabla, etc por los  Nombres que tu tengas. Y además he supuesto que el control que hay en el Formulario, también se llama ClaveP. Mis saludos >> Jacinto

Hay otras formas y ésta es una más. Saludos >> Jacinto

El código:

Private Sub Id_Radicado_BeforeUpdate(Cancel As Integer)
Dim CriterioUno As String
Dim CantReg As Byte
'Compruebo que si esa Clave realmente existe
CriterioUno = "Id_Radicado = " & Me.Id_Radicado
CantReg = Nz(DCount("[Id_Radicado]", "TB_RADICADOS", CriterioUno), 0)
If CantReg > 0 Then
MsgBox "Esta Clave ya existe en la Tabla TuTabla........" & vbCrLf & "Repasa la entrada e intenta de nuevo", vbCritical, "CLAVE EXISTENTE"
DoCmd.CancelEvent
Me!Id_Radicado.Undo
End If
CriterioUno = ""
CantReg = 0
Id_Radicado_BeforeUpdate_Salir:
On Error GoTo 0
Exit Sub
Id_Radicado_BeforeUpdate_TratamientoErrores:
MsgBox "Error " & Err & " en Procedimiento.: Id_Radicado_BeforeUpdate de Documento VBA: Form_FR_RADICADOS (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume Id_Radicado_BeforeUpdate_Salir
End Sub

No hace nada, al cambiar de control no aparece ningún aviso, ¿que podrá faltar? mi tabla se llama TB_Radicados, el campo ID_Radicado con propiedades requerido SI, sin duplicados, y el cuadro de texto se llama Id_Radicado 

Charles: Supongo que además de copiar y modificar el Código, lo has activado en las Propiedades del Control Id_Radicado.

El que tengas el Campo de la Tabla con Requerido en Si y Sin duplicados, no te actúa después de Actualizar, porque ese Dato, no lo tiene aún la Tabla, solo está en el Formulario.

Con todo ésto estoy suponiendo, que para probar, usas un valor que esté repetido.

Si Id_Radicado es un campo de Texto, en principio te debería saltar un error de no coincidencia de tipos, pero por lo que me explicas no lo hace.

Si es que realmente es un Campo de Texto sustituye >>

CriterioUno = "Id_Radicado = " & Me.Id_Radicado por ésto otro

CriterioUno = "Id_Radicado = '" & Me.Id_Radicado & "'"

Ya me contarás. Saludos >> Jacinto

Respuesta
1

Aunque la respuesta de Jacinto es correctísima, si el campo lo tienes en la tabla como "clave principal", hay una forma mucho más sencilla:

Pon en el evento después de actualizar de ese campo clave el código

DoCmd. RunCommand acCmdSaveRecord

Si ya existe, te saltará un error que puedes gestionar con el control de errores, y si no te salta nada, es que está disponible... XD. Por ejemplo

On Error GoTo sol_err
DoCmd. RunCommand acCmdSaveRecord
Salida:
Exit Sub
sol_err:
If Err.Number = 3022 Then
    MsgBox "Clave ya registrada"
    Me.Undo
End If

Saludos a los dos


Gracias, este código lo pongo en las propiedades del cuadro de texto después de actualizar del formulario? o directamente en la tabla?

En el evento "después de actualizar" de tu campo clave, en el formulario, pero has de ponerlo en el editor de VBA, no directamente en las propiedades->eventos...

Aqui tienes un ejemplo: http://filebig.net/files/DKQQNsqEDr 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas