Como agregar cuadro de mensaje que muestre "si o no" al finalizar una función de códigos

Tengo una función ingresada en un modulo de un formulario que no me permite dejar campos en blanco

mas un codigo en el evento antes de actualizar del formulario

Pero, cuando termino de ingresar todos los datos faltantes al presionar enter en el ultimo campo se guardan de forma automática todos los datos, probé agregando un código que me informa si o no para guardar los datos

Pero cuando le digo que no, igual me guarda los datos aun faltando un campo que completar,

Y si están todos los campos completados no me sale el cuadro de mensaje y quiero que igual salga el mensaje para yo autorizar si quiero guardar o no los datos.

3 respuestas

Respuesta
2

Personalmente, no lo entiendo. Si los campos RUT, Proveedor y teléfono van a ser obligatorios basta con que en la tabla origen del formulario pongas esos campos como requeridos=Sí, no sé a que viene ese código.

Por otro lado, si vas a usar el botón de comando donde se ve el disquette para guardar el registro no entiendo lo del evento Antes de actualizar del formulario. Basta con poner en el evento Al hacer clic del botón

Private Sub Comando11_Click()
For Each Control In Form.Controls
If Control.ControlType = acTextBox Then
If IsNull([Control]) Or Control.Value = "" Then
Dim respuesta As Byte
respuesta = MsgBox("Hay controles en blanco. Pese a eso, ¿quiere guardarlos?", vbYesNo + vbExclamation, "Tu decides")
If respuesta = vbYes Then
DoCmd.RunCommand acCmdSaveRecord
Else
DoCmd.CancelEvent
End If
End If
End If
Next
End Sub

Pero lo lógico sería ponerlo como

Private Sub Comando11_Click()
If IsNull([NombreCliente]) Or [NombreCliente] = "" Or IsNull([Ciudad]) Or [Ciudad] = "" Or IsNull([Pais]) Or Pais = "" Then
Dim respuesta As Byte
respuesta = MsgBox("Hay controles en blanco. Pese a eso, ¿quiere guardarlos?", vbYesNo + vbExclamation, "Tu decides")
If respuesta = vbYes Then
DoCmd.RunCommand acCmdSaveRecord
Else
DoCmd.CancelEvent
End If
End If
End Sub

De forma que cuando fueras a guardar, al dejar un control en blanco

Si le dices Sí, te guarda el registro. Si le dices No, se "mantiene" en el registro hasta que rellenes el que falta.

Lo complementaría, con anular el botón Cerrar del formulario y crear uno para cerrar, poniendo el mismo código, pero que si le dices No elimine el registro.

Respuesta
1

Este es un inconveniente cuando trabajamos con formularios dependientes, se debe tener bastante control que no se avance a otro registro con la rueda del mouse con las teclas Re Pág, Av Pág. Como le responde Julián es correcto para que se complica con tanto código, yo le recomiendo para que tenga el control total trabajar con formulario independiente y agregar con INSERT INTO... así puede controlar la actualización de la tabla. Después de validar la información puede preguntar algo como ¿Está seguro de agregar el registro?. Si responde "Sí" ejecuta el código SQL sino no guarda y no pasa nada y puede limpiar los campos recorriendo los controles con For Each...

Respuesta
1

Te falta poner un Else después del primer Cancel=True, para que te pregunte solo si no hay campos obligatorios vacíos, porque mientras tengas campos obligatorios vacíos, no te va a dejar seguir:

Private Sub Form_BeforeUpdate(Cancel As Integer)
If fncControlaVacios(Me.Name) = False Then
MsgBox "Los campos resaltados son obligatorios y debe introducir algún " _
& "valor para continuar.", vbExclamation + vbOKOnly, "ERROR: Campos vacíos"
Cancel = True
Else
If MsgBox("¿Guardamos datos?", vbYesNo + vbInformation) = vbYes Then
Else
Cancel = True
Me.Undo  'Si no quieres que te borre los datos, quita esta linea
End If
End If
End Sub

Eso era, faltaba un Else. Ahora no aparece el mensaje si quiero guardar o no los registros cuando hay un campo obligatorio por completar, pero después de completar el campo de igual forma al decir que no guarde igual los guarda y deja todos los registros en blanco, que puede ser?

Me parece muy raro que te guarde los datos (salvo que tengas algo más por ahí que te vaya guardando los datos), porque cuando le dices que no, el código simplemente cancela la actualización de datos y borra todo lo escrito en el formulario...

Como desconozco lo que tienes programado en el botón, te demuestro de dos formas que los datos no se graban al pulsar en NO:

La primera (en FDatos): intenta cambiar de registro o cerrar el formulario, te preguntará si quieres guardar o no, y si le dices que no, la tabla sigue virgen

La segunda (en FDatos2): si pulsas el botón de guardar y luego le dices que no, tampoco guarda nada en la tabla...

http://www.filebig.net/files/ZdsCZAJPXP 

Luego el código funciona perfectamente, lo que falla debe ser algo que ya tenías, le has añadido al código, o no has implementado correctamente de lo explicado en el ejemplo... pero ahí ya no te puedo decir, porque desconozco lo que tienes...

Ahora si funciona, pero si le digo que no quiero guardar los datos, se puede hacer que no los borre ya que podría quedar algo pendiente por  modificar antes de guardarlos

perdón, antes de borrarlos

En el código que te puse, ya te indiqué lo que tenías que cambiar para que no borre los datos ( quitar el me. Undo)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas