どのように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)
また、<のhref =「https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5034252.html」のrelを見ている可能性があり=「noreferrer」>アクセスVBAアプリケーションでのNULL値についてのいくつかの説明があり、それらをどのように処理するか。この記事の
他のヒント
あなたが示し例えば、nzは動作します。
thisMiddleInitial = Nz(rs!MiddleInitial,"")
それとも単に空の文字列と文字列を連結します:
thisMiddleInitial = rs!MiddleInitial & ""
あなたの質問は私には思える、Remouによって回答されているが、あなただけの名前フィールドの適切な連結を取得しようとすることができることを私に起こります。その場合、あなたは結果を得るために、VBAでミッド()とヌル伝播を使用することができます。
私は別のミドルネームのイニシャルのフィールドを使用していないので、いつもの名連結式があります:
Mid(("12" + LastName) & (", " + FirstName), 3)
先頭に「12」の文字列は、+連結演算子はNULL値を伝播するので、それが、のnullの場合。
姓がNull、無視されていない場合は離れて投げしようとしています真ん中intialsを含めるには、このを拡張するには、次のようになります:
Mid(("12" + LastName) & (", " + FirstName) & (" " + MiddleInitial), 3)
あなたのUDFは、ニックネーム/略語の/ etcの複雑なクリーンアップのいくつかの種類をやっていないと仮定すると、これはそれを完全に置き換えることができ、私には思える。
If rst.Fields("MiddleInitial").Value = "Null" Then
これは私のために動作します。私は、MS SQLデータベースを使用しています。
私はNOMATCHオプションは、このような状況で働くかもしれないと思う。
もしrs.NoMatch = trueの場合、
私は両方ともNULLと空の文字列値を考慮するために、下記の使用を好みます。それはあなたがユーザーから値を収集するフォームを持って使用することをおチェックです。
If Trim(rs.Fields("MiddleInitial") & "") = "" then