BeforeUpdate 事件

此頁沒有內(nèi)容條目
內(nèi)容

expandtri全部顯示

BeforeUpdate 事件在控件中的數(shù)據(jù)被改變或記錄被更新之前發(fā)生。

Private Sub object_BeforeUpdate(Cancel As Integer)

Object    窗體或控件的名稱。

Cancel    該設(shè)置確定是否發(fā)生 BeforeUpdate 事件。將 Cancel 參數(shù)設(shè)為 True (–1) 可取消 BeforeUpdate 事件。

說明

通過使用 Visual Basic 或含有 SetValue 操作的來更改控件中的數(shù)據(jù)時,不會觸發(fā)這些事件。但是,如果隨后移動到另一條記錄或保存該記錄,該窗體的 BeforeUpdate 事件便會發(fā)生。

BeforeUpdate 事件僅適用于窗體上的控件,不適用于報表上的控件。

BeforeUpdate 事件不適用于選項組中的選項按鈕復(fù)選框切換按鈕,而僅適用于選項組本身。

說明

若要在該事件發(fā)生時運行宏或事件過程,請將 BeforeUpdate 屬性設(shè)置為宏的名稱或 [事件過程]。

在控件或記錄更新時,將會觸發(fā) BeforeUpdate 事件。在其中的一條記錄中,當(dāng)控件失去焦點或用戶按 Enter 或 Tab 時,每個控件中被更改的數(shù)據(jù)都將更新;當(dāng)焦點離開記錄或用戶在“記錄”菜單中選擇“保存記錄”命令時,整條記錄都將更新且數(shù)據(jù)將保存在數(shù)據(jù)庫中。

在窗體的控件中輸入新數(shù)據(jù)或更改數(shù)據(jù),并移到另一條記錄或在“記錄”菜單中選擇“保存記錄”命令來保存記錄時,窗體的 BeforeUpdate 事件將緊跟著控件的 BeforeUpdate 事件發(fā)生。移動到另一條記錄時,控件的 ExitLostFocus 事件將發(fā)生,接著指針移到的記錄的 Current 事件以及這條記錄中第一個控件的 EnterGotFocus 事件發(fā)生。若要運行 BeforeUpdate 宏或事件過程而不想運行 Exit 和 LostFocus 宏或事件過程,請在“記錄”菜單中選擇“保存記錄”命令。

BeforeUpdate 宏和事件過程只有在更改控件中的數(shù)據(jù)時才會運行。計算控件中值的改變不會觸發(fā)這些事件。只有更改了記錄中的一個或多個控件數(shù)據(jù)時,窗體的 BeforeUpdate 宏和事件過程才會發(fā)生。

對于窗體,可以使用 BeforeUpdate 事件在移到另一記錄之前取消對記錄的更新。

即使用戶在控件中鍵入了新值,OldValue 屬性設(shè)置仍然必須等到數(shù)據(jù)被保存(記錄被更新)之后才能更改。如果取消更新,OldValue 屬性值將替換控件中已有的值。

通常使用 BeforeUpdate 事件來驗證數(shù)據(jù)的有效性,特別是在運行復(fù)雜的有效性檢驗時,例如:

?一個窗體上有多個值的情況。

 

?對不同的輸入數(shù)據(jù)顯示不同的錯誤消息。

 

?能被用戶覆蓋。

 

?包含對其他窗體上控件的引用或包含用戶定義的函數(shù)。

注意  若要實施或簡單或復(fù)雜的有效性規(guī)則,例如在字段中要求一個值或在窗體上驗證多個控件,可以使用控件的 ValidationRule 屬性以及表中字段和記錄的 ValidationRule 和 Required 屬性。

如果您試圖修改在事件過程中激活 BeforeUpdate 事件的控件內(nèi)所包含的數(shù)據(jù),則會發(fā)生運行時錯誤。

如果要將窗體的全部有效性驗證存儲在一個宏組中,或者,如果讓幾個窗體使用一個有效性驗證表達(dá)式,則可以使用 BeforeUpdate 宏。

例如,假定用戶在窗體上的“國家/地區(qū)”控件中輸入了某個國家/地區(qū)的名稱,并在“郵政編碼”控件中輸入了該國家/地區(qū)的相應(yīng)郵政編碼,則在宏中使用條件表達(dá)式可確保在“國家/地區(qū)”控件中輸入的數(shù)據(jù)與在“郵政編碼”控件中輸入的數(shù)據(jù)相對應(yīng),并且,當(dāng)在“郵政編碼”控件中輸入的數(shù)據(jù)無效時會顯示一條消息。

使用 AfterUpdate 宏,可以顯示其他窗體頁,或者將焦點移至特定控件或記錄。例如,當(dāng)用戶在窗體的“類別”控件中輸入值時,可以使用 AfterUpdate 宏中的 GoToPage 操作將焦點移至包含該類別控件的窗體頁。

可以在 BeforeUpdate 宏中使用 CancelEvent 操作來取消更新。如果 BeforeUpdate 宏附加到某個控件,則 CancelEvent 操作會把焦點返回到該控件,并且用戶輸入的數(shù)據(jù)會留在該控件中。

如果 BeforeUpdate 宏附加到某個窗體(每次更改記錄時,它會在該窗體中運行),CancelEvent 操作會將焦點返回到該記錄。

不能在 AfterUpdate 宏中使用 CancelEvent 操作來取消 AfterUpdate 事件。

示例

以下示例說明如何使用 BeforeUpdate 事件過程來檢查產(chǎn)品名稱是否已經(jīng)輸入到數(shù)據(jù)庫中。當(dāng)用戶在“產(chǎn)品名稱”框中輸入產(chǎn)品名稱時,這個值將與“產(chǎn)品”表中的“產(chǎn)品名稱”字段相比較,如果在“產(chǎn)品”表中有相符的值時,將顯示一條消息通知用戶該產(chǎn)品已經(jīng)被輸入。

若要試用該示例,請將下列事件過程添加到名為“產(chǎn)品”的窗體中,而且該窗體要含有一個名為“產(chǎn)品名稱”的文本框。

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