- ベストアンサー
マイクロソフト ACCESSのサブフォームについて教えてください。
入力用のフォームを使用して、テーブルにレコードを入力し、その際にサブフォームを使用し入力履歴の一覧を参考表示させています。 フォームとサブフォームは、商品コードで関連付けていますが、フォームに商品コードを入力しただけでは サブフォームに履歴が表示されず、次のレコードに移り、再び、元のレコードに戻った場合のみ履歴が表示されます。 この場合、商品コードを入力したら、直ちにサブフォームに履歴を表示させる方法は何かありませんでしょうか。 どうぞご存知の方お助けください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
当方、Acc2002なのですが、バージョンあいますか? とりあえず、具体的な例が無いので例を作成してみましょう。 テーブル名:注文テーブル 発注伝票番号 |商品コード |注文数 |注文日 -------------------------------------------- 051109-0001 |1 |100 |2005/11/09 051108-0001 |2 |100 |2005/11/08 051107-0001 |3 |200 |2005/11/07 051107-0001 |1 |50 |2005/11/06 で、クエリを作成してフォームのレコードソースにした方が後々の維持には簡単なのですが省略して・・・。 サブフォームを先に作成します。 フォームウィザードで基になるテーブルまたはクエリを「注文テーブル」で作成し、保存したサブフォーム名を 「Frm_Sub注文テーブル」で保管します。 メインフォームを同じく、フォームウィザードで基になるテーブルまたはクエリを「注文テーブル」で作成し、サブフォームコントロールのソースオブジェクトを「Frm_Sub注文テーブル」とし配置します。 メインフォームの商品コードのコントロール名を「Ctr商品コード」に変更し、サブフォームの関連付けを、 リンク子フィールド:商品コード リンク親フィールド:Ctr商品コード にします。で、入力画面にして商品コードを入力後、他のコントロールにカーソルを移すとサブフォームが更新されます。 これでだめなら、引き続き「商品コード」の更新後処理にイベントに(VBAの画面に移る) Private Sub ctr商品コード_AfterUpdate() Me.Frm_Sub注文テーブル.Requery End Sub となるように記載しましょう。 で大体のイメージの出来上がり、タイミング等はいろいろ変えられますが、ここが私の場合一番使い勝手がいいかなと^^; 後、「Ctr商品コード」と故意にコントロール名とコントロールソース名を違えて変更したのは「レコードのフィールド」と「フォームのフィールド」を、わざと区別するために行ってます。 要するに区別しなければ「レコードのフィールド」を優先されますので、現在のレコード更新処理まで値が入力前のままに保持されています。 (新規レコードの場合「Null値」のまま) で、書いている事の意味判ります? 応用が利かないようであれば、具体的にレコードソースの構成(名前と型)、フォームの構成(名前とソース)等あげてくれれば、何とか出来ますが・・・。 現行の記載内容では当方で再現できません^^;
その他の回答 (2)
- Dxak
- ベストアンサー率34% (510/1465)
すみません。 単純にリクエリ行ったのでは、レコードの更新前なのでサブフォームの履歴は出てきませんね。 ですから、商品コードで関連付けでは無く、商品コードのコントロールでの関連付けに訂正するか関連付けをはずして、Where条件に差し替えてから、Requeryを実行させる方法があります。他にもレコード更新前をわざと「商品コードコントロール」を更新後に発生させてからRequeryを実行させると言う方法もありますが・・・。 とりあえず、思いつく方法で3通りです。 で、書いている事の内容判ります?どれもVBA使用する結果になりますけど・・。
お礼
早速のアドバイスありがとうございます。 当方は、あまり知識がありませんのでどの様にすればよいか解りません。 もしよろしければ、もう少し詳しくお教えいただけませんでしょうか。 よろしくお願いします。
- Dxak
- ベストアンサー率34% (510/1465)
商品コード入力後のイベントにサブフォームのリクエリーを書き込めば、可能だと思いますが?
お礼
ありがとうございました、解決いたしました。 親切なアドバイス感謝いたします。