2013-01-03 59 views
5

快速問題,希望獲得簡明明智的解決方案。在不保存更改的情況下關閉綁定表單

我有一個純粹爲數據輸入的綁定形式(不能瀏覽記錄,只能插入它們)。 我會有很多用戶搞砸了。爲了避免髒數據,我希望他們在提交記錄前確認表單是否正確。

問題是,只要我在窗體上輸入ANYING,訪問就會創建並保存一條記錄。

如果用戶點擊「提交」,我只希望記錄保存並提交。如果他們點擊關閉或退出應用程序,我不想在數據庫中部分完成記錄。

不使用未綁定的窗體並調用插入函數,是否有一個簡單的解決方案?

+1

只要沒有子窗體,就可以撤消記錄。 – Fionnuala

+0

@remou這是如何影響自動編號的?假設我在表單上有兩個併發用戶。用戶1打開表單並開始首先輸入數據。用戶2然後打開表單並自己輸入數據。用戶1決定他有比數據輸入更好的事情,並點擊'撤銷'按鈕。我猜這會導致數字上的差距(如插入然後是刪除,而不是回滾或缺乏提交?) – Scotch

+0

也檢查了這一點[:您可以有一個布爾值之前檢查更新]( http://bytes.com/topic/access/insights/891249-how-stop-bound-forms-updating-automatically)。就保持自動增量器的一致性而言,您可以在插入發生之前始終進行驗證... – bonCodigo

回答

6

自動編號是唯一的,而不是順序的。如果您需要序號,請勿使用自動編號。自動編號不應該顯示給用戶。永遠不可能依賴於任何東西,而是獨一無二的,如果你足夠混亂,甚至沒有。

Private Sub Form_BeforeUpdate(Cancel As Integer) 
If Me.AText = "Invalid" Then 
    Me.Undo 
    Cancel = True 
End If 
End Sub 

注意,與子窗體的窗體可能不具有撤銷工作,因爲該記錄上的變化致力於從子窗體的主要形式,反之亦然,這一切變得相當複雜。

+0

是的,我有一個與父窗體有着多對一關係的子窗體。如果有人要取消/撤消,我懷疑他們已經到了填寫子窗體的位置,所以這可能就足夠了。如果不是,我可以在撤消之前在相關的表上執行刪除查詢。謝謝。 – Scotch

3

Remou的方法無疑是最快的,這是另一個基於我的評論;)

Option Explicit 

Private blnGood As Boolean 

Private Sub cmdSubmit_Click() 
    blnGood = True 
    Call DoCmd.RunCommand(acCmdSaveRecord) 
    blnGood = False 
End Sub 

Private Sub Form_BeforeUpdate(Cancel As Integer) 
    If Not blnGood Then 
     Cancel = True 
     Call MsgBox(Prompt:="click submit to save the record", Title:="Before Update") 
    End If 
End Sub 
2

您可以使用下面的代碼來創建一個清晰的按鈕,以防用戶做出的錯誤,並希望以清除整個形式並重新開始。

Private Sub btnClear_Click() 
    If Me.Dirty = True Then 
    DoCmd.RunCommand acCmdUndo 
    Exit Sub 
    End If 
End Sub` 

我有時發現before_update事件行事怪異,所以我通常禁用性質的關閉(X)按鈕,並添加自己的關閉按鈕,如果他想在放棄數據,提示用戶屏幕。

Private Sub close_Click() 
Dim Answer As Integer 
If Me.Dirty = True Then 
    Dim Response As Integer 
    ' Displays a message box with the yes and no options. 
    Response = MsgBox(Prompt:="Do you wish to discard data?", Buttons:=vbYesNo) 
    ' If statement to check if the yes button was selected. 
    If Response = vbYes Then 
     DoCmd.RunCommand acCmdUndo 
     DoCmd.Close 
     Else 
     Me.Clear.SetFocus 
    End If 
Else 
    ' The no button was selected. 
    DoCmd.Close 
    End If 
End Sub 
相關問題