• ベストアンサー

アクセス DLookup

If Nz(DLookup("[主キー]", strテーブル名, "[主キー] = '" & str主キー & "'"), False) = True Then bl_未転記データ = True 'ないならば Else bl_未転記データ = False 'あるならば End If このコードはどこがおかしいですか? テーブルに主キーがあるかどうかを調べたいのですが あってもなくても、 bl_未転記データ = False 'あるならば になってしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

>テーブルに主キーがあるかどうかを調べたいのですが Dlookupの結果が主キーになってるからです。 [主キー] = True の結果は False にしかなりません。 DCount関数で、0 or 1以上の数値 で結果を出せばいいです。 If (DCount("*", strテーブル名, "[主キー] = '" & str主キー & "'") > 0 Then bl_未転記データ = True 'ないならば Else bl_未転記データ = False 'あるならば End If

medqwivlb
質問者

お礼

ご回答ありがとうございました。

その他の回答 (3)

回答No.4

主キーはテキスト型ですよね。 DLookupは該当のレコードが見つかればそのテキストを返します。 "テキスト"はTrueとは違いますので、"テキスト"=True はFalseになります。 該当レコードが見つからない場合は、Nullを返します。Nz関数で Null を Falseに変換してますので、その場合も結果はFalseになります。 Nullを返せば該当レコードなし、テキストを返せば該当レコードがあり、ということですので、Nullかどうかを調べればいいです。IsNull関数で調べることができます。 If IsNull(DLookup("[主キー]", strテーブル名, "[主キー] = '" & str主キー & "'")) Then なお、DCountで結果が0かどうかで調べることもできますが、DCountだと全件をカウントしますが、DLookupは該当レコードが見つかった時点で処理を終了しますので、高速になることが期待できます。

medqwivlb
質問者

お礼

ご回答ありがとうございました。

回答No.3

【補足】非数字の場合

medqwivlb
質問者

お礼

ご回答ありがとうございました。

回答No.2

主キーが数字であると仮定しての回答です。

medqwivlb
質問者

お礼

ご回答ありがとうございました。