DLookup 函數

套用到
Microsoft 365 Access Access 2024 Access 2021 Access 2019 Access 2016

在 Access 桌面資料庫中,你可以使用 DLookup 函式,從指定一組紀錄 (網域) 取得特定欄位的值。 在Visual Basic for Applications中使用 DLookup 函式 (VBA) 模組、巨集、查詢表達式或表單或報表上的計算控制項。

您可以使用 DLookup 函數,顯示不在表單或報表的記錄來源中的欄位值。 舉例來說,假設您有一個根據 [Order Details] 資料表的表單。 此表單會顯示 [OrderID]、[ProductID]、[UnitPrice]、[Quantity] 和 [Discount] 欄位。 不過,[ProductName] 欄位位於另一個資料表,即 [Products] 資料表。 您可以使用計算控制項中的 DLookup 函數,在相同的表單上顯示 ProductName。

語法

DLookup (expr, domain [, criteria] )

DLookup 函數語法具有下列引數:

引數 描述
expr 必要。 用來識別您要傳回其值之欄位的運算式。 它可以是用來識別資料表或查詢欄位的字串表達式,也可以是對該欄位資料進行計算的表達式。 在 expr 中,你可以包含欄位名稱、表單上的控制項、常數或函式。 如果 expr 包含函式,可以是內建或使用者定義的,但不能是其他網域聚合或 SQL 聚合函式。
domain 必要。 識別構成範圍之記錄集的字串運算式。 它可以是資料表名稱,或不需要參數之查詢的查詢名稱。
criteria 可省略。 用來限制執行 DLookup 函數的資料範圍的字串運算式。 例如,criteria 通常相當於 SQL 運算式中的 WHERE 子句,但沒有 WHERE 字樣。 如果省略 criteria,則 DLookup 函數會針對整個範圍評估 exprcriteria 包含的任何欄位也必須是 domain 中的欄位;否則 DLookup 函數會傳回 Null 。

註解

DLookup 函式會根據條件中指定的資訊回傳一個欄位值。 雖然 criteria 是可選參數,但如果你沒有提供 條件值, DLookup 函數會在該領域回傳一個隨機值。

若無紀錄符合 條件網域 中無記錄, DLookup 函式會回傳 Null

若多個欄位符合 條件DLookup 函式會回傳首次出現的欄位。 您應該指定準則,以確保 DLookup 函數傳回唯一的欄位值。 你可能想使用主鍵值作為條件,例如 [EmployeeID] 以下範例,以確保 DLookup 函式回傳唯一值:

Dim varX As Variant
varX = DLookup("[LastName]", "Employees", _
    "[EmployeeID] = 1")

無論你是在巨集或模組中使用 DLookup 函式、查詢表達式,或是計算控制項,都必須謹慎構建 條件 參數參數,以確保它能被正確評估。

你可以使用 DLookup 函式在查詢的 Criteria 列、查詢中計算的欄位表達式,或更新查詢中的 Update To 列中指定條件。

如果需要顯示的欄位不在表單或報表所根據的記錄來源時,您也可以在計算控制項,或表單或報表的運算式中使用 DLookup 函數。 例如,假設您有 [Order Details] 表單,其根據顯示 [ProductID] 欄位的 [ProductID] 文字方塊所屬的 [Order Details] 資料表。 若要根據文字方塊中的值來查詢 [Products] 資料表的 [ProductName],您可能會建立另一個文字方塊,並將其 [ControlSource] 屬性設定為下列運算式:

=DLookup("[ProductName]", "Products", "[ProductID] =" & Forms![Order Details]!ProductID)

小技巧

  • 雖然你可以用 DLookup 函式顯示外資料表欄位的值,但建立一個包含兩個資料表欄位的查詢,然後以該查詢為基礎來建立表單或報告,可能更有效率。
  • 您也可以使用 [查閱精靈] 來尋找外部資料表中的值。

注意

使用這個功能時, 網域中未 儲存的紀錄變更不會被包含在內。 如果想要 DLookup 函數以變更的值為基礎,您必須先儲存變更,方法是按一下 [資料] 索引標籤的 [記錄] 底下的 [儲存記錄],將焦點移到另一筆記錄,或是使用 [更新] 方法。

範例

注意

下列範例示範如何在 Visual Basic for Applications (VBA) 模組中使用此函數。 欲了解更多使用 VBA 的資訊,請參閱 Access VBA 參考資料

以下範例會回傳符合 條件的紀錄 CompanyName 欄位的名稱資訊。 範圍是 [Shippers] 資料表。 條件論證限制所得紀錄集合,僅限於 ShipperID 為 1 的紀錄。

Dim varX As Variant
varX = DLookup("[CompanyName]", _
    "Shippers", "[ShipperID] = 1")

[Shippers] 資料表的下一個範例會使用表單控制項 [ShipperID] 來提供 DLookup 函數的準則。 請注意,不要以表示字串的引號括住控制項的參照。 這可確保在每次呼叫 DLookup 函數時,Access 會從控制項取得目前的值。

Dim varX As Variant
varX = DLookup("[CompanyName]", "Shippers", _
    "[ShipperID] = " & Forms!Shippers!ShipperID)

下一個例子使用變數 intSearch,來取得該值。

Dim intSearch As Integer
Dim varX As Variant
intSearch = 1
varX = DLookup("[CompanyName]", "Shippers", _
    "[ShipperID] = " & intSearch)