VBA DAO 레코드 세트에서 NULL을 어떻게 확인할 수 있습니까?
-
21-08-2019 - |
문제
데이터베이스에 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")를 직접 통과하려고했지만 널 값으로 던졌습니다. 나는 그런 직접적인 일을 선호하지만 이것이 내가 생각해 낼 수있는 최고입니다.
해결책
어때요 :
IsNull(rs.Fields("MiddleInitial").Value)
당신은 또한 볼 수 있습니다 이 기사 Access VBA 앱의 NULL 값에 대한 설명과 처리 방법에 대한 설명이 있습니다.
다른 팁
당신이 보여주는 예에서는 뉴질랜드가 작동합니다.
thisMiddleInitial = Nz(rs!MiddleInitial,"")
또는 단순히 문자열을 빈 문자열로 연결합니다.
thisMiddleInitial = rs!MiddleInitial & ""
당신의 질문은 Remou에 의해 답변되었고, 나에게 보이지만, 당신은 단지 이름 필드를 적절히 연결하려고 할 수도 있습니다. 이 경우 VBA에서 Mid () 및 Null 전파를 사용하여 결과를 얻을 수 있습니다.
별도의 중간 초기 필드를 사용하지 않으므로 평소 이름 연결 공식은 다음과 같습니다.
Mid(("12" + LastName) & (", " + FirstName), 3)
마지막 이름이 무시되지 않고 무시되면 처음에 "12"문자열이 버려집니다. ~이다 + 연결 연산자가 Nulls를 전파하기 때문에 NULL.
이것을 중간에 포함하도록 이것을 확장하려면 다음과 같습니다.
Mid(("12" + LastName) & (", " + FirstName) & (" " + MiddleInitial), 3)
UDF가 닉네임/약어 등을 복잡하게 정리하지 않는다고 가정하면,이를 완전히 대체 할 수 있습니다.
If rst.Fields("MiddleInitial").Value = "Null" Then
이것은 나를 위해 작동합니다. MS SQL 데이터베이스를 사용합니다.
이 상황에서는 Nomatch 옵션이 작동 할 수 있다고 생각합니다.
rs.nomatch = true 인 경우
NULL 및 빈 문자열 값을 모두 설명하기 위해 아래를 사용하는 것이 좋습니다. 사용자로부터 값을 수집하는 양식을 사용하는 것은 사용하기에 좋은 점검입니다.
If Trim(rs.Fields("MiddleInitial") & "") = "" then