2014-06-17 41 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修正后,编辑这些记录不再启用保存按钮。