Botón Cancelar y Salir sin guardar, Access 2007

Nuevamente estoy en busca de respuestas a un tema que me tiene sin dormir de tanta investigación y de la urgencia que tengo por solucionarlo. Espero puedan darme una mano. Tengo un Formulario con un subformulario, el cual sirve solo para cargar registros. Están vinculados por un campo principal de texto. La cuestión es, y puede resultar repetitivo para algunos, que necesito agregarle un botón que me permita deshacer los cambios tanto en el form como el subform cuando por alguna razón (error, falta de datos, etc.) deba dejar de registrar y lógicamente no los guarde automáticamente ya que ocupa espacio en mi tabla principal y me genera errores de clave principal duplicada y demás. He intentado con Me.Undo pero esto solo funciona con el form y no con el sub form. Intenté con formularios independientes pero no puedo hacerlo con el subform. Podrían por favor mostrarme la luz al final de túnel.

Respuesta
1

Espero que en estos cinco años hayas podido dormir... Yo tenía el mismo problema pero no con un subformulario, sino con un cuadro combinado. Los solucioné de la siguiente forma.

Creo los cuadros combinados independientes. Cuando quiero guardar los valores cargados, los guardo temporalmente en una variable, luego vinculo el control y más tarde le cargo el valor guardado. Finalmente cierro el formulario. Funciona. Les paso el código por si a alguien le sirve.

Private Sub cmdAgregar_Click()

Dim Value As Variant
Value = Me.ccIdProveedor.Value 'Guarda el valor cargado manualmente
Me.ccIdProveedor.ControlSource = "IdProveedor" 'Vincula el control al campo de la tabla
Me.ccIdProveedor.Value = Value 'Carga el valor previamente guardado
Value = Me.ccTipoDeDocumento.Value
Me.ccTipoDeDocumento.ControlSource = "TipoDeDocumento"
Me.ccTipoDeDocumento.Value = Value
DoCmd.Close acForm, "formDocumentos", acSaveYes
End Sub

Private Sub cmdCancelar_Click()
DoCmd.Close acForm, "formDocumentos", acSaveNo
End Sub

He tenido pesadillas jajajajaj. Yo lo solucioné con un botón Me.Undo en el subform, aunque no era lo que necesitaba funcionó en su momento. Agradezco tu respuesta y capaz la pruebe a ver cómo va. Muchas gracias!

Me alegro!

1 respuesta más de otro experto

Respuesta
1

Cristobal: Ignoro que código tienes pero con el SubFormulario, si le pones >>

Me. NombredelSubForm. Undo te debe funcionar: Jacinto

¡Gracias por tu pronta respuesta Jacinto!. En el evento alhacerclic he puesto Me.Undo y Subform.Undo, pero al hacer foco en el subform y oprimir el botón solo deshace lo cargado en el form.

Ahhh!, además me arroja un error de compilación "no se encontró el método o el dato miembro"

Cristobal: Si le has puesto el código tal como lo mencionas literalmente seguro que da error.

La ide es:

Me. Undo >>OK

Para el SubFormulario, que supongamos se llama Juanito

Me. Juanito. Undo

Si continuas con dificultades me lo comentas: Jacinto

¡Gracias nuevamente Jacinto!. He puesto el código de la siguiente manera y ya no arroja error:

Private Sub boton_CANCELAR_Click()
Me.Undo
Me.Subformulario_DETALLE_DOCUMENTOS.Form.Undo
End Sub

Pero, no hace nada :-(. Te explico. Si completo todos los campos del formulario principal sin pasar al Subform y oprimo el botón, deshace los datos cargados hasta ahí. El problema es que al pasar al subform se actualiza el registro y guarda automáticamente lo antes cargado (form principal) y al seguir cargando en el subform, oprimo el bendito botón y no funciona!. Ojalá me haya explicado. Saludos!

Cristobal: Ok Ahora entiendo mejor el problema.

Te preparare un ejemplo y te facilito el enlace, como más tarde el Domingo: Jacinto

Genial!. Muchas gracias de nuevo!

Cristobal: He estado mirando si había una forma simple para evitar que Access no guardara los Datos de modo transitorio, pero su diseño es el que es. Tiene la característica de guardar por omisión cuando el registro que acabas de modificar pierde el foco.
El modo en que yo lo haría es con Formularios “Independientes”, que tú dices haber probado.
En ese sentido no hace mucho tiempo ví un ejemplo de Sveinjorn que trata de ese tema y lo resuelve muy bién.

Está en:

http://siliconproject.com.ar/neckkito/index.php/ejemplos-explicados/todos 

En el apartado de Formularios: Datos en Formularios independientes (3).

Utiliza dos métodos: Recordsets y Módulo de Clase

Ya me contarás: Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas