Evento Form.BeforeUpdate (Access)

El evento BeforeUpdate se produce antes de que se actualicen los datos de un control o registro.

Sintaxis

expresión. BeforeUpdate (Cancelar)

expresión Variable que representa un objeto Form.

Parameters

Nombre Obligatorio/opcional Tipo de datos Descripción
Cancel Obligatorio Integer El valor determina si se produce el evento BeforeUpdate. Al establecer el argumento Cancel en True (1), se cancela el evento BeforeUpdate .

Comentarios

Cambio de datos en un control con Visual Basic o una macro que contenga la acción EstablecerValor no activa estos eventos para el control. Sin embargo, si se desplaza a otro registro o guardar el registro, se produce el evento BeforeUpdate del formulario.

Para ejecutar una macro o un procedimiento de evento cuando se produzca este evento, establezca la propiedad BeforeUpdate en el nombre de la macro o en [Procedimiento de evento].

Este evento no se aplica a los botones de opción, a las casillas de verificación ni a los botones de alternancia de un grupo de opciones. Sólo se aplica al grupo de opciones en sí.

El evento BeforeUpdate se desencadena cuando se actualiza un registro o un control. Dentro de un registro, los datos modificados de cada control se actualizan cuando el control pierde el foco o cuando el usuario presiona Entrar o Tabulador. Cuando el foco deja el registro o si el usuario hace clic en Guardar registro en el menú Registros , se actualiza todo el registro y los datos se guardan en la base de datos.

Cuando escribe datos nuevos o modificados en un control de un formulario y, a continuación, se mueve a otro registro, o bien guarda el registro haciendo clic en Guardar registro en el menú Registros , el evento AfterUpdate del formulario se produce inmediatamente después del evento AfterUpdate para el control.

Cuando se mueve a un registro diferente, se producen los eventos Exit y LostFocus del control, seguidos del evento Current para el registro al que se ha movido y los eventos Enter y GotFocus del primer control de este registro. Para ejecutar el procedimiento de evento o la macro AfterUpdate sin ejecutar los procedimientos de eventos o macros Exit y LostFocus, guarde el registro mediante el comando Guardar registro del menú Registros.

Las macros y los procedimientos de evento de BeforeUpdate solo se ejecutan si se modifican los datos de un control. Este evento no se produce cuando cambia el valor de un control calculado. Las macros y los procedimientos de evento BeforeUpdate de un formulario solo se ejecutan al modificar los datos de uno o más controles del registro.

Para formularios, puede usar el evento BeforeUpdate para cancelar la actualización de un registro antes de pasar a otro registro.

Si el usuario especifica un valor nuevo en el control, la configuración de la propiedad OldValue no se modifica hasta que se guardan los datos (el registro se actualiza). Si cancela una actualización, el valor de la propiedad OldValue reemplaza al valor existente en el control.

El evento BeforeUpdate se usa a menudo para validar datos, especialmente cuando se realizan validaciones complejas, como aquéllas que:

  • Implican condiciones sobre más de un valor de un formulario.
  • Muestran mensajes de error diferentes en función de los datos especificados.
  • Puede anular el usuario.
  • Contienen referencias a controles de otros formularios o funciones definidas por el usuario.

Nota:

[!NOTA] Para realizar validaciones simples o validaciones más complejas como requerir un valor en un campo o validar más de un control en un formulario, puede usar la propiedad ValidationRule de los controles y las propiedades ValidationRule y necesarios para los campos y registros de las tablas.

Se produce un error en tiempo de ejecución si intenta modificar los datos contenidos en el control que desencadena el evento BeforeUpdate en el procedimiento del evento.

Ejemplo:

En el siguiente ejemplo, se muestra cómo puede usar un procedimiento de evento BeforeUpdate para comprobar si un nombre de producto ya se ha indicado en la base de datos. Después de que el usuario escriba un nombre de producto en el cuadro ProductName, el valor se compara con el campo ProductName de la tabla Products. Si hay un valor coincidente en la tabla Products, se mostrará un mensaje que informa al usuario de que ya se ha indicado el producto.

Para probar el ejemplo, agregue el siguiente procedimiento del evento a un formulario denominado Products que contenga un cuadro de texto denominado ProductName.

Private Sub ProductName_BeforeUpdate(Cancel As Integer) 
    If(Not IsNull(DLookup("[ProductName]", _ 
        "Products", "[ProductName] ='" _ 
        & Me!ProductName & "'"))) Then 
        MsgBox "Product has already been entered in the database." 
        Cancel = True 
        Me!ProductName.Undo 
    End If 
End Sub

En el siguiente ejemplo se muestra cómo mostrar un mensaje cuando un control está vacío en un formulario continuo cuando un usuario pasa a otro registro.

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim oContr As Control
    For Each oContr In Me.Detail.Controls
        If IsNull(oContr) = True Then
            If MsgBox(oContr.Name & " is empty", vbOKCancel) = vbCancel Then
                Cancel = True: oContr.SetFocus: Exit Sub
            End If
        End If
    Next oContr
End Sub

En el siguiente ejemplo, se muestra cómo usar el evento BeforeUpdate de un formulario para requerir que se especifique un valor en un control cuando otro control también tiene datos.

Private Sub Form_BeforeUpdate(Cancel As Integer)
If (IsNull(Me.FieldOne)) Or (Me.FieldOne.Value =  "") Then
    ' No action required
Else
    If (IsNull(Me.FieldTwo)) or (Me.FieldTwo.Value = "") Then
        MsgBox "You must provide data for field 'FieldTwo', " & _
            "if a value is entered in FieldOne", _
            vbOKOnly, "Required Field"
        Me.FieldTwo.SetFocus
        Cancel = True
        Exit Sub
    End If
End If

End Sub

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.