在 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 函數會針對整個範圍評估 expr。 criteria 包含的任何欄位也必須是 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)