¿Cómo interceptar el error de registros duplicados para poner yo mi mensaje?

Al ocupar el comando ACNEW para dar de alta registros, ¿cómo intercepto el error de registros duplicados para poner yo mi mensaje y evitar que el usuario vea el mensaje de error de access?

1 respuesta

Respuesta
1
Tras presentar el mensaje la ayuda de access xp nos dice esto
Los cambios solicitados en la tabla no se realizaron correctamente porque crearían valores duplicados en el índice, clave principal o relación. (Error 3022)
... y así sucesivamente
Etc.
Es por ello que habrá que agregar una rutina de control de errores (on error goto xxx)
En la rutina (xxx) habrá que incluir la prueba del error 3022 y si es este poner nuestro mensaje
xxx:
if err=3022 then
msgbox "La clave ya existe"
resume yyy
end if
También se puede programar en el evento form_error
El form_error queda parecido
Private Sub Form_Error(DataErr As Integer, Response As Integer)
If DataErr = 3022 Then
MsgBox "La clave ya existe"
Response = acDataErrContinue
End If
End Sub
Como ves ambas soluciones son parecidas, elige la que más te guste, la primera parece más adecuada para el caso de que hayas creado un botón para dar las altas...
Hola, muchas gracias por tu apoyo.
Te mando copia de mi código porque no estoy pudiendo interceptar el error de access cuando quiero agregar un registro duplicado.
Microsoft access error number 2105: No se puede ir al registro especificado.
Option Compare Database
Dim bdcursos As Database
Dim cursosformados As Recordset
Function copyselected(ctl As Control) As Integer
On Error GoTo Err_copyselected
Dim ctrlcursos As Control
Dim entcurrentrow As Integer
Set ctrlcursos = Controls!ctrlcursos
Set ctrlIdprograma = Controls!IdPrograma
For entcurrentrow = 0 To ctrlcursos.ListCount - 1
If ctrlcursos.Selected(entcurrentrow) Then
IdPrograma.Value = [Forms]![Nombre de programas]![IdPrograma]
IdCurso.Value = ctrlcursos.Column(0, entcurrentrow)
DoCmd.GoToRecord , , acNewRec
End If
Next entcurrentrow
asignados.Requery
MsgBox "Asignación Realizada"
Exit_copyselected:
Exit Function
Err_copyselected:
If Err = 2105 Or 3022 Then
MsgBox "Elemento ya asignado anteriormente"
Resume Exit_copyselected
End If
End Function
Gracias te envío mi mail: [email protected]
Esto es una pregunta cualitativamente diferente, por lo que te pido que valores y cierres la anterior.
---
En cualquier caso te adelanto:
El seguimiento del código que me envías ahora requiere un esfuerzo extraordinario por mi parte, que te facturaría entre 1 y 2 h de trabajo, a 20 euros / hora.
Lo ideal para poder garantizar resultados, sería que me mandases una copia de tu base de datos con el mínimo de objetos necesarios (tablas, consultas formulario etc que intervenfan en el código donde deseamos reproducir el error, en las tablas basta un par de registros de prueba, todo compactado y comprimido en formato zip a :
[email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas