从父表单的文本框输入中过滤子表单数据。

问题描述 投票:0回答:1

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

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过滤器中。 在父表单上的Datasheet从过滤到该订单,但是子表单,虽然父表单正确地选择了合适的名称,并转到了john的记录,但并没有一直过滤到合适的订单。 不知道是因为子表单上有DeliveryID还是其他原因。 我找了一圈,但不知道如何让它做我想做的事情,也就是子表单上的信息也会根据放到txtNameFilter中的文本进行过滤。

ms-access access-vba
1个回答
0
投票

你可以效仿,同样过滤子表单。

   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

...

© www.soinside.com 2019 - 2024. All rights reserved.