1

我正在尝试从组合框中过滤记录,如果我选择开普敦,只有开普敦记录必须显示在子表单中,但如果我选择德班,只有德班记录必须显示在子表单中。我没有收到任何错误,但是如果我选择开普敦只有开普敦记录显示,并且一旦我选择德班,开普敦记录仍然显示它不会更改以在子表单中显示德班记录。下面是我的代码,任何帮助将不胜感激谢谢

 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
4

1 回答 1

0

只要您的表格设置正确,您就应该能够用很少/根本不用编码来做到这一点。

让我们创建一个名为 destinations 的表,并在其中放置 3 个字段:Unique ID、Townname 和 Area:示例:

身份证 | 城镇名称 | 领域

计算机断层扫描 | 开普敦 | PlaceWithinCapetown
CT | 开普敦 | 另一个地方
D | 德班 | PlaceHereAswell

依此类推。

假设您的表单上有 2 个元素。一个组合框和一个列表框。

ComboBox -城镇
列表 ListBox -城镇区域列表。

假设组合框称为 cboTowns 和 ListBox 称为 lstAreas

单击组合框,然后在 Row Source 中放置您的查询,例如:

 SELECT DISTINCT destinations.ID, destinations.TownName FROM destinations; 

在这里,我要求提供唯一 ID 和城镇名称,并将绑定列设置为 2(因此,当用户选择一个时,仅显示城镇名称),现在您的组合框填充了城镇,您会注意到城镇不止一次列出. 您需要更改查询的属性以仅允许唯一值转到行源,单击 3 个点,这需要您查询构建器选择一个空白区域,然后在右侧找到设置唯一值,将其设置为是,组合框是完全的。

现在我有了城镇列表和唯一 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 结束后。否则它不会更新任何东西。

于 2014-12-11T13:00:53.053 回答