在子窗体中设置过滤器

Posted

技术标签:

【中文标题】在子窗体中设置过滤器【英文标题】:Setting Filter in Subform 【发布时间】:2014-02-02 07:14:51 【问题描述】:

我有一个主窗体“属性”,它有两个子窗体,其中一个显示该属性中的房间,另一个显示每个房间中的居住者。

当您更改属性时,房间会在第一个子表单中发生变化,该子表单是连续的。当您向下滚动房间子表单时,使一个新房间处于活动状态,我希望居住者在第二个子表单中进行更改。

到目前为止,我已经在“属性”主窗体的当前事件中写了这个:

Dim dblRoomID As Double
dblRoomID = Forms.Properties.frmRoomsByPropertySubform.Form.room_id

这成功地从第一个子表单中提取了 Room_ID。

现在我需要使用那个 Room_ID 在第二个子表单中设置一个过滤器,它当前显示所有属性的所有占用者,但有一个 Room_ID 字段。

我看不到

Forms.Properies.frmStudentsRoomQuickview.Form.Filter = "[Room_ID]=" & dblRoomID

或 docmd.applyfilter 工作 - 我一直在假设这是因为活动表单需要是 'frmstudentRoomQuickview' 才能工作 - 但我不明白为什么简单地设置 .filter不会工作。

编辑:我应该补充一点,我不能在“房间”表单中使用子表单,因为房间表单需要是连续的。

编辑 2:

Private Sub Form_Current()
Dim dblRoomID As Double
    If IsNull(Forms.Properties.frmRoomsByPropertySubform.Form.room_id) Then
        Forms.Properties.frmRoomsByPropertySubform.Visible = False
        Forms.Properties.frmStudentsRoomQuickview.Visible = False
    Else
        Forms.Properties.frmRoomsByPropertySubform.Visible = True
        Forms.Properties.frmStudentsRoomQuickview.Visible = True
        dblRoomID = Forms.Properties.frmRoomsByPropertySubform.Form.room_id
        Call frmStudentsRoomQuickview_Enter(dblRoomID)
    End If

End Sub

Private Sub frmStudentsRoomQuickview_Enter(dblRoomID)
Forms.Properties.frmStudentsRoomQuickview.Filter = "[room_id] = " & dblRoomID
Forms.Properties.frmStudentsRoomQuickview.FilterOn = True
Forms.Properties.frmStudentsRoomQuickview.Requery
Debug.Print Screen.ActiveForm.name
End Sub

我现在收到“过程声明与具有相同名称的事件或过程的描述不匹配”错误

【问题讨论】:

【参考方案1】:

您是否尝试打开过滤器?

Forms.Properies.frmStudentsRoomQuickview.Form.Filter = "[Room_ID]=" & dblRoomID
Forms.Properies.frmStudentsRoomQuickview.Form.FilterOn = True

编辑:

看到您的更新,我明白了这个问题。问题是您不能将参数传递给 _Enter 事件。你必须这样做:

Dim dblRoomID As Double

Private Sub Form_Current()

    dblRoomID = 0

    If IsNull(Forms.Properties.frmRoomsByPropertySubform.Form.room_id) Then
        Me.frmRoomsByPropertySubform.Visible = False
        Me.frmStudentsRoomQuickview.Visible = False
    Else
        Me.frmRoomsByPropertySubform.Visible = True
        Me.frmStudentsRoomQuickview.Visible = True
        dblRoomID = Me.frmRoomsByPropertySubform.Form.room_id
        DoStudentsRoomQuickViewFilter
    End If

End Sub

Private Sub DoStudentsRoomQuickViewFilter()
    If dblRoomID <> 0 Then
        Me.frmStudentsRoomQuickview.Form.Filter = "[Room_ID] = " & dblRoomID
        Me.frmStudentsRoomQuickview.Form.FilterOn = True
        Me.frmStudentsRoomQuickview.Requery
        Debug.Print Screen.ActiveForm.Name
    End If
End Sub

Private Sub frmStudentsRoomQuickview_Enter()
    DoStudentsRoomQuickViewFilter
End Sub

【讨论】:

嗨,我试过了,我会用我写的确切代码更新我原来的帖子。 我已经编辑了我的答案@7thGalaxy - 看看这是否适合你。 它已停止“过程声明与具有相同名称的事件或过程的描述不匹配” - 但它仍然没有设置过滤器 - 你不必将变量 dblRoomID 传递给 DoStudentsRoomQuickViewFilter() 吗?否则 dblRoomID 0 将永远为真?当我传递它时,我收到“对象不支持此属性或方法”错误 @7thGalaxy - 我已经在 Subs 之外声明了 dblRoomID,就在我的代码顶部。这意味着我可以访问此表单的任何代码中的变量。就您的问题而言,我可以建议更换“Forms.Properties”。与我一起。”?请参阅上面的编辑。 太棒了 - 成功了 - 只是想知道为什么需要它?【参考方案2】:

检查“属性”的拼写...

Forms.Properies.frmStudentsRoomQuickview.Form.Filter = "[Room_ID]=" & dblRoomID
Forms.Properies.frmStudentsRoomQuickview.Form.FilterOn = True

【讨论】:

以上是关于在子窗体中设置过滤器的主要内容,如果未能解决你的问题,请参考以下文章

在弹簧过滤器中设置视图名称

如何在 Spring Boot 中设置过滤器链?

在wireshark中设置数据包长度过滤器

在 servlet 过滤器中设置托管 Bean 的值。 [关闭]

基于主窗体中的字段访问2007过滤器子窗体?

OBIEE:如何在保存的过滤器中设置“提示”值