Application.DLookup 方法 (Access)

使用 DLookup 函数可以从指定记录集 (域) 获取特定字段的值。

语法

表达式DLookup (Expr条件)

expression:表示 Application 对象的变量。

参数

名称 必需/可选 数据类型 说明
Expr 必需 字符串 表达式,用于标识想要返回其值的域。 它可以是标识表或查询中字段的字符串表达式,也可以是执行该字段中数据的计算的表达式。 在 expr 中,可以在表中包括字段的名称、窗体上的控件、常量或函数。 如果 expr 包含函数,它可以是内置函数或用户定义的函数,但不能是其他域聚合函数或 SQL 聚合函数。
必需 字符串 字符串表达式,用于标识组成域的记录集。 可以是表名称或不需要参数的查询的查询名称。
Criteria 可选 Variant 可选的字符串表达式,用于限制作为 DLookup 函数执行对象的数据的范围。 例如,criteria通常是相当于 SQL 表达式中的 WHERE 子句位置,但是不使用 WHERE一词。 如果criteria省略, DLookup函数对整个域求 expr的值。 条件中包含的任何字段也必须是域中的字段;否则,DLookup 函数返回 Null

返回值

Variant

备注

使用 DLookup 函数可显示不在窗体或报表的记录源中的字段的值。 例如,假设有一个基于订单明细表的表单。 窗体显示 OrderIDProductIDUnitPriceQuantityDiscount 字段。 但是, “ProductName” 字段位于另一个表中,即“产品”表。 可以在计算控件中使用 DLookup 函数在同一窗体上显示 ProductName

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

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

如果多个字段满足 条件DLookup 函数将返回第一个匹配项。 应指定条件以确保DLookup函数返回的域值唯一。 可以使用主键值作为条件,如[EmployeeID]以下示例,以确保DLookup函数返回唯一值:

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

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

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

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

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

提示

  • 虽然可以使用 DLookup 函数显示来自外表字段中的值,但是通过创建包含两表中所需字段的查询,然后将窗体或报表建立在这个查询的基础上,效率将更高。
  • 也可以使用“查阅向导”来查找外表中的值。

示例

以下示例从满足条件的记录的 CompanyName 字段中返回名称信息。 域是运货商表。 criteria 参数将生成的记录集限制为 ShipperID 等于 1 的记录集。

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

“发货人”表中的下一个示例使用窗体控件“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)

以下示例演示如何在“DLookup”函数中使用各种类型的条件。

    ' ***************************
    ' Typical Use
    ' Numerical values. Replace "number" with the number to use.
    variable = DLookup("[FieldName]", "TableName", "[Criteria] = number")

    ' Strings.
    ' Numerical values. Replace "string" with the string to use.
    variable = DLookup("[FieldName]", "TableName", "[Criteria]= 'string'")

    ' Dates. Replace "date" with the string to use.
    variable = DLookup("[FieldName]", "TableName", "[Criteria]= #date#")
    ' ***************************

    ' ***************************
    ' Referring to a control on a form
    ' Numerical values
    variable = DLookup("[FieldName]", "TableName", "[Criteria] = " & Forms!FormName!ControlName)

    ' Strings
    variable = DLookup("[FieldName]", "TableName", "[Criteria] = '" & Forms!FormName!ControlName & "'")

    ' Dates
    variable = DLookup("[FieldName]", "TableName", "[Criteria] = #" & Forms!FormName!ControlName & "#")
    ' ***************************

    ' ***************************
    ' Combinations
    ' Multiple types of criteria
    variable = DLookup("[FieldName]", "TableName", "[Criteria1] = " & Forms![FormName]![Control1] _
             & " AND [Criteria2] = '" & Forms![FormName]![Control2] & "'" _
            & " AND [Criteria3] =#" & Forms![FormName]![Control3] & "#")
    
    ' Use two fields from a single record.
    variable = DLookup("[LastName] & ', ' & [FirstName]", "tblPeople", "[PrimaryKey] = 7")
            
    ' Expressions
    variable = DLookup("[Field1] + [Field2]", "tableName", "[PrimaryKey] = 7")
    
    ' Control Structures
    variable = DLookup("IIf([LastName] Like 'Smith', 'True', 'False')", "tableName", "[PrimaryKey] = 7")
    ' ***************************
```The following example shows how to use **DLookUp** in a Do Loop. It demonstrates how to build the Criteria string on each pass through the loop.

```vba
' The loop verifies data from an input data set, in this case Operating System names, 
' against those contained in a Master List.

Do Until I1 > NRec1
    ' An apostrophe is concatenated at the beginning and at the end of a datum referenced by "rs1!OS", 
    ' which is then concatenated to build the entire criteria string.
    Str_2 = "'" & rs1!OS & "'"
    Str_1 = "[OS] = " & Str_2
    
    J1 = DLookup("[ID]", "tbl_81_Operating_Systems_Master_List", Str_1)
    
    If IsNull(J1) = True Then
        ' If an OS name is not found, then a flag is set and the name of the unknown OS is output to a table.
        rs3.AddNew
        rs3.OS = rs1!OS
        rs3.Update
        Err_Fl = False

    End If

    rs1.MoveNext
    I1 = I1 + 1

Loop

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。