Microsoft Access 掲示板

サブフォームでのDlookup「型が一致しません」の対処方法について / 6

7 コメント
views
4 フォロー
6

まずは公式のヘルプで確認しましょう。

Application.DLookup メソッド (Access) | Microsoft Docs

これによると引数はすべて文字列で指定することが分かります。

>「"入数"」については「"」を付けなくてもよいという記述もあり、まだ理解できておりません。

どこで調べたか分かりませんが、それはあきらかに間違いですね。

第3引数は、抽出条件式を文字列として指定します。
具体的にはクエリのSQL文のWhere句に設定する条件式になります。
例えば 仕入先IDが 1、仕入商品IDが 2 のものを抽出するとき、SQLでは下記のようになります。
(SQLが分からなければ、デザインビューで条件を設定してからSQLビューにすれば確認できます。)

SELECT 入数 FROM UQ仕入商品一覧
WHERE 仕入先ID = 1 And 仕入商品ID = 2;

これをDLookupに変換すると、下記のようになります。

DLookup("入数", "UQ仕入商品一覧", "仕入先ID = 1 And 仕入商品ID = 2")

1 と 2 の部分は固定値ではなく、フォームのテキストボックスの値を参照することになるので、文字列の外に出して、

DLookup("入数", "UQ仕入商品一覧", "仕入先ID = " & 1 & " And 仕入商品ID = " & 2)

この固定値の部分をコントロール参照式に変更します。

DLookup("入数", "UQ仕入商品一覧", "仕入先ID = " & Forms![F仕入入力]![仕入先ID] & " And 仕入商品ID = " & [仕入商品ID])

ここで注意することは、DLookup関数の第3引数に設定するのはSQLの条件式ということです。
SQLとVBAは似ていますが、まったく別のものだということを意識してください。

VBAとSQLでも文字列の扱いの違いは、下記で詳しく解説していますので、ご参考に。

Access上のコード内で引用符(")と単引用符(')の使い分けについて - hatena chips

通報 ...
  • 7

    hatena 様

    >まずは公式のヘルプで確認しましょう。
    これによると引数はすべて文字列で指定することが分かります。

    ありがとうございます。
    文字列式とありました。
    今後は公式のヘルプを何度も読み直し、しっかりと確認いたします。

    >どこで調べたか分かりませんが、それはあきらかに間違いですね。

    今回のエラーに関して様々な質問板等を見ているときに、DLookup (Expr, Domain, Criteria)ではExprの部分は""で囲まなくてOKです!と書いてあったので、お恥ずかしくも鵜吞みにしておりました。。。

    また、きめ細やかなご解説本当に有難うございます。
    リンクまで貼って下さり有難うございます。
    拝見しました。
    素人のわたくしにも理解できるように、詳しくご解説してくださっているので、
    とても分かりやすく、勉強になりました。

    重ね重ね御礼申し上げます。