Access. Error al añadir nuevo registro

Estoy completando y corrigiendo una base de datos con pacientes de un hospital, con sus datos personales, pruebas, visitas, etc.

Mi estructura es un formulario lleno de fichas (subformularios) que describen cada uno de los campos (Datos de filiación, Pruebas Analíticas, Pruebas Radiológicas, Ensayos clínicos... Etc) y almacenan en tablas separadas todos estos datos.

Para los subformularios en cualquiera de las fichas de pruebas necesito que para cada paciente aparezca un número de la prueba (creciente de 1... N) cosa que he conseguido mediante la respuesta de un compañero en este foro con el código siguiente:

*Donde PATNO es el número de identificación del paciente en la base de datos y que está presente en todas las tablas, ESFNUMPAC es en este caso el número de la prueba correspondiente a ese paciente y 08_PRUEBAS_FUN... Es la tabla con los datos de este tipo de prueba*

Cuando añado (o elimino) esa prueba nueva, el el subformulario correspondiente, me incrementa correctamente el contador y pasa al nº siguiente de prueba [Hasta aquí todo correcto]

Pero en el momento de querer añadir un paciente nuevo desde el formulario principal mediante este botón, me aparece el error que dejo a continuación y me deriva al código de la primera imagen:

¿Sabríais decirme donde puede llegar a estar el error para que me salte este error? Tengo que decir que si hago click en depurar y cierro ventana de VB me aparece el nuevo registro, pero me gustaría poder solventarlo para no arrastrarlo en la evolución de la base.

Respuesta
2

Presumo que el error te sale porque el código que tienes para incrementar el número de prueba en el subformulario se ejecuta (porque lo llamas desde algún evento del form principal) antes de que el campo PATNO tenga un valor.

Para solucionarlo puedes hacer varias cosas:

1º/ Revisar el código y si estás en un registro nuevo del formulario principal que no haga la llamada al código del subformulario.

2º/ Añadir un control de errores y que ignore ese error en concreto (If Err.Number=3075 Then Resume next)

3º/ Usar Nz() para darle un valor válido a PATNO en la expresión que genera el número.

Sin tener una perspectiva general del código y funcionamiento de tu sistema formulario-formulario poco más te puedo decir.

Un saludo.


Tiene sentido porque el registro nuevo se hace desde el formulario principal y al tener la relación del PATNO en todos los subformularios, este provoca una cadena de errores en todos los que tienen ese código del contador. 

Creo que la solución 2 será la que mejor se adecue a mi base en concreto porque por lo demás trabaja bien. Ese control de errores que me comentas, donde debo de ponerlo? Porque nunca lo he probado y si es mediante otro proceso tendré que indagar a ver como crearlo.

Muchas gracias por las aclaraciones!

Saludos

En el evento que te marca el error, debajo el "Private Sub..." pon esta línea:

On Error GoTo Sol_Err

y antes del "End Sub" éstas otras:

Sol_Err:

If Err.Number=3705 Then

Resume Next

Else

MsgBox "Se ha producido el error " & Err.Number & ": " & Err.Description

End If

Es decir, que te quede así:

Private Sub....
On Error GoTo Sol_Err
'Por aquí iría el código que ya tienes
Sol_Err:
If Err.Number=3705 Then
Resume Next
Else
MsgBox "Se ha producido el error " & Err.Number & ": " & Err.Description
End If
End Sub

Receintemente mi amigo Neckito publicó en su web (http://siliconproject.com.ar/neckkito/index.php ) un mini-manual sobre depuración de errores. Puedes echarle un ojo para profundizar más. También en su manual de VBA tiene un capítulo dedicado a este tema.

Con esto me funciona, sé que en el fondo es ocultar el error pero también considero que no es trascendente así que me vale.

Muchas gracias!

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas