如何在 Microsoft Access 中从组合框选择移动到特定记录

中等:需要基本的宏、编码和互操作性技能。

本文适用于 Microsoft Access 数据库 (.mdb) 文件或 Microsoft Access 数据库 (.accdb) 文件。

摘要

本文介绍基于组合框中的选择移动到特定记录的四种方法。 方法如下:

  • 在组合框的 AfterUpdate 事件中,执行使用 FindFirst 方法的代码。
  • 在组合框的 AfterUpdate 事件中,调用重新查询窗体的 Filter 属性的宏。
  • 使用窗体/子窗体,在main窗体上使用组合框,以及子窗体中的数据,由子窗体控件的 LinkMasterFields 和 LinkChildFields 属性绑定。
  • 窗体基于联接两个表的查询,然后使用 AutoLookup 技术将组合框绑定到控制联接的字段。

本文的“更多信息”部分概述了这四种方法,它们基于 Northwind 示例数据库。

更多信息

Microsoft 提供的编程示例仅用于进行说明,而不提供明示或默示担保。 这包括但不限于适销性或对特定用途的适用性的默示担保。 本文假设您熟悉正在演示的编程语言和用于创建和调试过程的工具。 Microsoft 支持工程师可以帮助解释特定过程的功能,但他们不会修改这些示例以提供新增功能或构建步骤以满足你的特定需要。

注意

如果按照此示例中的步骤操作,则会修改示例数据库Northwind.mdb。 可能需要备份 Northwind.mdb 文件,并在数据库副本上执行以下步骤。

下表比较了这四种方法) 的功能 (优点和缺点:

方法 1 2 3 4
无需代码/宏 x
不需要子窗体 x x
可以滚动到其他记录 x x
不需要查询 x x x x
可以编辑记录 x x x x
在其他模式下打开窗体 x

备注

这些方法也可以应用于文本框。

方法 1

  1. 创建一个名为 Products 的表,其中包含 ProductID 字段和 ProductName 字段。

  2. 使用 “自动窗体:列式向导” 创建基于 Products 表的新窗体,然后将该窗体另存为 frmComboTest。

    若要在 Microsoft Office Access 2003 和早期版本的 Access 中执行此操作,请执行以下步骤:

    1. “数据库”窗口中,单击“对象”下的“窗体”。
    2. 在“数据库”窗口工具栏上单击“ 新建 ”。
    3. 在“ 新建窗体 ”对话框中,单击“ 自动窗体:列式”,在下拉列表中选择“产品”表,然后单击“ 确定”。
    4. 将表单另存为 frmComboTest。

    若要在 Microsoft Office Access 2007 或更高版本中执行此操作,请执行以下步骤:

    1. 在“ 创建 ”选项卡上,单击“ 窗体” 组中的“ 窗体 向导”。
    2. 在“ 从向导 ”对话框中,选择下拉列表中的“产品”表。
    3. 选择要在新窗体中看到的字段,然后单击“ 下一步”。
    4. 选择 Columnar 选项以设置窗体的布局,然后单击“ 下一步”。
    5. 键入 frmComboTest 作为窗体标题,然后单击 “完成”。
  3. 使用 组合框向导 添加未绑定的组合框。 为此,请按照下列步骤操作:

    1. 在“设计”视图中打开 frmComboTest 窗体。
    2. 在工具栏中,确保已选择 “控件向导 ”。

    备注

    在 Access 2007 或更高版本中,确保在“设计”选项卡上的“控件”组中选择了“使用控件向导”。

    1. 在 frmComboTest 窗体上创建组合框。

    备注

    在 Access 2007 或更高版本中,单击“设计”选项卡上“控件”组中的“组合框”,然后单击“frmComboTest”窗体。 在 “选择生成器 ”对话框中,单击“ 组合框向导”,然后单击“ 确定”。

    1. “组合框向导 ”对话框中, 选择“基于在组合框中选择的值在窗体上查找记录” 选项,然后单击“ 下一步”。
    2. 选择“ProductID”和“ProductName”字段,然后单击“ 下一步”。
    3. 单击“完成”

    组合框向导创建类似于以下内容的事件过程:

    VB
    Private Sub Combo0_AfterUpdate()
         ' Find the record that matches the control.
         Dim rs As Object
    
     Set rs = Me.Recordset.Clone
         rs.FindFirst "[ProductID] = " & Str(Nz(Me![Combo20], 0))
         If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    End Sub
    
  4. 在窗体视图中查看 frmComboTest 窗体。

    请注意,在组合框中选择产品名称时,将移至所选产品的记录。

方法 2

  1. 按照方法 1 的步骤 2 中的说明,使用 “自动窗体:列式向导 ”基于 Products 表创建一个新窗体,然后将该窗体另存为 frmComboTest2。

  2. 在 frmComboTest2 窗体的“属性表”页上,将“数据”选项卡上的“筛选器”属性设置为 [ProductName] = Forms![frmComboTest2]![cboLookup]

  3. 添加名为 cboLookup 的未绑定组合框,然后设置控件的属性,如下所示:

    输出
    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Select [ProductName] from Products;
    BoundColumn: 1
    ColumnWidths: 1"
    AfterUpdate: mcrLocateProduct
    
  4. 创建名为 mcrLocateProduct 的以下宏:

    输出
    Action
    --------------------------------------
    SetValue
    Requery
    
    mcrLocateProduct Actions
    --------------------------------------
    SetValue
    Item: Forms![frmComboTest2].FilterOn
    Expression: True
    

    请注意,打开 frmComboTest2 窗体并从 cboLookup 组合框中选择产品名称时,筛选器将设置为该值。

方法 3

  1. 按照方法 1 的步骤 2 中的指示,使用 “自动窗体:列式向导 ”基于 Products 表创建一个新窗体,然后将该窗体另存为 frmSub。

  2. 在 frmSub 窗体的“属性表”页上,将“格式”选项卡上的“默认视图”属性设置为“单个窗体”。

  3. 创建不基于任何表或查询) 的新窗体 (,并将其另存为 frmMain。 然后,添加组合框并设置其属性,如下所示:

    输出
    Combo Box
    ----------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Products
    ColumnCount: 4
    ColumnWidths: 0";2"
    BoundColumn: 1
    
  4. 插入 frmSub 窗体的 Subform 控件。

    • 转到 “设计>子窗体/子报表”,然后取消子窗体向导。
    • 将 frmSub 从导航窗格拖放到 frmMain 窗体中。
  5. 按如下所示设置子窗体控件属性:

    输出
    Subform
    ----------------------------
    LinkChildFields: [ProductID]
    LinkMasterFields: cboLookup
    

    通过更改 cboLookup 控件中的值,Access 可确保子窗体中的记录与组合框匹配。

    Northwind 示例数据库中的 Orders 窗体演示了此方法。 “订单详细信息”子窗体由 LinkMasterFieldsLinkChildFields 属性相关。

方法 4:将 OpenForm 宏操作与 WHERE 子句一起使用

  1. 按照方法 1 的步骤 2 中的说明,使用 “自动窗体:列式向导 ”基于 Products 表创建一个新窗体,然后将该窗体另存为 frmComboTest5。

  2. 添加名为 cboLookup 的未绑定组合框,然后设置控件的属性,如下所示:

    输出
    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: SELECT [ProductID], [ProductName] FROM Products ORDER BY [ProductName];
    BoundColumn: 1
    ColumnCount: 2
    ColumnWidths: 0";1"
    
  3. 在宏生成器中,在 cboLookup 组合框的事件中创建 AfterUpdate 一个新的嵌入宏。

  4. “添加新操作” 下拉列表中,选择“ OpenForm”,然后设置以下属性:

    输出
    Form Name:   frmComboTest5
    View:        Form
    Filter Name: <leave as empty>
    Where Condition: [ID] = [Forms]![frmComboTest5]![cboLookup].value
    Data Mode: <optional>
    Window Mode: <optional>
    
  5. 保存并关闭宏。

  6. 保存并运行窗体。

更改组合框的值后,窗体将关闭并再次打开并应用筛选器。