DLookup 函数

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

在 Access 桌面数据库中,可以使用 DLookup 函数从指定记录集 (域) 获取特定字段的值。 可以在 Visual Basic for Applications (VBA) 模块、宏、查询表达式或窗体或报表上的计算控件中使用DLookup

可以使用 函数 DLookup 显示不在窗体或报表的记录源中的字段的值。 例如,假设你有一个基于“订单详细信息”表的窗体。 窗体显示 OrderID、、ProductIDUnitPriceQuantityDiscount 字段。 但是,字段 ProductName 位于另一个表(即表)中 Products 。 可以在计算控件中使用 DLookup 函数,以在同一窗体上显示 ProductName

语法

DLookup(expr, domain [, criteria])

函数 DLookup 具有以下参数:

参数 说明
expr 必需。 一个表达式,用于标识要返回其值的字段。 它可以是标识表或查询中的字段的字符串表达式,也可以是对该字段中的数据执行计算的表达式。 在 中 expr,可以在表中包括字段的名称、窗体上的控件、常量或函数。 如果 expr 包含函数,它可以是内置函数或用户定义的函数,但不能是其他域聚合或 SQL 聚合函数。
domain 必需。 一个字符串表达式,标识构成域的记录集。 它可以是表名,也可以是不需要参数的查询的查询名称。
criteria 可选。 用于限制运行函数的数据 DLookup 范围的字符串表达式。 例如, criteria 通常等效于 WHERE 表达式中的 SQL 子句,而没有单词 WHERE。 如果省略 criteria,函数 DLookupexpr 针对整个域进行计算。 中包含的 criteria 任何字段也必须是 中的 domain字段。 否则,函数 DLookup 返回 Null

备注

函数 DLookup 根据 中指定的 criteria信息返回单个字段值。 虽然 criteria 是可选的,但如果不为其提供值,函数将在 DLookup 域中返回一个随机值。

如果没有记录满足 criteria,或者如果 domain 不包含任何记录,则 DLookup 函数返回 Null

如果多个字段满足 criteria,则 DLookup 函数返回第一个匹配项。 应指定条件,确保 返回的字段值是唯一的 DLookup 。 你可能希望对条件使用主键值,如 [EmployeeID] 以下示例中所示,以确保 DLookup 返回唯一值:

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

无论是在宏或模块、查询表达式还是计算控件中使用 DLookup 函数,请仔细构造 criteria 参数,以便 Access 正确计算它。

可以使用 DLookup 函数在查询的 Criteria 行、查询的计算字段表达式中或更新查询的 “更新到 ”行中指定条件。

如果需要显示的字段不在窗体或报表所基于的记录源中,还可以 DLookup 在窗体或报表的计算控件的表达式中使用 函数。 例如,假设你有一个基于“订单详细信息”表的“订单详细信息”窗体,其中包含显示字段的ProductID名为 的ProductID文本框。 若要根据文本框中的值从Products表中查找ProductName,请创建另一个文本框,并将其 ControlSource 属性设置为以下表达式:

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

技巧

  • 尽管可以使用 DLookup 函数显示外部表中某个字段的值,但创建包含两个表中所需字段的查询,然后基于该查询创建窗体或报表的查询可能更有效。
  • 还可以使用“查找向导”查找外部表中的值。

注意

使用此函数时,不包括对 中 domain 记录的未保存更改。 如果要DLookup使用更改的值,请先通过单击“数据”选项卡上的“记录”下的“保存记录”、将焦点移动到另一条记录或使用 Update 方法保存更改。

示例

注意

下面的示例演示了如何在 Visual Basic for Applications (VBA) 模块中使用此函数。 有关使用 VBA 的详细信息,请参阅 访问 VBA 参考

以下示例从 CompanyName 满足 criteria的记录的 字段中返回名称信息。 域是一个 Shippers 表。 参数 criteria 将生成的记录集限制为 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)