【问题标题】:Filtering subform data off of textbox entry on parent form从父表单上的文本框条目中过滤子表单数据
【发布时间】:2020-09-07 09:44:11
【问题描述】:

我有一个相当简单的 Access 2013 db,由两个表组成,一个查询、表单和子表单。这些表是 tblDeliveries 和 tblCustomers。查询是 qryDeliveriesFull。表单是 frmCustomers 和 sbfmDeliveries。 frmCustomers 是一种拆分形式,而 sbfrmDeliveries 是这种形式。所有客户信息、姓名、地址都在父表单上,所有交付信息都在子表单上。子表单只是一个带有信息文本框的表单。父表单的数据表部分只是我一次查看数据库中所有订单的一种方式。在主窗体的标题中是一个带有以下代码的搜索框:

Private Sub txtNameFilter_KeyUp(KeyCode As Integer, Shift As Integer)

On Error GoTo errHandler

Dim filterText As String

If Len(txtNameFilter.Text) > 0 Then
   filterText = txtNameFilter.Text
   Me.Form.Filter = "[tblDeliveries].[DeliveryID] LIKE '*" & filterText & "*' OR [tblCustomers].[FirstName] LIKE '*" & filterText & "*'"
   Me.FilterOn = True

   txtNameFilter.Text = filterText
   txtNameFilter.SelStart = Len(txtNameFilter.Text)

Else

   Me.Filter = ""
   Me.FilterOn = False
   txtNameFilter.SetFocus

End If

Exit Sub

errHandler:

MsgBox Err.Number & " - " & Err.Description, vbOKOnly, "Error ..."

End Sub

当用户在 txtNameFilter 中输入信息时,数据表会筛选出包含该信息的记录,并且父表单上的文本框会使用该人名下的第一条记录中的信息进行填充。我想不通的是如何让子表单中的文本框也发生变化。示例:客户 john 有 20 个订单。寻找 1 个特定的订单号,因此我将该订单号输入到 txtname 过滤器中。从过滤器到该顺序的父数据表,但是子表单,尽管父表单正确选择了适当的名称并转到了 john 的记录,但它并没有一直过滤到适当的顺序。不确定这是因为 DeliveryID 在子表单上还是其他原因。我四处搜索,但无法弄清楚如何让它做我想做的事情,即子表单上的信息也会根据放入 txtNameFilter 的文本进行过滤。

【问题讨论】:

  • 通常,子表单过滤器由主/子链接属性控制。只有与主表单上的主键关联的记录才会显示在子表单上,在这种情况下似乎是客户 ID。如果您想对子表单进行额外的过滤,这意味着将条件应用于子表单的 Filter 属性或 GoToRecord 代码。

标签: vba ms-access


【解决方案1】:

您可以通过同样过滤子表单来效仿:

   Me.Form.Filter = "[tblDeliveries].[DeliveryID] LIKE '*" & filterText & "*' OR [tblCustomers].[FirstName] LIKE '*" & filterText & "*'"
   Me.FilterOn = True

   Me.[SubformName].Form.Filter = "What ever the subform filter would be here LIKE '*" & filterText & "*'"
   Me.[SubformName].FilterOn = True

...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多