在Access 2007表单上未触发的脏事件

时间:2014-06-17 17:30:42

标签: access-vba ms-access-2007

我有一个带有清除数据按钮的弹出窗体。它运行撤消命令。

Form_Current事件将此按钮的enable属性设置为False。

Form_Dirty事件将此按钮的enable属性设置为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

2 个答案:

答案 0 :(得分:0)

您是否尝试过Form_BeforeInsert()而不是Form_Dirty()?

答案 1 :(得分:0)

我发现另一个案例,Form_Dirty事件永远不会发生,这很难。我想我会在这里添加它,因为这是“不解雇”问题的最佳搜索结果。

如果您的Form_Load函数执行任何操作来更改现有记录的值,则表单将立即设置为脏,显然是在触发事件的逻辑开始运行之前。因此,如果表单上的其他数据发生更改,将永远不会发生事件。

我们有一个“智能”保存按钮,在Form_irty触发之前一直处于禁用状态。在我为具有垃圾字段的旧记录添加了一个针对Form_Load的修正后,编辑这些记录不再启用“保存”按钮。