みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アクセス DLookup

If Nz(DLookup("[主キー]", strテーブル名, "[主キー] = '" & str主キー & "'"), False) = True Then
bl_未転記データ = True 'ないならば
Else
bl_未転記データ = False 'あるならば
End If

このコードはどこがおかしいですか?

テーブルに主キーがあるかどうかを調べたいのですが
あってもなくても、
bl_未転記データ = False 'あるならば
になってしまいます。

投稿日時 - 2016-08-28 20:35:00

QNo.9221519

暇なときに回答ください

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

>テーブルに主キーがあるかどうかを調べたいのですが
Dlookupの結果が主キーになってるからです。
[主キー] = True の結果は False にしかなりません。
DCount関数で、0 or 1以上の数値 で結果を出せばいいです。

If (DCount("*", strテーブル名, "[主キー] = '" & str主キー & "'") > 0 Then
bl_未転記データ = True 'ないならば
Else
bl_未転記データ = False 'あるならば
End If

投稿日時 - 2016-08-28 20:54:17

お礼

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

投稿日時 - 2016-09-06 22:30:02

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

主キーはテキスト型ですよね。
DLookupは該当のレコードが見つかればそのテキストを返します。
"テキスト"はTrueとは違いますので、"テキスト"=True はFalseになります。

該当レコードが見つからない場合は、Nullを返します。Nz関数で Null を Falseに変換してますので、その場合も結果はFalseになります。

Nullを返せば該当レコードなし、テキストを返せば該当レコードがあり、ということですので、Nullかどうかを調べればいいです。IsNull関数で調べることができます。

If IsNull(DLookup("[主キー]", strテーブル名, "[主キー] = '" & str主キー & "'")) Then

なお、DCountで結果が0かどうかで調べることもできますが、DCountだと全件をカウントしますが、DLookupは該当レコードが見つかった時点で処理を終了しますので、高速になることが期待できます。

投稿日時 - 2016-08-29 23:26:29

お礼

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

投稿日時 - 2016-09-06 22:29:57

ANo.3

【補足】非数字の場合

投稿日時 - 2016-08-28 22:51:31

お礼

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

投稿日時 - 2016-09-06 22:29:58

ANo.2

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

投稿日時 - 2016-08-28 22:30:02

お礼

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

投稿日時 - 2016-09-06 22:30:00

あなたにオススメの質問