肖恩給出了一個幾乎正確的答案,但它留下了空白。
一般來說,FORM的BeforeUpdate
是最重要的形式事件。這是您的最後一道防線,並且始終在保存記錄之前運行,無論提示保存的是什麼(表格關閉,新記錄,您自己的保存按鈕,點擊子窗體等)。雖然我偶爾使用控件的BeforeUpdate
事件只是這樣用戶才能更早得到錯誤消息,我寫入的驗證代碼的大部分都在Form_BeforeUpdate
事件中運行。如果您想確保某些控件不爲空,則必須使用這個事件。沒有控制級別的事件可以在所有情況下都可靠地進行。主要是因爲如果控制從未獲得焦點,則不會發生控制級別事件。 Form_BeforeUpdate
也是您使用的事件,如果您的驗證涉及多個字段。如果您正在使用任何其他控件或事件級別的事件,則會浪費您的時間。在你的「陷阱」周圍總會有一些東西,你的表幾乎肯定會包含無效的數據。
關於OP的問題。如果你想強制人們使用自己的保存按鈕,並提示他們,如果他們不這樣做,你需要一個表單級別的變量,因爲肖恩的建議暗示。唯一的區別是,您需要將其設置爲False,在窗體的當前事件而非打開事件中。您希望標誌爲每條新記錄重新設置,而不僅僅是在表單打開時。然後在保存按鈕單擊事件中將其設置爲True,然後在強制記錄保存爲DoCmd.RunCommand acCmdSaveRecord
之前。
於是最後,在Form_BeforeUpdate
事件,你檢查變量的值。
If bClose = False Then
`If msgbox("Do you want to save the changes?", vbYesNo) = vbNo Then
` Cancel = True
If msgbox("Do you want to discard the Changes?", vbYesNo) = vbYes Then
Me.Undo
End If
Exit Sub
End If
End If
這可能不是嚴格的幫助,但是這就是爲什麼綁定表單的是偉大的工作。我把它看作是這樣的:用綁定的形式,你必須防止你不想要的任何改變,並且在沒有綁定的情況下,你只提交你想要的改變,取決於你想從哪個方面攻擊問題。然而綁定形式可能是有用的,但當我需要連續形式時,我真的只會爲他們服務。 –
在某種程度上,我正在尋找,但我不想失去所有爲我完成的代碼管道工作,當我綁定我的控件時。 –
可能存在未綁定表單問題的地方,安裝期間有更多的代碼工作,但最終是一個更容易控制的產品。 –