Microsoft Access 掲示板

フォーム上でdlookup

6 コメント
views
4 フォロー

お世話になります。
普通のフォーム上に、商品コードと在庫数というテキストボックスがあります。

商品コードの値によって、在庫数を引っ張ってきたいのですが
在庫数のコントロールソースに
=DLookUp("[在庫数]","T01_商品","[商品コード]='A10'")

とすると、在庫数が正しく抽出されますが、同フォーム上の商品コードからとってこようと
=DLookUp("[在庫数]","T01_商品","[商品コード]='" & [Me]![商品コード] & "'")

とするとエラーになってしまいます。
構文が違うのか、同フォーム上ではまだ商品コードを選択していない関係でdlookupをおくことはできませんか?
よろしくお願い致します。

aya
作成: 2021/02/23 (火) 01:37:45
通報 ...
1
hiroton 2021/02/23 (火) 09:55:56 4451d@b1cd0

構文はVBAと同じで問題ないけどほとんどのキーワードは使えません
Meも使えないので単に& [商品コード] &と記述して参照しましょう

2

ありがとうございます。
=DLookUp("[在庫数]","T01_商品","[商品コード]=& [商品コード] &)
ということでしょうか?
こちらもエラーになってしまいます。
よろしくお願い致します。

3

追伸。フォームのプロパティソースにmeが使えないってことでしょうか?以前使った例を見たことある気がしますがバージョンによるものでしょうか?

4

Meが使えるのは、はフォームかレポートのモジュールのみです。コードの記述してあるオブジェクトという意味です。

フォームのコントロールソースプロパティでは使えません。大昔から現在まで使えません。

下記の式でいいと思います。

=DLookUp("[在庫数]","T01_商品","[商品コード]='" & [商品コード] & "'")

DLookUpは重いので、オートルックアップクエリを使うのをお勧めします。

ACCESSの基本技 オートルックアップクエリは超便利

オートルックアップクエリの利用 - もう一度学ぶMS-Access

5

hatenaさま
ありがとうございました。'"&の使い方がまだいまいち混乱してしまいます。
オートルックアップクエリも参照させていただきました。
まだ難しいですが勉強してみます。
ありがとうございました😄

解決

6
hiroton 2021/02/24 (水) 08:50:38 83be0@f966d

分かりにくかったようですみません。実際に修正すべき部分だけを示すならば

[Me]![商品コード]
↓
[商品コード]

です。前後の変更しない部分を表記したほうが分かりやすいかなと思ったんですが余計でした


'"&の使い方

解決してそうですがせっかくなので技術的な話を
DLookUpの第三引数にはWHERE句に相当する文字列を指定します。「文字列」なので実際に処理されるSQL構文を「"(ダブルクオーテーション)」で囲みます

SQL構文(一部)
[商品コード]='A10'

ACCESS上(VBA)での該当する部分の表記(前後を「"」で囲む)
"[商品コード]='A10'"

今回の目的は「A10」を変数(フォーム上のテキストボックスの値)にしたいということなので、文字列の途中を抜き取るような形になります。元の文字列でそっくり残したい部分は前後に分割されて、それぞれで独立した文字列として「"」で囲みなおすことになります

SQLの文字
(文字列の前半)        => [商品コード]='
(変数化したい文字部分)=> (任意の文字)
(文字列の後半)        => '

ACCESS上(VBA)での表記
(文字列の前半)        => "[商品コード]='"
(変数化したい文字部分)=> [商品コード]
(文字列の後半)        => "'"

そうして最後にそれぞれに分割した内容を文字列として連結するために「&」でつなぎます

結果
"[商品コード]='" & [商品コード] & "'"