Как вы можете проверить значение 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.Поля ("MiddleName") напрямую, но он выбросил значение Null. Я бы предпочел что-то более прямое, но это лучшее, что я мог придумать.

5 ответов


Как насчет:

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

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


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

    thisMiddleInitial = Nz(rs!MiddleInitial,"")

или просто объединяя строку с пустой строкой:

    thisMiddleInitial = rs!MiddleInitial & ""

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

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

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

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

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

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


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

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


Я думаю, что опция NoMatch может работать в этой ситуации:

Если rs.NoMatch = True, То