Access no encuentra formulario (Error 2450)

Tengo una base de datos en la cual he insertado 4 formularios (FDatoshechos, FConductor, FVehiculo, FVehiculoB) en uno de los formularios tengo insertado un botón (cmdGuardarDatos) con la siguiente instrucción:

Private Sub cmdGuardarDatos_Click()

Dim DB As Database

Dim rs As Recordset  'Datos hechos

Dim rs1 As Recordset 'Conductor

Dim rs2 As Recordset 'Vehiculo

Dim rs3 As Recordset 'Vehiculo B

Set DB = CurrentDb

  Set rs = DB.OpenRecordset("TDatoshechos")

  Set rs1 = DB.OpenRecordset("TConductor")

  Set rs2 = DB.OpenRecordset("TVehiculo")

  Set rs3 = DB.OpenRecordset("TVehiculoB")

Rs. AddNew

Código

Rs1. AddNew

Código

Rs2. AddNew

Código

Rs3. AddNew

Código

rs.Update   'Datos hechos

 rs1.Update  'Datos Conductor

 rs2.Update  'Datos vehiculo

 rs3.Update  'Datos vehiculosB

 MsgBox " El Atestado ha sido guardado", vbInformation, " Atestado num. " & Forms!FDatoshechos!Atestado & ""

Hay veces que no inserto datos en uno de los formularios en concreto FVehiculoB y cuando pulso el botón (cmdGuardarDatos) me salta error 2450 y me dice que no encuentra el formulario FVehiculosB, como podría evitar ese error y que me grabara los datos en las correspondientes tablas.

1 Respuesta

Respuesta
1

Supongo que en alguna de las partes de código que omites (donde pones Código) tienes alguna llamada a un control del formulario FVehiculosB, y como no está abierto, te dice que no lo encuentra.

Si ese es el caso, puedes comprobar previamente que este cargado con IsLoaded, o ponerle un control de errores a tu procedimiento para que ignore ese error y siga ejecutando el guardado en las otras tablas que sí recibirán datos.

Un saludo.


Hola y gracias por responder, comentarte lo siguiente, lo que tengo puesto en Código de VehiculoB, es la siguiente instrucción, (que no lo había insertado pues es largo):

'Datos vehiculo B

 rs3.AddNew

rs3!Codigo = Nz(Forms!FVehiculoB!txtCodigo, "")

 rs3!Atestado = Nz(Forms!FVehiculoB!Atestado, "")

 rs3!Numero = Nz(Forms!FVehiculoB!Numero, "")

rs3!CodigoAtestado = Nz(Forms!FVehiculoB!Texto188, "")

 rs3!MatriculaB = Nz(Forms!FVehiculoB!MatriculaB, "")

 rs3!TipovehiculoB = Nz(Forms!FVehiculoB!TipovehiculoB, "")

rs3!MarmoB = Nz(Forms!FVehiculoB!MarmoB, "")

'Posee Permiso conducir

 If Forms!FVehiculoB!Marco82 = 1 Then

rs3!PoseeB = 1

 Else

rs3!PoseeB = 0

 End If

Decirte que he insertado un control de errores, para saltar el error 2450, he puesto lo siguiente:

On Error GoTo MAV

MAV:

Select Case Err.Number = 2450

End Select

 Y Ahora resulta que me salta error 3058, el índice o la clave principal no puede contener un valor Null  y me graba el registro, pero no me salta el msgbox diciendo que se ha grabado.

MsgBox " El Atestado ha sido guardado", vbInformation, " Atestado num. " & Forms!FDatoshechos!Atestado & ""

Un Saludo.

Ese control de errores (si lo tienes así) no te controla nada, o prácticamente nada, aunque si ver completo el código no lo puedo asegurar al 100%.

Yo lo que haría sería validar que el formulario correspondiente esté abierto antes de guardar los datos en cada recordset, y si no lo está, que siga p'alante...

Algo tal que así:

Private Sub cmdGuardarDatos_Click()
Dim DB As Database
Dim rs As Recordset  'Datos hechos
Dim rs1 As Recordset 'Conductor
Dim rs2 As Recordset 'Vehiculo
Dim rs3 As Recordset 'Vehiculo B
Set DB = CurrentDb
If CurrentProject.AllForms("FDatosHechos").IsLoaded Then
  Set rs = DB.OpenRecordset("TDatoshechos")
  rs.AddNew
Código...
  rs.Update
  rs.Close
  set rs=Nothing
End If
If CurrentProject.AllForms("FConductor").IsLoaded Then
  Set rs1 = DB.OpenRecordset("TConductor")
  rs1.AddNew
Código...
  rs1.Update
  rs1.Close
  set rs1=Nothing
End If
Y así con el resto...

Ahora bien, si los formularios FDatosHechos, FConductor... no son independientes, ya tendrías los registros en las tablas sin necesidad de todo ese código...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas