Поделиться через


Метод Application.DLookup (Access)

Используйте функцию DLookup , чтобы получить значение определенного поля из указанного набора записей (домена).

Синтаксис

expression. DLookup (expr, domain, criteria)

выражение: переменная, представляющая объект Application.

Параметры

Имя Обязательный или необязательный Тип данных Описание
Expr Обязательный String Выражение, идентифицирующее поле, значение которого требуется вернуть. Это может быть строковое выражение, идентифицирующее поле в таблице или запросе, или выражение, выполняющее вычисление данных в этом поле. В expr можно включить имя поля в таблицу, элемент управления в форме, константу или функцию. Если expr включает функцию, она может быть встроенной или определяемой пользователем, но не может быть другой агрегатной или агрегатной функцией SQL.
Домен Обязательный String Строковое выражение, идентифицирующее набор записей, составляющих домен. Это может быть имя таблицы или имя запроса, который не требует параметра.
Criteria Необязательный Variant Необязательное строковое выражение, используемое для ограничения диапазона данных, на котором выполняется функция DLookup . Например, критерии часто эквивалентны предложению WHERE в выражении SQL без слова WHERE. Если условие опущено, функция DLookup оценивает expr для всего домена. Любое поле, включенное в условия, также должно быть полем в домене; В противном случае функция DLookup возвращает значение NULL.

Возвращаемое значение

Variant

Примечания

Используйте функцию DLookup , чтобы отобразить значение поля, которое отсутствует в источнике записей для формы или отчета. Например, предположим, что у вас есть форма, основанная на таблице "Сведения о заказе". В форме отображаются поля OrderID, ProductID, UnitPrice, Quantity и Discount . Однако поле ProductName находится в другой таблице, таблице Products. Вы можете использовать функцию DLookup в вычисляемом элементе управления для отображения ProductName в той же форме.

Функция DLookup возвращает значение одного поля на основе сведений, указанных в критериях. Хотя условие является необязательным аргументом, если не указать значение для условий, функция DLookup возвращает случайное значение в домене.

Если никакие записи не удовлетворяют условиям или домен не содержит записей, функция DLookup возвращает значение NULL.

Если критерию соответствует несколько полей, функция DLookup возвращает первое вхождение. Необходимо указать критерии, которые гарантируют уникальность значения поля, возвращаемого функцией DLookup . Может потребоваться использовать значение первичного ключа для условий, например [EmployeeID] в следующем примере, чтобы функция DLookup возвращала уникальное значение:

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

Независимо от того, используете ли вы функцию DLookup в макросе или модуле, в выражении запроса или вычисляемом элементе управления, необходимо тщательно создать аргумент условия , чтобы убедиться, что он будет правильно оценен.

Используйте функцию DLookup , чтобы указать критерии в строке Условия запроса, в выражении вычисляемого поля в запросе или в строке Обновить до в запросе на обновление.

Вы также можете использовать функцию DLookup в выражении в вычисляемом элементе управления в форме или отчете, если поле, которое необходимо отобразить, не находится в источнике записей, на котором основана форма или отчет. Например, предположим, что у вас есть форма "Сведения о заказе", основанная на таблице "Сведения о заказе" с текстовым полем ProductID, в котором отображается поле ProductID . Чтобы найти ProductName из таблицы Products на основе значения в текстовом поле, можно создать другое текстовое поле и задать для его свойства ControlSource следующее выражение:

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

Совет

  • Хотя функцию DLookup можно использовать для отображения значения из поля во внешней таблице, может оказаться более эффективным создать запрос, содержащий необходимые поля из обеих таблиц, а затем создать форму или отчет на основе этого запроса.
  • Вы также можете использовать мастер подстановки для поиска значений во внешней таблице.

Пример

В следующем примере возвращаются сведения об имени из поля CompanyNameусловия, удовлетворяющего записи. Домен является таблицей Shippers. Аргумент условия ограничивает результирующий набор записей теми, для которых 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)

В следующих примерах показано, как использовать различные типы условий с функцией 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 и обратная связь.