18

データベースにオプションのフィールドがあり、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 値でスローされました。私はそのようなもっと直接的なことをしたいのですが、これが私が思いつくことができる最高のものです.

4

6 に答える 6

37

どうですか:

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

Access VBA アプリの Null 値とその処理方法について説明しているこの記事も参照してください。

于 2009-03-19T21:37:13.050 に答える
8

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

    thisMiddleInitial = Nz(rs!MiddleInitial,"")

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

    thisMiddleInitial = rs!MiddleInitial & ""
于 2009-03-19T22:02:21.413 に答える
2

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

私は別の中間イニシャル フィールドを使用しないので、通常の名前の連結式は次のとおりです。

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

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

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

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

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

于 2009-03-20T00:05:04.350 に答える