全部显示

BeforeUpdate 事件

       

BeforeUpdate 事件在控件中的数据被改变或记录被更新之前发生。

说明

通过使用含有 SetValue 操作的或 Visual Basic 来更改控件的数据时,并不触发这些事件。不过如果随后又移到另一条记录或保存这条记录,则将发生该窗体的 BeforeUpdate 事件。

BeforeUpdate 事件仅适用于窗体上的控件,不适用于报表上的控件。

BeforeUpdate 事件不适用于选项组中的选项按钮复选框切换按钮,而仅适用于选项组本身。

说明

若要在该事件发生时运行宏或事件过程,请将 BeforeUpdate 属性设置为宏的名称或 [事件过程]。

在控件或记录更新时,将会触发 BeforeUpdate 事件。在其中的一条记录中,当控件失去焦点或用户按 Enter 或 Tab 时,每个控件中被更改的数据都将更新;当焦点离开记录或用户在“记录”菜单中选择“保存记录”命令时,整条记录都将更新且数据将保存在数据库中。

在窗体的控件中输入新数据或更改数据,并移到另一条记录或在“记录”菜单中选择“保存记录”命令来保存记录时,窗体的 BeforeUpdate 事件将紧跟着控件的 BeforeUpdate 事件发生。移动到另一条记录时,控件的 ExitLostFocus 事件将发生,接着指针移到的记录的 Current 事件以及这条记录中第一个控件的 EnterGotFocus 事件发生。若要运行 BeforeUpdate 宏或事件过程而不想运行 Exit 和 LostFocus 宏或事件过程,请在“记录”菜单中选择“保存记录”命令。

BeforeUpdate 宏和事件过程只有在更改控件中的数据时才会运行。计算控件中值的改变不会触发这些事件。只有更改了记录中的一个或多个控件数据时,窗体的 BeforeUpdate 宏和事件过程才会发生。

对于窗体,可以使用 BeforeUpdate 事件在移到另一记录之前取消对记录的更新。

即使用户在控件中键入了新值,OldValue 属性设置仍然必须等到数据被保存(记录被更新)之后才能更改。如果取消更新,OldValue 属性值将替换控件中已有的值。

通常使用 BeforeUpdate 事件来验证数据的有效性,特别是在运行复杂的有效性检验时,例如:

注意  若要实施或简单或复杂的有效性规则,例如在字段中要求一个值或在窗体上验证多个控件,可以使用控件的 ValidationRule 属性以及表中字段和记录的 ValidationRule 和 Required 属性。

示例

以下示例说明如何使用 BeforeUpdate 事件过程来检查产品名称是否已经输入到数据库中。当用户在“产品名称”框中输入产品名称时,这个值将与“产品”表中的“产品名称”字段相比较,如果在“产品”表中有相符的值时,将显示一条消息通知用户该产品已经被输入。

若要试用该示例,请将下列事件过程添加到名为“产品”的窗体中,而且该窗体要含有一个名为“产品名称”的文本框。

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