プロが教える店舗&オフィスのセキュリティ対策術

AccessのDLookUpの第3引数に「" [テーブル]![フィールド] =" & テーブル!フィールド & "」という値を指定した場合、文章で言うとどうい意味になるのでしょうか?

ご存知の方がいらっしゃいましたら、教えて下さい。

よろしくお願い申し上げます。

A 回答 (4件)

【要旨】



提示された式のうち、
 a)左側の「[テーブル]![フィールド]」は、DLookupの第2引数で
  指定したテーブル(またはクエリ)のフィールドを、
 b)右側の「テーブル!フィールド」は、DLookup関数を記述した
  クエリ内で使用しているテーブルのフィールドを、
それぞれ意味します。
(この違いは、「2つで一組の『"』(ダブルクォーテーション)による括り」
 の中か外かによって生じます。


【詳細】

> 「" [テーブル]![フィールド] =" & テーブル!フィールド & "」

恐らく、クエリの中で使用されていた式を、この質問のために
テーブル名やフィールド名を変えて提示されたのだと思いますが、
一部に写し間違いがあると思われます。
(「"」は通常は2つ一組で、上記の式だとエラーになるはず、と)

式の内容からすると、DLookupは「クエリ(のデザインビュー)」で
使用されているものと推測されますので、以下、その前提で
説明します。

なお、「[ ]」(角括弧)での括りは、テーブル名等にSpaceやカンマ等の
特別な意味を持つ文字が含まれる場合のエラー回避のためで、
実質的な意味は同じですので、以下では「角括弧あり」で統一します。

<正しいと思われる式>
 "[テーブル]![フィールド]='" & [テーブル]![フィールド] & "'"

<元の式との違い>
 ・「=」の直後に「'」(シングルクォーテーション)を追加
 ・末尾の「"」の後に、「'」と「"」を追加

<式の意味>
クエリのデザインビューの『フィールド』欄に以下のような式を指定して
みます:
 a)「"[テーブル]![フィールド] & 1"」と、「"」で全体を括る
 b)「[テーブル]![フィールド] & 1」と、「"」で括らない
(末尾の「 & 1」は、Accessによってテーブル名が『テーブル』欄に
 自動で移動されてしまうのを防ぐため)

その上で、このクエリをデータシートビューにする(または「!」
(実行)ボタンをクリックする)と、
 「a」では「[テーブル]![フィールド] & 1」という文字列
 「b」では当該フィールドのデータの末尾に「1」が付いた文字列
が、それぞれ表示されます。

つまり、
 「"」で括られている場合は、そのままの文字列として、
 「"」で括られていない場合は、フィールド(該当フィールドがない
 場合はパラメータ)として、
それぞれ扱われる、ということです。

これにより、クエリの1レコード目の当該フィールドが「トマト」だった場合、
同レコードでの第3引数は「"[テーブル]![フィールド]='トマト'"」となり、
2レコード目が「ナス」なら同様に「"[テーブル]![フィールド]='ナス'"」と
いったように、レコード毎に異なる条件が指定されることになります。


【番外】
提示された式が他の方から受け取ったもので、現状でエラーになって
しまっているためのご質問だった場合は、
 "[テーブル]![フィールド]=" & Nz([テーブル]![フィールド])
または
 "[テーブル]![フィールド]=" & Nz([テーブル]![フィールド], "''")
 (末尾は「'」2つを、前後各1つの「"」で括ったもの)
という式を試してみてください。

<理由>
Accessの初期値「Null」は特殊な値のため、その回避策として
 [フィールド] & ""
で「空文字」に置き換えるという手法があります。

ただ、今回の場合は、元の値がNullだと、第3引数は
 [テーブル]![フィールド]=
という、右辺のない式となるため、結局エラーになってしまいます。

これを回避するため、Nz関数を使用して
 [テーブル]![フィールド]=0
または
 [テーブル]![フィールド]=''
に変換した、ということです。
    • good
    • 1

#1です。

いちおう質問の内容に置き換えておきます、

[テーブル]にある最初のレコードは、[フィールド]が1であるために

「" [テーブル]![フィールド] =" & テーブル!フィールド & "」

という引数はつぎのように変換され、

"1 = 1"

抽出条件に一致する最初のレコードとして抽出される。

以上です。
    • good
    • 0

『DLOOKUP関数を使用するには(応用編)』


というマイクロソフトのサポートオンラインのページ881378で質問事項の説明あります。

『フォーム上のフィールドによるテキスト抽出条件の指定』の欄です。
"[得意先コード]="'&[得意先コード]&"'"

検索してみて下さい。
    • good
    • 0

以下の、



http://support.microsoft.com/kb/285866/ja


=DLookup("[氏名]", "社員", _
"[社員コード] = Form![社員コード]")
=DLookup("[氏名]", "社員", _
"[社員コード] = " & [社員コード])
=DLookup("[氏名]", "社員", _
"[社員コード] = " & Forms![受注]![社員コード])

上記 3 つの例は、同じ結果を返します。

最初の例では、Form![社員コード] が抽出条件の引用符の中に置かれています。"Form" は、フィールド参照の "社員コード" が現在のフォームのものであることを示します。"Form" を指定しないと、"社員コード" と [社員] テーブルの社員コードそのものとが比較され、[社員] テーブルにある最初のレコードから氏名が返されます (抽出条件を何も指定しなかった場合と同じ結果になります)。なぜなら、[社員] テーブルにある最初のレコードは "社員コード" フィールドが 1 であるため、

"[社員コード] = [社員コード]"

という引数は次のように変換され、

"1 = 1"

抽出条件に一致する最初のレコードとして抽出されるためです。



にすべて書いてあります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています