質問: 私は、『提案フォーム』と『管理フォーム』(同様に、提案/管理テーブルも作成)を作り、『提案フォーム』に記入した内容を『管理フォーム』の同じコードのレコードに自動で書き込みたい(反映したい)と思いましたが、未入力のままで、自動書き込みはできませんでした。 『提案テーブル/フォーム』(関連テーブル) *コード(オートナンバー型) *提案年月日 *カテゴリ *提案内容 『管理テーブル/フォーム』(主テーブル) *コード(オートナンバー型) *提案年月日 更新年月日 *カテゴリ *提案内容 改善内容 改善過程 ・ ・ ・ 試みた方法1)自動結合:クエリの作成 『管理テーブル』から『提案テーブル』と同じ項目を削除し、『管理テーブル』と『提案テーブル』の全項目を 選択したクエリを作った。 試みた方法2)手動結合:リレーションシップを設定する 『管理テーブル』の「コード」と『提案テーブル』の「コード」を結合線で結び、参照整合性の欄にチェックをした。ちなみに、「フィールドの連鎖更新」や「レコードの連鎖削除」にチェックを入れると”「Invalid field definition "コード" in definition of index or relatiionship.」(なぜに英語?!)というエラーメッセージが出てきたので、チェックマークをつけられなかった。 上記の2方法とも『提案フォーム』から入力した内容が『管理フォーム』に自動書き込み(反映)されませんでした。恐らく、『管理テーブル』がオートナンバー型であり、『提案フォーム』で自動入力したコードが『管理テーブル』のレコードの新規作成にあたるために、その段階ではまだ、コードが存在していないことが、原因かと思われるのですが、ハッキリとした原因や解決法は分かりません。 解決法の分かる方がいらっしゃいましたら、宜しくお願いします。
回答: 提案テーブルの内容を全自動で管理テーブルに書き込むのは、Accessにトリガ機能が無いため、不可能です。 したがって、フォームの中で機能を作りこむ必要があります。 先にデータが追加されるのが提案テーブルなのであれば、管理テーブルの「コード」はオートナンバでなく、長整数型などにしておく方が良いでしょう。 提案テーブルに追加する処理の中で、追加クエリを実行するか、VBAでInsert文を実行することで実現するしかありません。 ただ、なぜ提案テーブルと管理テーブルが必要なのかがよくわからないのですが。 管理テーブルに提案テーブルの内容は全て書かれているようですので、管理テーブルだけにして、提案テーブルは選択クエリの形で持っておけば、データは完全に一致しますし、フォームでもテーブルをベースにするのではなく、選択クエリをベースにすればすむので、もし理由が無いのであれば、これをお勧めします。