返回首页
当前位置: 主页 > 其他教程 > Access教程 >

access绑定到存储过程或函数的窗体或报表没有应用WHERE条件

时间:2012-02-18 01:17来源:Office教程学习网 www.office68.com编辑:麦田守望者

本文只适用于 Microsoft Access 项目 (.adp)。
症状当您尝试使用其他对象(例如其他 Access 窗体)上显示的值来过滤 Access 窗体或报表时,该过滤器没有得到应用。 解决方案用户可以使用若干种方法来解决无法过滤绑定到存储过程或函数的窗体或报表的问题。这些解决方法的大多数都涉及到将存储过程或函数替换为其他某种类型的记录源,例如表、视图或 SQL 语句。

但是,下面的解决方法向您说明了如何继续使用存储过程作为窗体的记录源,同时又能成功地实现 WHERE 条件或过滤器。

小心:执行本示例中的步骤将会修改示例 Access 项目 NorthwindCS.adp。您可能需要备份 NorthwindCS.adp 文件,并在项目副本上执行这些步骤。

打开示例项目 NorthwindCS.adp。 在“数据库”窗口中,单击以突出显示 Categories 表,然后单击插入菜单上的自动窗体。 在设计视图中打开窗体。 从主窗体中删除标有 Table.Products 的子窗体对象,然后向该窗体中添加一个命令按钮。如果向导启动,请单击取消。 为命令按钮设置下列属性:Name:cmdFilterProducts Caption:Filter Products On Click:[Event Procedure] 将该命令按钮的 onClick 属性设置为以下事件过程:Private Sub cmdFilterProducts_Click() DoCmd.OpenForm "Products", acNormal, , , acFormEdit, acWindowNormal End Sub 在文件菜单上,单击“关闭并返回到 Microsoft Access”。 在文件菜单上,单击保存,然后将窗体另存为 Categories1。 在“数据库”窗口中,单击查询,然后单击新建。 在新建查询对话框中,单击创建文本存储过程,然后单击确定。 键入或粘贴以下 Transact-SQL 语句,然后关闭并使用 spProducts 的默认名称保存该过程:CREATE PROCEDURE spProducts @CatID int AS SELECT * FROM Products WHERE CategoryID = @CatID RETURN 在设计视图中打开 Products 窗体,然后将 Record Source 属性从 Products 更改为 spProducts。 向下滚动到窗体的 InputParameters 属性,然后为该属性分配以下值: @CatID int = Forms![Categories1]![CategoryID]
关闭并保存 Products 窗体,然后打开 Categories1 窗体。 浏览到类别名称 Confections,然后单击 Filter Products(过滤产品)按钮。注意,Products 窗体仅打开并显示那些类别为 Confections 的产品。 状态这种现象是设计所导致的。 更多信息通常,Access 用户希望限制在 Access 窗体或报表中显示的记录的数量。达到此目标的一个方法是:使用 WHERE 条件过滤窗体或报表中的记录,并使用其他某个对象来提供条件值。例如,一个窗体可以显示一个条件值,其他窗体将使用该条件值以便限制所显示的记录的数量。但是,如果您尝试过滤的窗体将一个存储过程或函数作为其记录源,则该过滤器被忽略。下列步骤阐述了这种现象。

小心:执行本示例中的步骤将会修改示例 Access 项目 NorthwindCS.adp。您可能需要备份 NorthwindCS.adp 文件,并在项目副本上执行这些步骤。

重现问题的步骤 按照本文此前“解决方法”部分中的第 1 到 5 步进行操作。 将该命令按钮的 onClick 属性设置为以下事件过程:Private Sub cmdFilterProducts_Click() DoCmd.OpenForm "Products", acNormal, , "[CategoryID] = " & Me!CategoryID, acFormEdit, acWindowNormal End Sub 在文件菜单上,单击关闭并返回到 Microsoft Access。 在文件菜单上,单击保存,然后将窗体另存为 Categories1。 在窗体视图中打开窗体。 浏览到类别名称 Confections,然后单击 Filter Products(过滤产品)按钮。注意,Products 窗体仅打开并显示那些类别为 Confections 的产品。 关闭 Products 和 Categories1 这两个窗体。 在“数据库”窗口中,单击查询,然后单击新建。单击 创建文本存储过程,然后单击确定。 键入或粘贴以下 Transact-SQL 语句,然后关闭并使用 spProducts 的默认名称保存该过程:CREATE PROCEDURE spProducts AS SELECT * FROM Products RETURN 在设计视图中打开 Products 窗体,然后将 RecordSource 属性从 Products 更改为 spProducts。 关闭并保存 Products 窗体,然后打开 Categories1 窗体。 浏览到类别名称 Confections,然后单击 Filter Products(过滤产品)按钮。请注意,Products 窗体打开并显示所有产品,而不只是 Confections 类别中的那些产品。

------分隔线----------------------------
标签(Tag):access access数据库 数据库 access视频教程 access教程 access技巧 access下载
------分隔线----------------------------
推荐内容
猜你感兴趣