閱讀英文

共用方式為


如何從 Microsoft Access 中的下拉式方塊選取專案移至特定記錄

中等:需要基本宏、編碼和互操作性技能。

本文適用于 Microsoft Access 資料庫 ( .mdb) 檔案或 Microsoft Access 資料庫 ( .accdb) 檔案。

摘要

本文說明四種根據下拉式方塊選取專案移至特定記錄的方法。 方法如下所示:

  • 在下拉式方塊的 AfterUpdate 事件中,執行使用 FindFirst 方法的程式代碼。
  • 在下拉式方塊的 AfterUpdate 事件中,呼叫會重新查詢表單之 Filter 屬性的宏。
  • 使用表單/子表單,並在主表單上使用下拉式方塊,以及子表單中的資料,由子窗體控件的LinkMasterFields和LinkChildFields屬性系結。
  • 將表單以聯結兩個數據表的查詢為基礎,然後使用 AutoLookup 技術將下拉式方塊系結至控制聯結的欄位。

本文的一節概述這四種方法,並以 Northwind 範例資料庫為基礎。

其他相關資訊

Microsoft 提供的程式設計範例僅供說明之用,並不具任何明示或暗示的責任擔保。 這包括 (但不限於) 任何目的之適售性及適用性的暗示責任擔保。 本文假設您熟悉示範的程式設計語言,也熟悉用以建立和偵錯程序的工具。 Microsoft 技術支援工程師可以協助說明特定程序的功能,但不會修改這些範例以提供附加功能或建構程序來滿足您的特定需求。

警告

如果您遵循此範例中的步驟,請修改範例資料庫Northwind.mdb。 您可能想要備份Northwind.mdb檔案,並在資料庫複本上遵循下列步驟。

下表比較四個方法的特性 (優點和缺點) :

方法 1 2 3 4
不需要任何程式代碼/宏 x
不需要子表單 x x
可以捲動至其他記錄 x x
不需要查詢 x x x x
可以編輯記錄 x x x x
以其他模式開啟表單 x

注意

這些方法也可以套用至文本框。

方法 1

  1. 建立名為 Products 的數據表,其具有 ProductID 欄位和 ProductName 字段。

  2. 使用 AutoForm: Columnar Wizard 建立以 Products 數據表為基礎的新表單,然後將表單儲存為frmComboTest。

    若要在 Microsoft Office Access 2003 和舊版 Access 中執行此動作,請遵循下列步驟:

    1. 在 [ 資料庫 ] 視窗中,按兩下 [物件 ] 底下的 [表 單]
    2. 按兩下 [資料庫] 視窗工具列上的 [ 新增 ]。
    3. 在 [ 新增表單單 ] 對話框中,按兩下 [AutoForm: Columnar],選取下拉式清單中的 [Products] 資料表,然後按兩下 [ 確定]
    4. 將窗體儲存為frmComboTest。

    若要在 Microsoft Office Access 2007 或更新版本中執行此動作,請遵循下列步驟:

    1. 在 [ 建立] 索引 標籤上,按兩下 [表 單] 群組中的 [ 單體精靈]。
    2. 在 [ 從精靈 ] 對話框中,選取下拉式清單中的 [產品] 數據表。
    3. 選取您想要在新窗體中看到的欄位,然後按 [ 下一步]
    4. 選取 [ Columnar ] 選項以設定表單的版面配置,然後按 [ 下一步]
    5. 輸入 frmComboTest 作為窗體標題,然後按兩下 [ 完成]
  3. 使用 下拉式方塊精靈 來新增未系結的下拉式方塊。 如果要執行這項操作,請依照下列步驟執行:

    1. 在 [設計] 檢視中開啟frmComboTest表單。
    2. 在工具欄中,確定已選取 [ 控制精靈 ]。

    注意

    在 Access 2007 或更新版本中,確定已在 [設計] 索引標籤的 [控制項] 群組中選取 [使用控件精靈]

    1. 在frmComboTest窗體上建立下拉式方塊。

    注意

    在 Access 2007 或更新版本中,按兩下 [設計] 索引標籤上 [控制項] 群組中的 [下拉式方塊],然後按兩下frmComboTest 表單。 在 [ 選擇產生器 ] 對話框中,按兩下 [ 下拉式方塊精靈],然後按兩下 [ 確定]

    1. 在 [ 下拉式方塊 精靈] 對話框中, 選取 [根據我在下拉式方塊中選取的值在我的窗體上尋找記錄 ] 選項,然後按 [ 下一步]
    2. 選取 [ProductID] 和 [ProductName] 字段,然後按 [ 下一步]
    3. 按一下 [完成]

    下拉式方塊精靈會建立類似下列的事件過程:

    VB
    Private Sub Combo0_AfterUpdate()
         ' Find the record that matches the control.
         Dim rs As Object
    
     Set rs = Me.Recordset.Clone
         rs.FindFirst "[ProductID] = " & Str(Nz(Me![Combo20], 0))
         If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    End Sub
    
  4. 在窗體檢視中檢視中檢視frmComboTest窗體。

    請注意,當您在下拉式方塊中選擇產品名稱時,系統會將您移至所選產品的記錄。

方法 2

  1. 依照方法 1 的步驟 2 中的指示,使用 AutoForm: Columnar Wizard 建立以 Products 數據表為基礎的新表單,然後將表單儲存為 frmComboTest2。

  2. 在 frmComboTest2 表單的 [屬性表] 頁面上,將 [資料] 索引標籤上的 [篩選] 屬性設定為 [ProductName] = Forms![frmComboTest2]![cboLookup]

  3. 新增名為 cboLookup 的未系結下拉式方塊,然後設定控件的屬性,如下所示:

    輸出
    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Select [ProductName] from Products;
    BoundColumn: 1
    ColumnWidths: 1"
    AfterUpdate: mcrLocateProduct
    
  4. 建立名為 mcrLocateProduct 的下列宏:

    輸出
    Action
    --------------------------------------
    SetValue
    Requery
    
    mcrLocateProduct Actions
    --------------------------------------
    SetValue
    Item: Forms![frmComboTest2].FilterOn
    Expression: True
    

    請注意,當您開啟frmComboTest2表單,並從 cboLookup 下拉式方塊中選取產品名稱時,篩選會設定為該值。

方法 3

  1. 依照方法 1 的步驟 2 中的指示,使用 AutoForm: Columnar Wizard 建立以 Products 數據表為基礎的新表單,然後將表單儲存為 frmSub。

  2. 在frmSub窗體的 [屬性表] 頁面上,將 [格式] 索引標籤上的 [預設檢視] 屬性設定為 [單一表單]

  3. 建立不以任何數據表或查詢) 為基礎的新窗體 (,並將其儲存為frmMain。 然後,新增下拉式方塊並設定其屬性,如下所示:

    輸出
    Combo Box
    ----------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: Products
    ColumnCount: 4
    ColumnWidths: 0";2"
    BoundColumn: 1
    
  4. 插入 frmSub 窗體的 Subform 控制件。

    • 移至 [設計>子窗體/子報表],然後取消 [子窗體精靈]。
    • 將frmSub從瀏覽窗格拖放到frmMain窗體中。
  5. 設定子表單控件屬性,如下所示:

    輸出
    Subform
    ----------------------------
    LinkChildFields: [ProductID]
    LinkMasterFields: cboLookup
    

    藉由變更 cboLookup 控制項中的值,Access 可確保子表單中的記錄符合下拉式方塊。

    Northwind 範例資料庫中的 Orders 窗體說明這個方法。 [訂單詳細數據] 子窗體與 LinkMasterFieldsLinkChildFields 屬性相關。

方法 4:搭配 WHERE 子句使用 OpenForm 宏指令

  1. 依照方法 1 的步驟 2 中的指示,使用 AutoForm: Columnar Wizard 建立以 Products 數據表為基礎的新表單,然後將表單儲存為 frmComboTest5。

  2. 新增名為 cboLookup 的未系結下拉式方塊,然後設定控件的屬性,如下所示:

    輸出
    Combo Box
    -----------------------------------------------------
    ControlName: cboLookup
    ControlSource: <leave blank>
    RowSourceType: Table/Query
    RowSource: SELECT [ProductID], [ProductName] FROM Products ORDER BY [ProductName];
    BoundColumn: 1
    ColumnCount: 2
    ColumnWidths: 0";1"
    
  3. 在 [宏建立器] 中,於 cboLookup 下拉式方塊的 事件中建立新的內嵌 AfterUpdate 宏。

  4. 在 [ 新增動作 ] 下拉式清單中,選取 [OpenForm],然後設定下列屬性:

    輸出
    Form Name:   frmComboTest5
    View:        Form
    Filter Name: <leave as empty>
    Where Condition: [ID] = [Forms]![frmComboTest5]![cboLookup].value
    Data Mode: <optional>
    Window Mode: <optional>
    
  5. 儲存並關閉宏。

  6. 儲存並執行表單。

變更下拉式方塊的值之後,表單將會關閉並再次開啟,並套用篩選條件。