Actualizar campo al eliminar registro de subformulario

Tengo un formulario (FConsulta) y dentro del mismo he insertado un subformulario (SubVehiculos) que me muestra una serie de datos.

Dentro del formulario ha insertado un textbox llamado txtTotalRegistros y en el origen del control tengo puesto =DCont("*";"TVehiculos"), lo que hace es contarme los registro que hay en el subformulario. Todo bien.

Cuando selecciono un registro del subformulario, se me abre un formulario (FConsultaVehiculos) mostrándome todos los datos. Dentro de este último formulario he insertado un botón llamado eliminar, con la siguiente instrucción:

Dim resp As String

resp = MsgBox("¿Está seguro que desea eliminar este registro?" & vbCrLf & _

" Esta acción no se podrá deshacer.", vbInformation + vbYesNo, "CONFIRMA BORRADO")

If resp = vbYes Then

SQL = "DELETE * FROM TVehiculos WHERE MATRICULA = '" & Forms!FConsulta!SubVehiculos!MATRICULA & "' And REGISTRO = '" & Forms!FConsulta!SubVehiculos!REGISTRO & "'"

CurrentDb.Execute SQL

Forms!FConsulta!SubVehiculos.Form.Requery

Forms!FConsulta!txtTotalRegistros=Forms!FConsulta!SubVehiculos.Form.Recordset.RecordCount

DoCmd.Close acForm, Me.Name

MsgBox "Datos eliminados correctamente", vbInformation, "Aviso"

Else

Exit Sub

End If

Lo que pretendo es que a la hora de eliminar el registro, se me actualice el textbox llamado txtTotalRegistros, para eso he insertado la siguiente instrucción:

Forms!FConsulta!txtTotalRegistros=Forms!FConsulta!SubVehiculos.Form.Recordset.RecordCount

Pero me salta error 2448, no se puede asignar un valor a ese objeto.

Me pueden ayudar u orientar, para a la hora de eliminar un registro se actualice el valor del txtTotalRegistros.

2 respuestas

Respuesta
1

Si en el origen de control le tienes una expresión (como =DCount(...) ) no le puedes dar otro valor por código, macro o directamente escribiendo en el cuadro de texto.

La solución más sencilla sería eliminar la expresión del origen de control, y pasarle el valor por VBA, ya sea al abrir el formulario, al activar registro, o cualquier otro evento que te sirva...

Al borrar el registro, lo actualizas simplemente con:

Forms!FConsulta!txtTotalRegistros=DCount("*","TVehiculos")

De cualquier forma, tal como lo tienes (con la expresión como origen de control), al hacerle un requery (al subformulario) te lo tendría que volver a calcular sin necesidad de hacer nada a mayores.

Respuesta
1

Vamos a ver si me explico. Si el registro que muestra el formulario que se abre tiene "el resto" de datos de ese vehículo, tendrá un campo que lo relacione con la tabla origen del subformulario, sea Idvehículo, Matrícula, etc. Por tanto, si eliminas un registro desde el segundo, sólo tienes que decirle

En el origen del control del texto1 tengo puesto lo mismo que tú.

=DCont("*";"clientes")

En el subformulario te dejo a la vista el campo Idcliente( que no sería necesario) para que veas como elimina el registro

Verás que hay 91. Si ahora hago, por ejemplo, clic en Antonio Moreno, se abre el formulario DatosCliente con el resto de datos

Si ahora pulso el botón eliminar, que he supuesto que estaba ahí

Y el código del botón es simplemente

Private Sub Comando11_Click()
DoCmd.RunSQL "delete * from clientes where idcliente=" & Me.IdCliente & ""
Forms!formulario2!Clientes.Form.Requery
Forms! Formulario2. Refresh
DoCmd. Close
End Sub

Lo de requery es para que no te aparezca en el registro del subformulario #Eliminado#

Lo de refresh es para que el cuadro de texto Texto1 del formulario, "recalcule"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas