Eliminar registro de subformulario con botón de comando

Tengo un formulario principal con un subformulario continuo relacionados por el campo Expediente. La idea es poder eliminar registros del subformulario desde un botón ubicado en el formulario principal y que antes de ser eliminado por el usuario, le pregunte si realmente quiere eliminar ese registro.

Mi pregunta es que código debo poner en el evento al hacer clic de botón.?

2 respuestas

Respuesta
2

Supongamos que tengo un formulario Compras con un subformulario DetalleCompra, relacionados por Idcompra, en el que hay un combinado donde elijo el Producto, llamado Idproducto ya que su columna dependiente es IdProducto. Selecciono el registro que quiero eliminar

Es este caso el sirope de regtaliz, porque es de empalagoso...Y al Pulsar el botón

Al decirle que Sí

Ya no voy a tener problemas de azúcar. El código del botón es

Private Sub Comando34_Click()
Dim respuesta As Byte
respuesta = MsgBox("¿Está seguro de querer eliminarlo?", vbYesNo + vbQuestion, "Luego no te quejes")
If respuesta = vbNo Then
Exit Sub
Else
DoCmd.SetWarnings False
DoCmd.RunSQL "delete * from DetalleCompra where idcompra=" & Me.IdCompra & " and idproducto=forms!compras!detallecompra.form!idproducto"
Me!DetalleCompra.Form.Requery
End If
End Sub

En realidad lo elimino de la tabla origen del subform y luego le digo al subform que reconsulta su origen

Julián, gracias por tu repuesta.  Estoy intentando adaptarla a mis necesidades y no hay manera, algo hay que no hago bien y que no se que es.

Mi formulario principal se llama: F_Mantenimiento_Obras_Seervicios, que depende de la tabla T_Mantenimiento_Obras_Servicios

El Subformulario continuo se llama: FHD_Apuntes_Obras, depende de la tabla  T_ApunteObra

Ambos formularios están relacionados por el campo Expediente.

En el evento  "al hacer clic" del botón, tengo este código:

Private Sub BtnBorrar_Click()
Dim respuesta As Byte
respuesta = MsgBox("¿Está seguro de querer eliminarlo?", vbYesNo + vbQuestion, "Va a eliminar un apunte")
If respuesta = vbNo Then
Exit Sub
Else
DoCmd.SetWarnings False
DoCmd.RunSQL "delete * from T_ApunteObra where Expediente=" & Me.Expediente & " and id=forms!FHD_Apuntes_Obras.form!id"
Me!FHD_Apuntes_Obras.Form.Requery
End If
End Sub

Cuando lo ejecuto me sale esto:

Si hago clic en aceptar, no hace nada.- He probado de todo y no con la tecla para conseguir que  funcione.

Sin saber como es el diseño del formulario, ni el origen de registros del subformulario es difícil opinar algo. Pero da la impresión de que o bien unos de los controles del subformulario depende de un campo calculado, o bien en alguno de ellos haces referencia a un campo OS.

Si quieres, como sabes mi dirección haz una copia con datos inventados y me la mandas.

Respuesta
1

Otra forma es clonando el subformulario:

Para retirar el artículo la tabla de artículos de pedido tiene como campo autonumérico el campo iditem. Voy a retirar el iditem número 14, hago clic en el botón Retirar Item y el sistema pregunta como muestra la imagen informándome sobre el nombre del artículo, hago clic en para retirarlo. Obtengo el siguiente resultado:

Observe que ya no está el iditem número 14.

CODIGO DEL BOTON RETIRAR ITEM

Private Sub btnRetirar_Click()
On Error GoTo hay_error
Dim lnItem As Long
Dim rs As Recordset
lnItem = Me.Pedidos_articulos.Form.ActiveControl.Value
Set rs = Me.Pedidos_articulos.Form.RecordsetClone
rs.FindFirst ("iditem=" & lnItem)
 If MsgBox("¿Está seguro que retira el artículo? " _
 & rs!articulo, vbYesNo + vbQuestion + vbDefaultButton2, "Retirando") = vbYes Then
   rs.Delete
 Else
   Exit Sub
 End If
 Set rs = Nothing
Me.Pedidos_articulos.Form.Requery
If Err.Number = 0 Then
   MsgBox "Artículo retirado satisfactoriamente", vbInformation, "Retirando "
End If
hay_error_exit:
Exit Sub
hay_error:
     MsgBox Err.Description, vbCritical, "Error..."
     Resume hay_error_exit
End Sub

Este código valida que el subformulario tenga registros:

Private Sub btnRetirar_Click()
On Error GoTo hay_error
Dim lnItem As Long
Dim rs As Recordset
Set rs = Me.Pedidos_articulos.Form.RecordsetClone
If rs.RecordCount = 0 Then
  Exit Sub
End If
lnItem = Me.Pedidos_articulos.Form.ActiveControl.Value
rs.FindFirst ("iditem=" & lnItem)
 If MsgBox("¿Está seguro que retira el artículo? " _
 & rs!articulo, vbYesNo + vbQuestion + vbDefaultButton2, "Retirando") = vbYes Then
   rs.Delete
 Else
   Exit Sub
 End If
 Set rs = Nothing
Me.Pedidos_articulos.Form.Requery
If Err.Number = 0 Then
   MsgBox "Artículo retirado satisfactoriamente", vbInformation, "Retirando "
End If
hay_error_exit:
Exit Sub
hay_error:
     MsgBox Err.Description, vbCritical, "Error..."
     Resume hay_error_exit
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas