¿Como solucionar error : No se puede ir al registro especificado? Formulario

Ya he visto varias veces este error y es muy común pero no encuentro una solución que considere la adecuada.

Tengo un formulario que registra los datos del personal en la tabla, al tratar de guardar el registro para agregar uno nuevo, si no se completan todos los campos del formulario arroja el error: No se puede ir al registro especificado, esto porque algún campo quedo sin llenar.

Quisiera poder guardar el registro aún cuando no tuviese algúno de los datos sin que me arroje dicho error.

El botón de agregar registro del formulario tiene el siguiente código: Por si se requiere.

Function AgregaRegistro()
On Error GoTo Err_AgregaRegistro
DoCmd.GoToRecord , , acNewRec
Exit_AgregaRegistro:
Exit Function
Err_AgregaRegistro:
MsgBox Err.Description
Resume Exit_AgregaRegistro
End Function

(Créditos Jacinto Trillo)

Respuesta
1

Si los campos que están vacíos los tienes como "Requeridos", siempre te dará error. La solución, en este caso, es modificarle esa propiedad a No.

Si no es el caso, puedes probar a guardar el registro actual antes de pasar a uno nuevo, porque mientras no se guarde el registro nuevo, Access lo sigue considerando como "nuevo" y no permite ir a otro "nuevo". Tan solo pon, antes del DoCmd. GoToRecord esta linea:

DoCmd. RunCommanc acCmdSaveRecord

Otra cosa que puedes hacer, si no quieres que te salga el error, es modificar esa función para que no te lo muestre, por ejemplo:

Function AgregaRegistro()
On Error  Resume Next
DoCmd.GoToRecord , , acNewRec
End Function

o, si quieres evitar sólo ese error:

Function AgregaRegistro()
On Error GoTo Err_AgregaRegistro
DoCmd.GoToRecord , , acNewRec
Exit_AgregaRegistro:
Exit Function
Err_AgregaRegistro:

If Err.Number<>... Then MsgBox Err.Description
Resume Exit_AgregaRegistro
End Function

Donde tendrás que cambiar los puntos suspensivos por el número de error (3105 si mal no recuerdo)

Un saludo.


Un nuevo foro de access, visítanos: http://nksvaccessolutions.com/Foro/

Hola Sveinbjorn El Rojo gracias por contestar.

Te comento que traté de modificar la función por esto:

Function AgregaRegistro()
On Error  Resume Next
DoCmd.GoToRecord , , acNewRec
End Function

Pero no dio resultado no guardaba registro ni ejecutaba nada. 

Lugo traté de modificarla así

Function AgregaRegistro()
On Error GoTo Err_AgregaRegistro
DoCmd.GoToRecord , , acNewRec
Exit_AgregaRegistro:
Exit Function
Err_AgregaRegistro:

If Err.Number<>... Then MsgBox Err.Description
Resume Exit_AgregaRegistro
End Function

Pero de igual manera no sucedía nada, no arrojaba el error pero tampoco agregaba el gistro.

Lo único que quitó el error "No se puede ir al registro especificado" fue la línea que me dijiste que agregara.

Lo que quería era eso mismo que al tratar de agregar el registro si faltaba un campo de los requeridos no arrojara ese mensaje de error sino algo como "El campo xxxxx es obligatorio" , actualmente me arroja un mensaje que dice "Escriba un valor en el campo "Tabla.Apelidos".  Quisiera saber si es posible modificar de alguna manera ese textbox o dentro del botón una función que al faltar un campo requerido me diga "El campo nombres es un campo requerido" algo así.

Muchas Gracias por tu pronta respuesta.

este enlace: http://siliconproject.com.ar/neckkito/index.php/component/content/article/93-ejemplos-explicados/ejemplos-de-formularios/245-campos-obligatorios 

En él explico cómo se puede obligar a rellenar un campo sin usar la propiedad "requerido".

Si no quieres usar ese sistema, puedes hacer esto con tu código:

Function AgregaRegistro()
On Error GoTo Err_AgregaRegistro

If Nz(Me.Campo1,"")="" Then

msgbox "El campo ""Campo1"" es obligatorio",vbInformation

Exit Function

End If

If Nz(Me.Campo2,"")="" Then

msgbox "El campo ""Campo2"" es obligatorio",vbInformation

Exit Function

End If

'Y así con todos los que quieras...

DoCmd.GoToRecord , , acNewRec
Exit_AgregaRegistro:
Exit Function
Err_AgregaRegistro:
MsgBox Err.Description
Resume Exit_AgregaRegistro
End Function

Hola Sveinbjorn El Rojo. 

Trataré de aplicar tú ejemplo en cuanto me quede un poco de tiempo y probablemente me pase a darte las gracias. 

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas