ACC2002:如何在 Access 專案中使用參數化的下拉式清單方塊

本文已封存。本文係以「現狀」提供且不會再更新。
中級者:需要基本巨集、程式碼撰寫以及交互操作技術。

本文只適用於 Microsoft Access 專案 (.adp)。

結論
下拉式清單方塊是呈現使用者選擇清單的好方法。 如果下拉式清單方塊的資料列來源需要根據資料表或查詢的資料錄子集,您可以新增 WHERE 子句來限制選擇。

本文範例在 NorthwindCS.adp 範例專案的 [客戶] 表單中新增下拉式清單方塊。下拉式清單方塊列出目前客戶放置的訂單。當選取訂單時,[訂單] 表單便會開啟,顯示所選取訂單的詳細資訊。

您可以使用四種不同的方法,來產生與客戶放置的訂單相符之清單。這些方法以 Microsoft SQL Server 2000 當做資料來源的方式來搭配使用 Access 專案 (.adp)。下節將說明這些方法。
其他相關資訊

建立下拉式清單方塊

本節將告訴您,如何先在 [客戶] 表單中建立下拉式清單方塊以顯示目前客戶訂單的清單。
  1. 在「設計」檢視中開啟 [客戶] 表單。
  2. 在工具箱中按一下 [控制項精靈],然後在表單新增一個下拉式清單方塊。
  3. 在精靈的首頁中,選取要尋找表格或查詢中的值,然後按下 [下一步]
  4. 在精靈的第二頁中,按一下 [訂單] 資料表,然後按下 [下一步]
  5. 在精靈的第三頁中,新增 OrderID、CustomerID 和 OrderDate 當做下拉式清單方塊的欄位,然後按下 [下一步]
  6. 在精靈的第四頁中,按一下以清除 [隱藏索引欄],然後壓縮 CustomerID 資料欄以便取消顯示。按一下 [下一步]
  7. 在精靈的第五頁中,再按一下 [下一步] 接受將 OrderID 當做資料庫中儲存或使用的欄位。
  8. 在精靈的第六頁中,選取要記住日後要使用的值,然後按下 [下一步]
  9. 在精靈的最後一頁中,將下拉式清單方塊標記為 Select Order,然後按下 [完成]
  10. 開啟下拉式清單方塊的屬性工作表,然後將下拉式清單方塊的名稱變更為 SelectOrderCombo
  11. 將下拉式清單方塊的 OnClick 屬性設定為下列事件程序:
    Private Sub SelectOrderCombo_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 事件會重設下拉式清單方塊的資料列來源,以便僅顯示符合目前客戶的訂單。

注意:因為 CustomerID 欄位是文字欄位,所以必須使用單引號 (') 來串連表單參考。例如,已產生之 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. 在 [檢視表設計工具] 中建立新的檢視,然後從 [訂單] 資料表中選取 OrderID、CustomerID 和 OrderDate 欄位。如果要用最新到最舊的順序來排序訂單清單,請將 OrderDate 欄位的 [排序類型] 設定為 [遞減]
  2. 將檢視儲存為 vwCustomerOrders。
  3. 將下拉式清單方塊的 OnEnter 屬性設定為下列事件程序:
    Me.SelectOrderCombo.RowSource = "SELECT * FROM vwCustomerOrders WHERE CustomerId = '" & Forms![Customers]![CustomerID] & "'"					
針對方法 3 和 4,OnEnter 事件會呼叫下拉式清單方塊的 Requery 方法,重新執行預存程序或 SQL 函式以回傳相符的資料錄。在這些範例中,表單上的 [參數] 是在條件中使用 @ControlName 定義為控制項。存取會自動評估條件再要求相符的資料錄。

在下列範例中,下拉式清單方塊會傳回目前客戶的所有訂單清單。因為 CustomerID 文字方塊包含目前客戶的編號 ID,所以能夠直接在預存程序或 SQL 函式條件中參考 CustomerID 文字方塊。

方法 3:使用 SQL Server 預存程序

  1. 在 [圖形設計工具] 中建立新的程序。
  2. 選取 [訂單] 資料表,然後將 OrderID、CustomerID 和 OrderDate 欄位新增至預存程序。
  3. 輸入 @CustomerID 當做 CustomerID 欄位的條件,然後遞減排序 OrderDate 欄位。
  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. 選取 [訂單] 資料表,然後將 OrderID、CustomerID 和 OrderDate 欄位新增至預存程序。
  3. 輸入 @CustomerID 當做 CustomerID 欄位的條件,然後遞減排序 OrderDate 欄位。
  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 					
如果要測試這些方法,請開啟表單,然後從 [Select Order] 下拉式清單方塊中進行選取。OnEnter 事件會重新查詢下拉式清單方塊,並自動產生目前客戶的訂單清單。當選取訂單時,會執行下拉式清單方塊的 OnClick 事件,然後開啟 [訂單] 表單以顯示選取的訂單。
OfficeKBHowTo inf
內容

文章識別碼:281870 - 最後檢閱時間:12/05/2015 23:11:32 - 修訂: 1.0

Microsoft Access 2002 Standard Edition

  • kbnosurvey kbarchive kbhowto kbclientserver KB281870
意見反應