本文只適用于 Microsoft Access 項(xiàng)目 (.adp)。
癥狀當(dāng)您嘗試使用其他對(duì)象(例如其他 Access 窗體)上顯示的值來過濾 Access 窗體或報(bào)表時(shí),該過濾器沒有得到應(yīng)用。 解決方案用戶可以使用若干種方法來解決無法過濾綁定到存儲(chǔ)過程或函數(shù)的窗體或報(bào)表的問題。這些解決方法的大多數(shù)都涉及到將存儲(chǔ)過程或函數(shù)替換為其他某種類型的記錄源,例如表、視圖或 SQL 語句。
但是,下面的解決方法向您說明了如何繼續(xù)使用存儲(chǔ)過程作為窗體的記錄源,同時(shí)又能成功地實(shí)現(xiàn) WHERE 條件或過濾器。
小心:執(zhí)行本示例中的步驟將會(huì)修改示例 Access 項(xiàng)目 NorthwindCS.adp。您可能需要備份 NorthwindCS.adp 文件,并在項(xiàng)目副本上執(zhí)行這些步驟。
打開示例項(xiàng)目 NorthwindCS.adp。 在“數(shù)據(jù)庫”窗口中,單擊以突出顯示 Categories 表,然后單擊插入菜單上的自動(dòng)窗體。 在設(shè)計(jì)視圖中打開窗體。 從主窗體中刪除標(biāo)有 Table.Products 的子窗體對(duì)象,然后向該窗體中添加一個(gè)命令按鈕。如果向?qū)?dòng),請(qǐng)單擊取消。 為命令按鈕設(shè)置下列屬性:Name:cmdFilterProducts Caption:Filter Products On Click:[Event Procedure] 將該命令按鈕的 onClick 屬性設(shè)置為以下事件過程:Private Sub cmdFilterProducts_Click() DoCmd.OpenForm "Products", acNormal, , , acFormEdit, acWindowNormal End Sub 在文件菜單上,單擊“關(guān)閉并返回到 Microsoft Access”。 在文件菜單上,單擊保存,然后將窗體另存為 Categories1。 在“數(shù)據(jù)庫”窗口中,單擊查詢,然后單擊新建。 在新建查詢對(duì)話框中,單擊創(chuàng)建文本存儲(chǔ)過程,然后單擊確定。 鍵入或粘貼以下 Transact-SQL 語句,然后關(guān)閉并使用 spProducts 的默認(rèn)名稱保存該過程:CREATE PROCEDURE spProducts @CatID int AS SELECT * FROM Products WHERE CategoryID = @CatID RETURN 在設(shè)計(jì)視圖中打開 Products 窗體,然后將 Record Source 屬性從 Products 更改為 spProducts。 向下滾動(dòng)到窗體的 InputParameters 屬性,然后為該屬性分配以下值: @CatID int = Forms![Categories1]![CategoryID]
關(guān)閉并保存 Products 窗體,然后打開 Categories1 窗體。 瀏覽到類別名稱 Confections,然后單擊 Filter Products(過濾產(chǎn)品)按鈕。注意,Products 窗體僅打開并顯示那些類別為 Confections 的產(chǎn)品。 狀態(tài)這種現(xiàn)象是設(shè)計(jì)所導(dǎo)致的。 更多信息通常,Access 用戶希望限制在 Access 窗體或報(bào)表中顯示的記錄的數(shù)量。達(dá)到此目標(biāo)的一個(gè)方法是:使用 WHERE 條件過濾窗體或報(bào)表中的記錄,并使用其他某個(gè)對(duì)象來提供條件值。例如,一個(gè)窗體可以顯示一個(gè)條件值,其他窗體將使用該條件值以便限制所顯示的記錄的數(shù)量。但是,如果您嘗試過濾的窗體將一個(gè)存儲(chǔ)過程或函數(shù)作為其記錄源,則該過濾器被忽略。下列步驟闡述了這種現(xiàn)象。
小心:執(zhí)行本示例中的步驟將會(huì)修改示例 Access 項(xiàng)目 NorthwindCS.adp。您可能需要備份 NorthwindCS.adp 文件,并在項(xiàng)目副本上執(zhí)行這些步驟。
重現(xiàn)問題的步驟 按照本文此前“解決方法”部分中的第 1 到 5 步進(jìn)行操作。 將該命令按鈕的 onClick 屬性設(shè)置為以下事件過程:Private Sub cmdFilterProducts_Click() DoCmd.OpenForm "Products", acNormal, , "[CategoryID] = " & Me!CategoryID, acFormEdit, acWindowNormal End Sub 在文件菜單上,單擊關(guān)閉并返回到 Microsoft Access。 在文件菜單上,單擊保存,然后將窗體另存為 Categories1。 在窗體視圖中打開窗體。 瀏覽到類別名稱 Confections,然后單擊 Filter Products(過濾產(chǎn)品)按鈕。注意,Products 窗體僅打開并顯示那些類別為 Confections 的產(chǎn)品。 關(guān)閉 Products 和 Categories1 這兩個(gè)窗體。 在“數(shù)據(jù)庫”窗口中,單擊查詢,然后單擊新建。單擊 創(chuàng)建文本存儲(chǔ)過程,然后單擊確定。 鍵入或粘貼以下 Transact-SQL 語句,然后關(guān)閉并使用 spProducts 的默認(rèn)名稱保存該過程:CREATE PROCEDURE spProducts AS SELECT * FROM Products RETURN 在設(shè)計(jì)視圖中打開 Products 窗體,然后將 RecordSource 屬性從 Products 更改為 spProducts。 關(guān)閉并保存 Products 窗體,然后打開 Categories1 窗體。 瀏覽到類別名稱 Confections,然后單擊 Filter Products(過濾產(chǎn)品)按鈕。請(qǐng)注意,Products 窗體打開并顯示所有產(chǎn)品,而不只是 Confections 類別中的那些產(chǎn)品。
編輯:北京信誠IT保姆IT外包部 http:// www.aboverow.cn www.xcit.com.cn |