hatena
hatena
2024/07/25 (木) 11:42:10
ご認識の通り正規化するど、T_履歴_機種、T_履歴_加工のテーブルも必要になりますね。
データの集計や検索などのデータ操作を効率よく行うには必須の設計になります。
T_履歴 と T_履歴_機種、T_履歴_加工 の関係は「一対多の関係」といいますが、このような場合、入力フォームの設計はAccessではメイン/サブフォーム形式のフォームを使用するのが一般的です。
検索すればサンプルが多数見つかりので、参照してみてください。
①T_入力という上記フィールド(受注№以外)を持つテーブルをレコードソースにした、F_入力というフォームで入力を行う(T_履歴には登録ボタンを押して、確定した情報しかレコードして残したくないため)
このようなことを実現するには、下記の2つの方法が考えられます。
T_履歴、T_履歴_機種、T_履歴_加工 と同じフィールド構成の一時テーブルを作成して、それをソースとするメイン/サブフォームを作成して、入力フォームとする。
あるいは、現状の入力フォームを非連結にして、登録ボタンでVBAで T_履歴、T_履歴_機種、T_履歴_加工 にデータ追記する。
コントロール名を規則的なものにしておけば、ループ処理でシンプルなコードで実現できると思います。
コントロール名(チェックボックス)が 「機種_1」「機種_2」「機種_3」・・「機種_26」として下記のような感じです。
Dim rs_履歴_機種 As DAO.Recordset
Set rs_履歴_機種 = CurrentDB.OpenRecordset("T_履歴_機種")
Dim i As Long
For i = 1 to 26
If Me.Controls("機種_" & 1).Value = True Then
rs_履歴_機種.AddNew
rs_履歴_機種!機種ID = Me.受注№.Value
rs_履歴_機種!機種ID = i
rs_履歴_機種s.Update
End If
Next
T_履歴_機種 に登録する部分のコードの考え方です。これを参考にコード作成してみてください。
ほかの部分も同様にできると思います。
登録する順番は先にメインテーブル(T_履歴)のほうからしてください。
通報 ...