- ベストアンサー
ACCESS フォームの入力で
フォームの入力でコード番号を入力すると項目が自動入力出来るようにしたくて 2つ目のテキストボックスのコントロールソースに=DLookUp("[商品名]","テーブル2","[商品コード] = [コード] ")と入力したのですが 1つ目のテキストボックスに入力すると そのときは2つ目のテキストボックスは白紙で 一度フォームを閉じてから立ち上げると2つ目のテキストボックスにも入力されています。 これは閉じないと入力されないのでしょうか? 1つ目を入力した後に表示されるようにしたいのですが・・・。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは~。 えっと、よく陥る罠ですね。 その前にAccのバージョンは、幾つでしょう? バージョンによっては1つ目の問題だけの可能性もありますが・・・。 1つ目の問題は、テーブルのフィールドとフォームのコントロールが、すべて同じ値が入っていると勘違いの部分です。 別の変数で、タイミングによって、 フォームのコントロール ↓ テーブルのフィールド と更新していきます。 まず、数値を入れてレコードを保管する前ですと、フォームのコントロール上に値があるだけで、D関数でテーブルのフィールドに値を探したところで、見つかるわけがありません。 これは、Acc2002でもVBAでデバッグするとバグで出てくるくらいですから、結構覚えておかないとデバッグで混乱します。 2つ目はAccのバージョンによって違いましたが、D系の関数は、フォームのコントロールは再計算をマクロとか、メニューで指示を出さないと再計算しません。 この2つの問題を、1つづつ解決して・・・となると大変なので、フォームではD系の関数を使用せず、フォームのレコードソース等で、関数を使用しないように回避する方が宜しいかと思います。 そちらの方法、わかりますか?
その他の回答 (2)
- O_cyan
- ベストアンサー率59% (745/1260)
テーブル2には商品のレコードが保存してあるのですよね。(テーブルになければ表示できません) フォームには商品コードをいれる[コード]・[2つ目のTextBox]があるということですが2つ目のテキストボックス名は商品名ではないですねよ。参照しているテーブル2の商品名と同じ名前のコントロールでは循環参照して正しく表示できません。 コードがテキストなら =DLookUp("[商品名]","テーブル2","[商品コード] ='" & [コード] & "'") 数値の場合 =DLookUp("[商品名]","テーブル2","[商品コード] =" [コード]) でフォーム上の2つ目のテキストボックスに表示できます。 別の方法: フォームのレコードソースでSQLスタートメントを開きフォームのレコードソースにテーブル2を追加して[商品コード]と[コード]をリレーションさせ(リレーションを取っていれば自動で表示されますが)クエリのフィールドに元になるテーブルのフィールド全て(*)とテーブル2の商品名を追加して閉じフォームの2つ目のテキストボックスのコントロールソースに商品名を選択する方が簡単です。 ただしどちらの方法でもあくまでフォーム上の表示だけですが。 >自動入力出来るようにしたくて とありますが入力フォームのレコードソースとしているテーブルに商品名は保存しないのですよね。ご存知とは思いますが上記の方法では保存できません。まァコードがあれば商品名はテーブル2以外は必要ありませんよね。
- sanbit
- ベストアンサー率32% (16/50)
フォームの1つ目のテキストボックスにコード番号入力すると2つ目のテキストボックスにテーブル2の商品名を表示されるようにすると言うことでしょうか? コード番号のテキストボックスのプロパティ→イベントタブの更新後処理に me!商品名=DLookUp("[商品名]","テーブル2","[商品コード] = [コード] ") とするとフォームのテキスト2に商品名を表示してくれます。 ほかのほうほうもあるかと・・・ ご質問の趣旨と違っていたらごめんなさい。