Как вы можете проверить значение null в наборе записей VBA DAO?

У меня есть необязательное поле в базе данных, которое я вынимаю, используя набор записей DAO. Мне нужно проверить, задано ли поле, прежде чем я свяжу его с другими полями. До сих пор у меня есть следующий фрагмент кода, который я пробовал как с Is, так и с = (что явно неправильный синтаксис [[Is | =]]) бесполезен. Похоже, что если я использую =, он не будет правильно сравнивать с Null, и если я использую Is, тогда он жалуется, что он не сравнивается с объектом.

While Not rs.EOF
    If rs.Fields("MiddleInitial") [[Is | =]] Null Then thisMiddleInitial = "" Else thisMiddleInitial = rs.Fields("MiddleInitial")
    If prettyName(myLastName, myFirstName, myMiddleInitial) = prettyName(rs.Fields("LastName"), rs.Fields("FirstName"), thisMiddleInitial) Then
        MsgBox "Yay!"
    End If
    rs.MoveNext
Wend

Если есть более простой способ сделать это, я полностью открыт для него. prettyName принимает 3 строки в качестве параметров, и изначально я просто пытался передать rs.Fields( "MiddleName" ) напрямую, но он забросил значение Null. Я бы предпочел сделать что-то более прямое, но это лучшее, что я мог придумать.

Ответ 1

Как насчет:

IsNull(rs.Fields("MiddleInitial").Value)

Вы также можете взглянуть на в этой статье, в котором есть некоторое объяснение о значениях Null в приложениях Access VBA и о том, как их обрабатывать.

Ответ 2

В примере, который вы показываете, Nz будет работать:

    thisMiddleInitial = Nz(rs!MiddleInitial,"")

Или просто конкатенировать строку с пустой строкой:

    thisMiddleInitial = rs!MiddleInitial & ""

Ответ 3

На ваш вопрос ответил Remou, мне кажется, но мне кажется, что вы просто пытаетесь получить правильную конкатенацию полей имени. В этом случае вы можете использовать Mid() и Null распространение в VBA, чтобы получить результат.

Я не использую отдельные средние начальные поля, поэтому моя обычная формула конкатенации имен:

Mid(("12" + LastName) & (", " + FirstName), 3)

Строка "12" в начале будет отброшена, если LastName не является Null и игнорируется, если она равна null, потому что оператор + конкатенации распространяется на Nulls.

Чтобы расширить это, включив средние intials, будет выглядеть так:

Mid(("12" + LastName) & (", " + FirstName) & (" " + MiddleInitial), 3)

Предполагая, что ваш UDF не выполняет какую-то сложную очистку псевдонимов/сокращений/и т.д., это может заменить его полностью, мне кажется.

Ответ 4

If rst.Fields("MiddleInitial").Value = "Null" Then

Это работает для меня. Я использую базу данных MS SQL.