2014-06-17 42 views
2

我有一個彈出式窗口,其中包含一個清除數據按鈕。它運行撤消命令。在Access 2007表格上沒有觸發髒事件

Form_Current事件將此按鈕的enable屬性設置爲False。

Form_Dirty事件將此按鈕的啓用屬性設置爲True。

即使將數據輸入到表單中,該按鈕的屬性始終設置爲False。我認爲這是因爲我的Form_Load事件正在填充兩個字段。一個從主窗體傳遞爲OpenArgs,另一個是基於OpenArgs值計算的唯一ID。

有關如何讓Dirty事件在這些情況下激活的任何建議?如果不是,那麼可能採取另一種方法?

在此先感謝。下面

代碼:

Private Sub cmdUndoChanges_Click() 

    CustID_temp = Me!CustID 
    FacNo_temp = Me!Unique_ID 

    DoCmd.RunCommand acCmdUndo 

    Me!CustID = CustID_temp 
    Me!Unique_ID = FacNo_temp 

End Sub 

Private Sub Form_Current() 
    Me!cmdUndoChanges.Enabled = False 
End Sub 

Private Sub Form_Dirty(Cancel As Integer) 
    Me!cmdUndoChanges.Enabled = True 
End Sub 

Private Sub Form_Load() 
Dim test As Integer 

    Me!CustID = OpenArgs 

    test = DCount("Unique_ID", "tbl_Table2", "CustID = '" & Me!CustID & "'") 
    If IsNull(Me!UNIQUE_No) Then 
     test = test + 1 
     Me!Unique_ID = CustID & "-" & test 
     MsgBox "No Previous Data" 
    Else 
    ' these will be turned back on when the user selects the 
    ' modify data button or add new data button. 

     For Each ctl In Me.Controls 
     Select Case ctl.ControlType 
     Case acTextBox, acComboBox, acOptionGroup, acCheckBox 
      ctl.Locked = True 
      ctl.BackColor = 15066597 
      Box40.BackColor = 15066597 
     End Select 
     Next ctl 
    End If 

MsgBox Me!Unique_ID 
End Sub 
+0

在'Form_Dirty'中放置一個斷點以確認事件根本不會觸發。如果它永遠不會觸發,這可能是因爲訪問偶爾會「失去跟蹤」事件過程。如果您返回到表單的屬性表並單擊On Dirty屬性框最右側的3個點,則可以提醒有關現有事件過程的Access。 – HansUp

回答

0

你試過Form_BeforeInsert(),而不是Form_Dirty()?

0

我發現另一種情況,Form_Dirty事件永遠不會觸發,困難的方式。我想我會在這裏添加它,因爲這是「不解僱」問題的最佳搜索結果。

如果Form_Load函數執行任何操作來更改現有記錄的值,則表單將立即設置爲dirty,顯然在觸發事件的邏輯開始運行之前。因此,如果表單上的其他數據發生更改,將永遠不會發生事件。

我們有一個「智能」保存按鈕,它被禁用,直到Form_Dirty被觸發。在爲帶有垃圾字段的舊記錄添加了Form_Load修正後,編輯這些記錄不再啓用保存按鈕。