まずはテーブルを正規化しましょう。
データベース設計においては必須です。
「商品マスタ」テーブル
フィールド
商品ID 主キー
品番
品名
メーカー
・・・
「入出庫履歴」テーブル
フィールド
入出庫履歴ID オートナンバー型 主キー
商品ID
日付
入庫or出庫
数量
担当者
・・・
「入出庫履歴」テーブルには品番、品名は不要です。
初心者ということならまずは連結フォームの使い方を習得してから、
それで不満や不足があるときに非連結フォームを検討するという順番がいいでしょう。
テーブルの正規化がすんだら、2つのテーブルを連結したクエリを作成します。
クエリを新規作成してテーブル「商品マスター」「入出庫履歴」を追加して「商品ID」フィールド同士で結合します。
各テーブルから必要なフィールドを表示させますが「商品ID」は「入出庫履歴」のものを表示させます。
上記のクエリを現状のフォームのレコードソースにします。
各テキストボックスのコントロールソースには対応したフィールドを設定します。
品名、品番のテキストボックスの「編集ロック」は「はい」にして編集できないようにしておきます。
(マスターの値が不用意に更新されないようにするため)
これで、商品IDを入力すると商品マスターから、品名、品番を引っ張ってきて自動表示されます。
フォームを開いたときに新規データの入力にしたいときは「データ入力」プロパティを「はい」にしておきます。
そのほか、いろいろな設定がプロパティでできますので研究してみてください。
IDのテキストボックス横に、ボタンを配置し、それを押すと
ウィンドウorサブフォームにて、商品マスタのデータベースが検索でき、
その検索結果から一つのレコードを選択すると、
上記画像のフォームに戻り、選択したID、品名、品番が自動で入力されている
これに関しては別フォームを表示するという方法もありますが、コンボボックスを使うという方法も検討されてはどうでしょうか。
下記で、コードでも名称でも入力できるコンボボックスというのを紹介しています。これを使うと、
商品IDが分かっているときは、商品ID、分からないときは商品名で入力という使い方ができます。
コードでも名称でも入力できるコンボボックス - hatena chips
別フォームでという場合は、商品マスターから帳票フォームを再生してそこにコマンドボタンを配置してそのクリック時でカレントレコードの商品IDを入力フォームの商品IDに代入すればいいでしょう。
追記
商品マスタの帳票フォームを作成し、コマンドボタンをクリックすると、
該当のカレントレコードの商品IDが上記フォームのIDに代入されるようにしたいのですが、
クリック時のコードはどのように書いたらよろしいでしょうか?
下記になります。フォーム名やコントロール名は実際のもの合わせてください。
vba
1Private Sub コマンド1_Click()
2 Forms!入力フォーム!ID.Value = Me.ID.Value
3 Docmd.Close
4End Sub
5