Как вы можете проверить значение 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.