Form.BeforeUpdate 事件 (Access)
BeforeUpdate 事件會在變更的資料控制項或記錄會更新之前發生。
語法
運算式。BeforeUpdate (Cancel)
expression 代表 Form 物件的變數。
參數
名稱 | 必要/選用 | 資料類型 | 描述 |
---|---|---|---|
Cancel | 必要 | Integer | 設定決定 BeforeUpdate 事件會發生。 將 Cancel 引數設定為 True (1) 會取消 BeforeUpdate 事件。 |
註解
使用 Visual Basic 或含有 SetValue 巨集指令的巨集來變更控制項中的資料不會觸發這些事件的控制項。 不過,如果將移至另一筆記錄或儲存記錄,該表單的 BeforeUpdate 事件沒有發生。
若要在此事件發生時執行宏或事件程序,請將 BeforeUpdate 屬性設定為宏的名稱或 [事件程序]。
此事件不適用於選項群組中的選項按鈕、核取方塊或切換按鈕。 它只適用於選項群組本身。
BeforeUpdate 事件觸發控制項或記錄更新時。 在記錄內,當控制項失去焦點或使用者按 Enter 或 Tab 鍵時,每個控制項中的變更資料都會更新。當焦點離開記錄時,或如果使用者按一下 [記錄] 功能表上的[儲存記錄],則會更新整筆記錄,並將資料儲存在資料庫中。
當您在表單上的控制項中輸入新的或變更的資料,然後移至另一筆記錄,或按一下 [記錄] 功能表上的[儲存記錄] 來儲存記錄時,表單的AfterUpdate事件會緊接在控制項的AfterUpdate事件之後發生。
當您移至不同的記錄時,會發生控制項的 Exit 和 LostFocus 事件,後面接著您移至之記錄的 Current 事件,以及此記錄中第一個控制項的 Enter 和 GotFocus 事件。 若要執行的 AfterUpdate 巨集或事件程序不執行 退出 和 LostFocus 巨集或事件程序,請使用 [ 儲存記錄 ] 命令 記錄 ] 功能表上儲存記錄。
BeforeUpdate 巨集和事件程序執行只有當您變更控制項中的資料。 當計算控制項中的某個值有所變更時不會發生此事件。 BeforeUpdate 巨集和表單事件程序執行只有當您變更一筆記錄的一或多個控制項中的資料。
處理表單時,您可以使用 BeforeUpdate 事件取消記錄的更新將移至另一筆記錄之前。
如果使用者在控制項中輸入新值, OldValue 屬性設定無法變更之前儲存的資料 (記錄被更新)。 如果您取消更新, OldValue 屬性的值會取代為控制項中現有的值。
您若要驗證資料,特別是在執行複雜驗證時,例如會經常用 到 BeforeUpdate 事件的:
- 條件涉及表單上的多個值。
- 輸入不同的資料時顯示不同的錯誤訊息。
- 使用者可覆寫資料。
- 含有對其他表單上之控制項的參照,或含有使用者定義的函數。
注意事項
[!注意事項] 若要執行簡單驗證或例如需要中欄位的值,或是驗證表單上的多個控制項更複雜的驗證,您可以使用 ValidationRule 屬性的控制項和欄位及記錄在表格中的 ValidationRule 及 必要 屬性。
如果您嘗試修改控制項中包含的資料,而該控制項在事件的程式中引發 BeforeUpdate 事件,則會發生執行階段錯誤。
範例
下列範例顯示如何使用 BeforeUpdate 事件程序以檢查產品名稱是否已輸入的資料庫中。 當使用者在ProductName方塊中輸入產品名稱之後,該值會與 Products資料表中的ProductName欄位進行比較。 如果 Products 資料表中有相符的值,則會顯示訊息,通知使用者產品已輸入。
若要嘗試此範例,請將下列事件程序新增至名為 Products 的表單,其中包含名為 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
下列範例示範當使用者移至另一筆記錄時,連續表單上的控制項是空的時,如何顯示訊息。
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
下列範例會顯示如何使用表單的 BeforeUpdate 事件,以要求在另一個控制項也有資料時,將值輸入一個控制項。
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
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。