Eliminar un registro de subformulario

De nuevo por acá. Necesito eliminar un registro de un subformulario y que el cursor quedé en el nuevo registro. Este es mi caso

Señores expertos les agradezco me expliquen con cómo se haría mediante las 2 formas. ¿Cuál es la más recomendada?

Respuesta
1

Su pregunta es una alternativa buena para no adicionar el botón de eliminar por cada registro y evitar el uso de la tecla DEL para eliminar. Martha le explico por partes.

1. Código asociado al subformulario

- En propiedades, eventos, tecla de vista previa en SI. Esto para poden capturar la tecla DEL

- Ingrese este código en el evento Al bajar una tecla.

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode = 46 Then 'Tecla Suprimir
    KeyCode = 0
   End If
End Sub

- Código para el botón Eliminar (desde el subformulario)

Private Sub btnEliminar_Click()
    If Not Me.NewRecord Then
        If MsgBox("¿Estás seguro de que deseas eliminar este registro? " & vbCrLf & Me.cboproducto.Column(1), vbQuestion + vbYesNo, "Confirmar eliminación") = vbYes Then
            Dim rs As DAO.Recordset
            Set rs = Me.RecordsetClone
            rs.FindFirst "[idproducto] = " & Me.idproducto ' Reemplace "idproducto" con el nombre del campo clave del registro
            If Not rs.NoMatch Then
                rs.Delete
                Me.Requery
            End If
            rs.Close
            Set rs = Nothing
            Me.OrderBy = "id"
            Me.OrderByOn = True
            DoCmd.GoToRecord , , acNewRec
        End If
      Else
           MsgBox "Está en un nuevo registro", vbInformation, "Le informo"
    End If
End Sub

En este código asumo que el subformulario tiene como origen de datos una tabla temporal y que tiene un campo "id".

2. Código asociado al formulario principal

Código del botón Eliminar (Formulario principal)

Private Sub btnEliminar_Click()
    Dim subformulario As Form
    ' Obtener referencia al subformulario
    Set subformulario = Me.frmSubFactura.Form
    ' Verificar si hay un registro seleccionado en el subformulario
    If Not subformulario.Recordset.EOF Then
        ' Guardar el valor del registro actual
        Dim registroActual As Variant
        registroActual = subformulario!cboproducto.Value
        If IsNull(registroActual) Or registroActual = 0 Then
           MsgBox "Estas en un nuevo registro", vbInformation, "Retirando registro"
           Exit Sub
        End If
        ' Eliminar el registro actual en el subformulario
        If MsgBox("¿Está seguro de retirar el registro?", vbQuestion + vbYesNo + vbDefaultButton2, "Retirando registro") = vbYes Then
            subformulario.Recordset.Delete
        Else
            Exit Sub
        End If
        ' Actualizar el subformulario
        Subformulario. Requery
        ' Buscar el registro actualizado
        subformulario.Recordset.FindFirst "idproducto= " & registroActual
        subformulario.Recordset.MoveLast
        subformulario.Recordset.AddNew
        ' Pasar el foco al subformulario
        Me. FrmSubFactura. SetFocus
    End If
End Sub

En este código asumo que al campo el cuadro combinado del subformulario lo llama cboproducto. Respecto a su pregunta personalmente le recomiendo retirar el registro desde el formulario principal.

Espero le sirva, como tengo su correo le estoy enviando un ejemplo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas