如何在连续表单上单击命令按钮时测试当前记录是否已更改

时间:2017-06-16 14:10:01

标签: ms-access access-vba

在ms访问中,我有一个包含2个子表单的mainform。 SubformA是一个连续的表单,带有记录标题和每个记录的透明按钮覆盖。 SubformB包含所选记录的详细信息(这是在主窗体中其他位置的tabcontrol上,模仿弹出叠加层)。

我想要发生的是:
 1.单击记录子表单A显示子表单B并将其过滤到该记录  2.浏览subformA更新中的记录,以便subformB始终显示相应的记录  3.单击子窗体上的记录A再次隐藏子窗体B,如果它是当前正在显示的记录。

但是我无法弄清楚我是如何测试当前记录是否被点击的记录因为只要我点击按钮,如果它不是当前记录,则当前事件首先触发,使其成为当前记录记录,因此总是隐藏subformB。

如果subformB上的id保持不变,我尝试使用变量来检查当前事件的开始和结束。但是,当前事件当然不会在记录没有改变的情况下触发,也就是说我需要测试这个变量。

在subformA中剥离/伪代码我试图做的事情:

Sub Form_Current
  If subformB.Visible Then set filter on subformB to ID = subfromA.ID
End Sub

Sub cmdButton_Click
  If subformB.Visible Then
    If subformB.ID = subformA.ID Then 
      Hide subformB
    Else
      'code never gets to here because the condition is always true 
      'do nothing - current event has already set the filter
    End If
  Else
    Unhide subformB
    Set filter to ID = subformA.ID
  End If
End Sub

有人能帮助我吗?感谢。

编辑:我要问的是如何根据单击命令按钮的记录的记录ID测试当前记录ID - 但是单击按钮时的记录ID当然只是采用新的当前记录ID 。因此,它将旧的当前记录ID与新的当前记录ID进行比较,问题是如何存储旧ID但是在测试条件之前阻止它再次更新。

3 个答案:

答案 0 :(得分:0)

设置模块级私有字段并将其值设置为值:

a)所选ID(如果是新的)。
b)如果提供相同的ID,则为零(单击按钮两次)。

Private mSelectedId as Long

Sub cmdButton_Click
    If Me!ID = mSelectedId  Then
        mSelectedId = 0
    Else
        mSelectedId = Me!ID
    End If

    FilterSubFormB
End Sub

您可以展开它以过滤subformB:

Private Sub FilterSubFormB()
    With Me.Parent.SubformB.Form
        .Filter = "ID=" & mSelectedId 
        .FilterOn = True
    End With
End Sub

答案 1 :(得分:0)

检查可能适用于您正在执行的操作的ID的替代方法是: 1.向表单添加隐藏的未绑定文本框。 2.检查发生后,使用click事件在文本框中存储ID。 3.不检查点击事件代码中的ID,而是检查文本框中保存的值。未经测试,但是这样的事情。

    Sub cmdButton_Click
    If subformB.Visible Then
         If subformA.ID = HiddenTextBox Then 
            Hide subformB
         Else

         End If
     End If
     Else
         Unhide subformB
         Set filter to ID = subformA.ID
     End If
     HiddenTextBox = subformA.ID
    End Sub

答案 2 :(得分:0)

您不必过滤其他子表单,只需将记录设为当前记录。

本文将向您展示如何 - 它对用户来说可能更直观一些:

Synchronizing Multiple Subforms in Access