DLookup 函数用于从指定记录集(一个域)获取特定字段的值。可以在 Visual Basic、宏、查询表达式、窗体或报表上的计算控件中使用 DLookup 函数。
使用 Dlookup 函数可以显示不在窗体或报表记录源中的字段值。例如,假定有一个基于“订单明细”表的窗体,显示“订单ID”、“产品ID”、“单价”、“数量”和“折扣”字段。而“产品名称”字段位于另一个表 (“产品”表)中。通过在计算控件中使用 Dlookup 函数,可以在同一窗体上显示“产品名称”。
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 中指定的信息返回单个字段的值。虽然 criteria 是可选参数,但如果不给 criteria 提供值,Dlookup 函数将返回域中的一个随机值。
如果没有记录满足 criteria,或者 domain 中没有记录,DLookup 函数将返回 Null。
如果有多个字段满足 criteria,DLookup 函数将返回第一个匹配字段。所以应该指定条件以确保 DLookup 函数返回的字段值是唯一的。可以在条件中使用主键值,在下例中,使用 [EmployeeID]
来确保 DLookup 函数返回唯一的值:
Dim varX As Variant
varX = DLookup("[LastName]", "Employees", "[EmployeeID] = 1")
无论是在宏、模块、查询表达式中,还是在计算控件中使用 DLookup 函数,都必须仔细地构造 criteria 参数,以确保能够正确地进行计算。
在查询的“条件”行、查询的计算字段表达式中或更新查询的“更新到”行中均可以使用 DLookup 函数来指定条件。
如果需要显示的字段不在窗体或报表所基于的记录源中,也可以在窗体或报表的计算控件表达式中使用 DLookup 函数。例如,假定有一个“Order Details”窗体基于“Order Details”表,并且含有一个显示“ProductID”字段的名为“ProductID”的文本框,要从基于这个文本框值的“Products”表中查阅“ProductName”字段,可以创建另一个文本框,并将它的 ControlSource 属性设为如下表达式:
=DLookup("[ProductName]", "Products", "[ProductID] =" _
& Forms![Order Details]!ProductID)
提示
注意 使用该函数时,未保存在 domain 中的记录更改将不包括在内。如果要让 DLookup 函数以更改后的数据为基础,必须先保存更改。方法是单击“记录”菜单上的“保存记录”命令、将焦点移到另一个控件上,或者使用 Update 方法。
下面的示例将从满足 criteria 内容记录的“CompanyName”字段中返回名称信息。域为“Shippers”表。criteria 参数将结果记录集限制为“ShipperID”等于 1 的记录。
Dim varX As Variant
varX = DLookup("[CompanyName]", "Shippers", "[ShipperID] = 1")
下一个示例来自“Shippers”表。它使用窗体控件“ShipperID”来为 DLookup 函数提供条件。请注意,对控件的引用不包括在标识字符串的引号中,这样可以确保每次调用 DLookup 函数时,Microsoft 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)