web-dev-qa-db-ja.com

VBA DAOレコードセットでnullを確認するにはどうすればよいですか?

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値でスローされました。私はそのようなもっと直接的なことをしたいのですが、これは私が思いつくことができる最高のものです。

15
Tim Visher

どうですか:

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

また、 この記事 を参照することもできます。これには、AccessVBAアプリのNull値とその処理方法に関する説明があります。

32
Hamish Smith

あなたが示す例では、Nzは機能します:

    thisMiddleInitial = Nz(rs!MiddleInitial,"")

または、単に文字列を空の文字列と連結します。

    thisMiddleInitial = rs!MiddleInitial & ""
8
Fionnuala

あなたの質問はRemouによって回答されたようですが、私には、名前フィールドを適切に連結しようとしているだけかもしれないと思います。その場合、VBAでMid()とNullの伝播を使用して結果を取得できます。

個別のミドルネームの初期フィールドを使用しないため、通常の名前の連結式は次のとおりです。

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

LastNameがNullでない場合、先頭の「12」文字列は破棄され、+is nullの場合は無視されます。これは、+連結演算子がNullを伝播するためです。

これを拡張してミドルイニシャルを含めると、次のようになります。

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

あなたのUDFがニックネーム/略語などのある種の複雑なクリーンアップを行っていないと仮定すると、これはそれを完全に置き換えることができると私には思えます。

2
David-W-Fenton

NullとEmptyの両方の文字列値を説明するために、以下を使用することをお勧めします。ユーザーから値を収集するフォームがあることを使用することをお勧めします。

If Trim(rs.Fields("MiddleInitial") & "") = "" then
0
Billy

NoMatchオプションは、この状況で機能する可能性があると思います。

Rs.NoMatch = Trueの場合

0
Scott Langford

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

これは私にとってはうまくいきます。私はMSSQLデータベースを使用しています。

0
Tony