2017-05-06 23 views
0

好吧我有一些有趣的互動正在進行,我想從我的經驗豐富的VBA貓的一些建議,以幫助我看看是否有一種更優雅的方式來處理我的情況。之前更新事件難題訪問VBA

詳情:

  1. 有一個表單上的複選框。該複選框被綁定到一個表格。
  2. 在原始窗體上的子窗體上有一個組合框。
  3. 在主窗體上的beforeupdate事件中,有數據驗證檢查Checkbox是否爲True,然後組合框不能爲null。這旨在防止用戶切換記錄而不執行所需的更新。

所以問題是,我需要能夠強制執行數據完整性以及儘可能不妨礙UI流。值得注意的是,在beforeupdate事件中我不能使用Cancel = True,因爲當你嘗試將焦點切換到子表單時,beforeupdate事件觸發,這顯然會在UI Flow中創建一個INF鎖定。另一個問題是更新事件觸發後,複選框值被寫入表中。取消選中複選框最終會創建另一個排序循環。

我到目前爲止的解決方案:

在之前更新事件

If Checkbox = True and IsNull(Me!ComboBox) = True Then 
    lastRecord = Me.CurrentRecord 
    chkBool = True 
end if 

在Form_Current事件

currRecord = Me.CurrentRecord 

If currRecord <> lastRecord And chkBool = True Then 
    DoCmd.GoToRecord acDataForm, "form", acGoTo, lastRecord 
    GoTo Exit_Form_Current 
ElseIf currRecord = lastRecord And chkBool = True Then 
    'do stuff 
    vbSql = "Update Statement" 
    DoCmd.RunSQL vbSql 
    chkBool = False 
    Me.Refresh 
End If 

有沒有更好的方式來處理呢?或者,我是如何處理好這種工作的呢?可悲的是我不能重新設計,以避免它由於子表單需要是一個連續的子表單。

回答

0

首先,你需要檢查正確:

If Me!Checkbox = True And IsNull(Me!ComboBox) Then 
    lastRecord = Me.CurrentRecord 
    chkBool = True 
End If 

然後評估如何與第二一段代碼一起工作。

+0

嗯,我沒有我只是張貼psuedo代碼以供參考。 –

0

你說:「在主窗體上的beforeupdate事件中,有數據驗證檢查Checkbox是否爲True,然後組合框不能爲null。」一種方法是不要等到主窗體上的beforeupdate事件;檢查複選框後立即進行檢查。如果組合框爲空,則不允許檢查發生;首先強制用戶進入子窗體。這可能會帶來其他問題,但...