我正在使用RunCommand acCmdSaveRecord
保存一條記錄,並且我試圖使用表單的BeforeUpdate
事件來驗證某些不想留空的字段記錄保存之前。當BeforeUpdate被取消時,acCmdSaveRecord上的「No Current Record」錯誤
我有點新使用BeforeUpdate
所以我不確定是否正確使用它;這裏是我的BeforeUpdate
代碼:
Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Me.[First Name]) Or IsNull(Me.LastName) Or IsNull(Me.DateOfBirth) Or IsNull(Me.CourseStartDate) Then
MsgBox "Before the enrolment can be saved, you must provide:" & vbCrLf & vbCrLf _
& "- First Name" & vbCrLf _
& "- Last Name" & vbCrLf _
& "- Date of Birth" & vbCrLf _
& "- Start Date" & vbCrLf & vbCrLf _
& "You must also attach a course. This can be done by selecting " _
& "the appropriate course in the Prospectus Search and clicking " _
& "the Use Prospectus Code button." & vbCrLf & vbCrLf _
& "If your course is not currently in the prospectus, you can " _
& "add it first by clicking the Add Course button.", vbOKOnly Or vbInformation
Cancel = True
Else
Me!EnrolmentID = "Enr" & Format(Me!ID, String(12 - Len("Enr"), "0"))
End If
End Sub
所以這基本上是測試以查看是否某些領域已經留空,如果他們被留爲空白,則顯示一個消息框,顯示哪些領域需要的數據,然後更新被取消。否則,它會分配一個自定義主鍵並允許更新記錄。
它通過聲明「無當前記錄」並突出顯示RunCommand acCmdSaveRecord
代碼行取消更新時拋出錯誤。
我需要做些什麼來避免錯誤?我也試過Me.Dirty = False
,但仍然得到相同的錯誤。
@Johnny骨骼:
這裏有一個簡單的測試,我對你給我的答案嘗試:
Public ShouldRun As Boolean
Private Sub Command7_Click()
If ShouldRun = True Then
MsgBox ShouldRun
RunCommand acCmdSaveRecord
End If
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Me.Field1) Or IsNull(Me.Field2) Then
MsgBox "This is the true"
ShouldRun = False
Else
MsgBox "This is the false"
ShouldRun = True
End If
End Sub
基本上沒有任何的MsgBox
功能被解僱並且記錄正在保存,無論字段是否留空。我試過這個作爲測試,因爲我的真實代碼中的MsgBox
也沒有在BeforeUpdate事件中觸發。雖然..不明白爲什麼..如果用戶離開其中一個領域空白這應該觸發BeforeUpdate事件中的if語句的真正部分,對吧?
我能想到的唯一的事情是,前事件沒有被RunCommand acCmdSaveRecord
觸發,儘管MSDN saying:
「如果你再移動到另一條記錄或保存記錄,窗體的BeforeUpdate事件不發生。」
不知道這裏的訂單是什麼...... VBA運行RunCommand acCmdSaveRecord
,然後BeforeUpdate事件?如果是這種情況,那麼ShouldRun
變量在第一步(RunCommand acCmdSaveRecord
)將不會有任何分配,因爲它只在第二步(BeforeUpdate)得到。
您在什麼情況下調用RunCommand acCmdSaveRecord? – pteranodon
命令按鈕的OnClick事件。 –
如果看起來'Before Update'事件未觸發,請在設計視圖中打開表單,並檢查表單的屬性頁面以確保它在'Before Update'事件中表示'[Event Procedure]'。 (有時VBA代碼存在,但從表單到代碼的鏈接不存在。) –