你目前正处于脱机状态,正在等待 Internet 重新连接

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

本文的发布号曾为 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, , , stLinkCriteriaExit_SelectOrderCombo_Click:    Exit SubErr_SelectOrderCombo_Click:    MsgBox Err.Description    Resume Exit_SelectOrderCombo_ClickEnd 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 事件,打开“订单”窗体,显示选定的订单。
inf
属性

文章 ID:281870 - 上次审阅时间:11/12/2003 18:01:00 - 修订版本: 2.0

  • Microsoft Access 2002 标准版
  • kbhowto accesscs KB281870
反馈