我有一个相当简单的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中的文本进行过滤。
你可以效仿,同样过滤子表单。
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
...