Ответ 1
Как насчет:
IsNull(rs.Fields("MiddleInitial").Value)
Вы также можете взглянуть на в этой статье, в котором есть некоторое объяснение о значениях Null в приложениях Access VBA и о том, как их обрабатывать.
У меня есть необязательное поле в базе данных, которое я вынимаю, используя набор записей 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. Я бы предпочел сделать что-то более прямое, но это лучшее, что я мог придумать.
Как насчет:
IsNull(rs.Fields("MiddleInitial").Value)
Вы также можете взглянуть на в этой статье, в котором есть некоторое объяснение о значениях Null в приложениях Access VBA и о том, как их обрабатывать.
В примере, который вы показываете, Nz будет работать:
thisMiddleInitial = Nz(rs!MiddleInitial,"")
Или просто конкатенировать строку с пустой строкой:
thisMiddleInitial = rs!MiddleInitial & ""
На ваш вопрос ответил Remou, мне кажется, но мне кажется, что вы просто пытаетесь получить правильную конкатенацию полей имени. В этом случае вы можете использовать Mid() и Null распространение в VBA, чтобы получить результат.
Я не использую отдельные средние начальные поля, поэтому моя обычная формула конкатенации имен:
Mid(("12" + LastName) & (", " + FirstName), 3)
Строка "12" в начале будет отброшена, если LastName не является Null и игнорируется, если она равна null, потому что оператор + конкатенации распространяется на Nulls.
Чтобы расширить это, включив средние intials, будет выглядеть так:
Mid(("12" + LastName) & (", " + FirstName) & (" " + MiddleInitial), 3)
Предполагая, что ваш UDF не выполняет какую-то сложную очистку псевдонимов/сокращений/и т.д., это может заменить его полностью, мне кажется.
If rst.Fields("MiddleInitial").Value = "Null" Then
Это работает для меня. Я использую базу данных MS SQL.