我正在尝试从组合框中过滤记录,如果我选择开普敦只有开普敦记录必须在子表单中显示但如果我选择德班只有德班记录必须显示在子表单中。我没有得到任何错误,但如果我选择开普敦只有开普敦的记录显示,一旦我选择德班,开普敦的记录仍然显示它不会改变显示德班记录在子表格中。下面是我的代码任何帮助将非常感谢谢谢
If Me.Combo0.Value Then
strFilters = "Sites = 'Cape Town'"
DoCmd.OpenForm "Home"
Forms!Home![Plant Transaction subform].Form.Filter = strFilters
Forms!Home![Plant Transaction subform].Form.FilterOn = True
ElseIf Me.Combo0.Value Then
strFilters = "Sites = 'Durban'"
DoCmd.OpenForm "Home"
Forms!Home![Plant Transaction subform].Form.Filter = strFilters
Forms!Home![Plant Transaction subform].Form.FilterOn = True
End If
答案 0 :(得分:0)
只要您的表格设置正确,您就可以在很少/不编码的情况下执行此操作。
让我们创建一个名为destinations的表,并将3个字段放入:唯一ID,Townname和Area:示例:
等等等等。ID | TownName |区域
CT | CapeTown | PlaceWithinCapetown
CT | CapeTown | AnotherPlace
D |德班| PlaceHereAswell
让我们假设您的表单上有2个元素。组合框和列表框。
ComboBox - 城镇名单
ListBox - 城镇内的区域列表。
让我们说组合框被称为cboTowns而ListBox被称为lstAreas
点击组合框并在行来源中放置您的查询,例如:
SELECT DISTINCT destinations.ID, destinations.TownName FROM destinations;
在这里,我要求输入唯一ID和城镇名称,并将我的绑定列设置为2(所以当用户选择一个时,只有城镇名称显示),现在您的组合框填充了城镇,您将注意到列出的城镇不止一次。您需要更改查询的属性以仅允许唯一值转到行源,单击3个点这将使您查询构建器选择一个空白区域,在右侧找到设置唯一值将此设置为是并且组合框是完整。
现在我有了Towns列表和唯一ID,我们可以让列表框开始工作。如果您在上面详述的1个表中列出所有信息之前继续前进,则查找数据会更容易。如果超过2个表,则需要在Access中创建关系。继续前进。
完成后,请转到列表框,然后在行源中再次输入以下内容:
SELECT DISTINCT destinations.ID, destinations.Areas FROM destinations WHERE (((destinations.ID)=[Forms]![FormName]![cboTowns])) ORDER BY destinations.Areas;
所以我在这里告诉它寻找通过组合框设置的唯一ID,然后查找附加到该唯一ID的区域。
每次用户从下拉框中选择一个条目时,列表框会立即更新。无需其他编码。如果您有更多信息并需要显示其他内容,则可以使用DLookup功能填充您可能拥有的任何其他字段。
我还要说,如果你不想重新构建你所提供的代码,我注意到你并没有重新考虑任何东西。如果要刷新表单,您将在结束后需要Me.requery。否则它不会更新任何内容。