Manejo de Registros - Form multiregistros

Estoy haciendo una aplicación Access (formularios Access- código VB).
Necesito hacer un form multiregistros que, permita insertar y eliminar registros. Pero que de la opción al usuario de deshacer dichos inserts o deletes. ¿Es posible?
¿Me conviene trabajar con recordsets?

1 respuesta

Respuesta
1
Lo que puedes hacer es lo siguiente:
* En la tabla agrega los siguientes campos
  - Eliminar: Tipo boleano., visible para el usuario
  -[Codigo Eliminacion]: No visible al usuario.
* En el formulario actualiza la propiedad origen del registro como sigue: "Select * From NombreTabla Where Eliminar=0"
El usuario podrá seleccionar en el campo eliminar si desea eliminar el registro. Luego para confirmar la eliminación Debe presionar en un ComboBox cuyo evento click sea el siguiente:
DoCmd.RunSQL "UPDATE NombreTabla SET [Codigo Eliminacion] = (DMax('[Codigo Eliminacion]','NombreTabla')+1)" & _
                "WHERE ((([Codigo Eliminacion])=0) AND ((eliminar)=-1))"
Me. Requery
Este código te permitirá marcar como eliminado el registro y a su vez actualiza el campo Código_Eliminación(Suma uno al anterior código). Luego vuelve a actualizar los registros del formulario con los no eliminados.
En el caso de que quieras recuperar los registros puedes agregar otro ComboBox con el siguiente código en el evento click:
DoCmd.RunSQL "UPDATE NombreTabla SET [Codigo Eliminacion] = 0, eliminar = 0" & _
"WHERE ((([Codigo Eliminacion])=DMax('[Codigo Eliminacion]','NombreTabla')) AND ((eliminar)=-1));"
Me. Requery
De esta forma también permite al usuario eliminar los registros insertados.
Espero haber resuelto tu problema. Por favor cierra el tema o vuelve a preguntar.
No es comboBox. Es un control Button. Disculpa.
Jorge, muchas gracias por la pronta respuesta. Te hago más específica la consulta, pues no la formulé correctamente (aunque tu propuesta seguramente voy a utilizarla en algún otro caso, pues es muy interesante):
Tengo una tabla cabecera-detalle: en el formulario del ABM de detalle, debo tener un botón que muestre items que se completarán automáticamente, pero que se darán de alta si el usuario así lo desea (mediante un botón confirmar). Por tal motivo, pensé en utilizar un recordset (asociado a la tabla detalle), el cual completaré con los items automáticos. Y los quiero mostrar por pantalla, pero sin realizar los inserts antes de que el usuario los confirme.
¿Es posible hacer esto?
Desde ya, muchas gracias.
Pablo.
Te sugiero lo siguiente:
Crear un formulario con los datos a actualizar en la tabla "Detalle" con un botón confirmar y otro cancelar.
En el formulario "Detalle" coloca un botón que cargue el formulario de "Actualización".
El código seria por ejemplo:
Private Sub Abrir_Click()
DoCmd.OpenForm "Actualización", acNormal
End Sub
El código en visual basic seria el siguiente (Dentro del codigo de "Actualización")
* Evento Click del Botón Confirmar:
Private Sub Confirmar_Click()
    Dim Destino As DAO.Recordset
    Set Destino = Forms("Detalle").Recordset
    Dim Origen As DAO.Recordset
    Set Origen = Me.Recordset
    Origen.MoveFirst
    Do Until Origen.EOF
        Destino.AddNew
        Destino(0) = Origen(0)
        Destino(1) = Origen(1)
        Destino.Update
    Origen.MoveNext
    Loop
    DoCmd.Close acForm, Me
End Sub
* Evento Click del Botón Cancelar:
Private Sub Cancelar_Click()
       DoCmd.Close acForm, Me
End Sub
* A su vez dentro del evento Open del formulario de "actualización" coloca el siguiente código que te permite verificar que el formulario principal ("Detalle") se encuentra abierto. La única forma de abrir el Formulario "Actualización" es con el botón dentro del formulario principal.
Private Sub Form_Open(Cancel As Integer)
    If Application.CurrentProject.AllForms("Subformulario Provincia").IsLoaded=False Then
        Cancel = -1
    End If
End Sub
Corrección:
Private Sub Form_Open(Cancel As Integer)
    If Application.CurrentProject.AllForms("Detalle").IsLoaded=False Then
        Cancel = -1
    End If
End Sub
Jorge, muchas gracias por la dedicación y esfuerzo en explicarme.
Aplicaré lo que me propusiste. Y si se me complica, vuelvo a molestarte.
Nuevamente, gracias.
Pablo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas