ACC2002:如何在 Access 项目中使用带参数的组合框

文章翻译 文章翻译
文章编号: 281870 - 查看本文应用于的产品
本文的发布号曾为 CHS281870
中级用户:要求具备基本宏、编码和互操作技能。

本文只适用于 Microsoft Access 项目 (.adp)。

展开全部 | 关闭全部

本文内容

概要

组合框提供了向用户显示选项列表的一种好方法。如果组合框的行来源需要基于一个表或查询中的记录子集,那么就可以添加一个 WHERE 子句以限制选项数量。

本文中举的例子在 NorthwindCS.adp 示例项目中向“客户”窗体添加组合框。组合框列出当前客户所发出的订单。当选定它时,“订单”窗体打开,显示选定订单的详细信息。

可以使用四种不同方法来产生客户所发出的匹配订单的列表。这些方法使用 Access 项目 (.adp) ,后者将 Microsoft SQL Server 2000 作为数据源。在下一节将对这些方法作详细描述。

更多信息

创建组合框



本节将讲述如何在“客户”窗体上首先创建组合框,以便显示当前客户的订单列表。
  1. 在“设计视图”中打开“客户”窗体。
  2. 在工具箱中,单击控件向导,然后向窗体中添加组合框。
  3. 在向导的第一页,选择查找表或查询中的值,然后单击下一步
  4. 在向导的第二页,单击“订单”表,然后单击下一步
  5. 在向导的第三页,添加“订单 ID”、“客户 ID”和“订购日期”作为组合框中的字段,然后单击下一步
  6. 在向导的第四页,单击清除隐藏键列,然后收缩“客户 ID”列,将该列隐藏起来。单击下一步
  7. 在向导的第五页,再次单击下一步,接受“订单 ID”作为在数据库中存储或使用的字段。
  8. 在向导的第六页,选择记住该值以供将来使用,然后单击下一步
  9. 在向导的最后一页,标记组合框选择订单,然后单击完成
  10. 打开组合框的属性页,然后将组合框的名称改为 SelectOrderCombo
  11. 将组合框的 OnClick 属性设为下列事件过程:
    Private Sub Command2_Click()
    On Error GoTo Err_SelectOrderCombo_Click
        Dim stDocName As String
        Dim stLinkCriteria As String
    
        stDocName = "Orders"
    
        stLinkCriteria = "[OrderID]=" & Me![SelectOrderCombo]
        DoCmd.OpenForm stDocName, , , stLinkCriteria
    
    Exit_SelectOrderCombo_Click:
        Exit Sub
    
    Err_SelectOrderCombo_Click:
        MsgBox Err.Description
        Resume Exit_SelectOrderCombo_Click
    
    End Sub

添加代码以刷新组合框



本节讲述可以用来刷新组合框的方法。选择下列四种方法之一,然后向组合框的 OnEnter 事件添加适当的代码。

对于第 1 种和第 2 种方法,每次选定组合框时,OnClick 事件就会将行来源复位,以使组合框仅显示那些与当前客户匹配的订单。

备注:由于“客户 ID 字段”是文本字段,因此单引号 (') 必须在窗体引用的周围排成串。例如,生成的 WHERE 子句从:
WHERE CustomerID = '" & Forms![Customers]![CustomerID] & "'"
转换为:
WHERE CustomerID = 'ALFKI'

方法 1:使用特殊选择



将组合框的 OnEnter 属性设为下列事件过程:
Me.SelectOrderCombo.RowSource = "SELECT TOP 100 PERCENT OrderID, CustomerID, OrderDate FROM Orders WHERE " _
     & "CustomerID = '" & Forms![Customers]![CustomerID] & "' ORDER BY OrderDate DESC"

方法 2:使用 SQL Server 视图



  1. 在“视图设计器”中创建新视图,然后从“订单”表中选择“订单 ID”、“客户 ID”和“订购日期”字段。若要对订单列表从最新订单到最旧订单进行排序,请将“订购日期”字段的排序类型设为降序
  2. 将视图保存为 vwCustomerOrders。
  3. 将组合框的 OnEnter 属性设为下列事件过程:
    Me.SelectOrderCombo.RowSource = "SELECT * FROM vwCustomerOrders WHERE CustomerId = '" & Forms![Customers]![CustomerID] & "'"
对于方法 3 和 4,组合框 Requery 方法在发生 OnEnter 事件时调用,以重新执行存储过程或 SQL 函数,返回匹配的记录。在这些举例中,参数定义为在条件中使用 @ControlName 的窗体上的控件。Access 自动评估条件并请求匹配的记录。

在下面的举例中,组合框返回当前客户的所有订单列表。由于客户 ID 文本框中包含当前客户的 ID,因此您可以在存储过程或 SQL 函数条件中直接引用客户 ID 文本框。

方法 3:使用 SQL Server 存储过程



  1. 在图形设计器中创建新过程。
  2. 选择“订单”表,然后向存储过程中添加“订单 ID”、“客户 ID”和“订购日期”字段。
  3. 输入 @CustomerID 作为“客户 ID”字段的条件,按降序对“订购日期”字段进行排序。
  4. 将存储过程保存为 spCustomerOrders,然后将它关闭。
  5. 将 spCustomerOrders 存储过程设为组合框的行来源。

    备注:存储过程设计器将创建并保存下列 SQL 语句:
    CREATE PROCEDURE dbo.spCustomerOrders
      (@CustomerID varchar(5))
      AS SELECT OrderID, CustomerID, OrderDate
      FROM   dbo.Orders
      WHERE  (CustomerID = @CustomerID)
      ORDER BY OrderDate DESC
  6. 将组合框的 OnEnter 属性设为下列事件过程:
    Me.SelectOrderCombo.Requery

方法 4:使用 SQL Server 2000 函数



只有当 Access 项目使用 SQL Server 2000 或更高版本作为数据源时,才可使用这种方法。
  1. 在图形设计器中创建函数。
  2. 选择“订单”表,然后向存储过程中添加“订单 ID”、“客户 ID”和“订购日期”字段。
  3. 输入 @CustomerID 作为“客户 ID”字段的条件,按降序对“订购日期”字段进行排序。
  4. 将函数保存为 fnCustomerOrders,然后将它关闭。
  5. 将 fnCustomerOrders 函数设为组合框的行来源。

    备注:存储过程设计器将创建并保存下列 SQL 语句:
    CREATE FUNCTION dbo.fnCustomerOrders
      (@CustomerID varchar(5))
      RETURNS TABLE
      RETURN ( SELECT TOP 100 PERCENT OrderID, CustomerID, OrderDate
      FROM   dbo.Orders
      WHERE  (CustomerID = @CustomerID)
      ORDER BY OrderDate DESC )
  6. 将组合框的 OnEnter 属性设为下列事件过程:
    Me.SelectOrderCombo.Requery
若要测试这些方法,请打开窗体,然后从“选择订单”组合框中进行选择。OnEnter 事件再次查询组合框,自动生成一个当前客户的订单列表。当选定订单时,会执行组合框的 OnClick 事件,打开“订单”窗体,显示选定的订单。

属性

文章编号: 281870 - 最后修改: 2003年11月12日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft Access 2002 标准版
关键字:?
kbhowto accesscs KB281870
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com