Что такое формат DLookup и Nz (), когда поле в таблице имеет значение Null? - PullRequest
0 голосов
/ 18 января 2019

У меня есть формула DLookup, которая выбирает [Model] из MyTable. Все работает, пока значение поля name [Model] не будет пустым.

Я получаю сообщение об ошибке 94 о том, что он не понимает нулевую информацию.

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

Это то, что у меня есть.

Dim other as String
other = DLookup("[Model]", "[Part Number & Part Name]", "[Part Number]='" & Forms![Press 2]![Containment - Press 2 subform].Form![Part Number] & "'")

If other <> "" Then
    Me.[Model].Value = other
Else
    Me.Model.Value = "NA"
End If

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Используйте Nz и уменьшите код:

Dim other as String

other = Nz(DLookup("[Model]", "[Part Number & Part Name]", "[Part Number]='" & Forms![Press 2]![Containment - Press 2 subform].Form![Part Number] & "'"), "NA")   
Me![Model].Value = other
0 голосов
/ 18 января 2019

В вашем коде есть два хитрых места для нулевых значений:

  1. Если Forms![Press 2]![Containment - Press 2 subform].Form![Part Number] равно нулю, DLookUp будет обработан неправильно, поскольку вы включаете его в виде строки.

    Исправлено: используйте значение формы в качестве параметра, это также позволяет избежать ошибок внедрения SQL:

    other = DLookup("[Model]", "[Part Number & Part Name]", "[Part Number]= Forms![Press 2]![Containment - Press 2 subform].Form![Part Number]")
    
  2. Вы сохраняете результат DLookUp в виде строки. Вы можете использовать Nz здесь, чтобы вернуть другую строку, или объединить строку нулевой длины с результатом DLookUp, чтобы обработать нулевое значение как строку нулевой длины:

    other = VbNullString & DLookup("[Model]", "[Part Number & Part Name]", "[Part Number]= Forms![Press 2]![Containment - Press 2 subform].Form![Part Number]")
    

Это должно охватывать все места, где нулевые значения могут мешать этой части кода.

...