- ベストアンサー
Access2007でレコードを追加できないエラーが発生する理由と解決方法
- Access2007でデータ入力時に「レコードを追加できません、テーブル’T_アルバム’の結合キーがレコードセットにありません。」というエラーメッセージが表示される場合、アルバムIDとアルバム名の入力ができない可能性があります。
- このエラーメッセージが表示される原因は、テーブル’T_アルバム’の結合キーがレコードセットに存在しないためです。
- この問題を解決するためには、フォームウィザードから作成したフォームの設定を確認し、アルバムIDとアルバム名の入力ができるようにする必要があります。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
SQL文は、下記のようにすべきです。 SELECT T_アルバム.アルバムID, T_アルバム.アルバム名, T_アルバム.ジャンルID, T_アルバム.ソースID, T_アルバム.アーティストID, MT_アーティスト.アーティスト名 FROM MT_アーティスト INNER JOIN T_アルバム ON MT_アーティスト.アーティストID = T_アルバム.アーティストID; アーティストID は T_アルバム の方を表示させる。 アーティスト名のテキストボックスは編集ロックをかけておいて、更新できないようにしておく。 > アーティストの新規入力は、フォームを別個独立させるべきかもしれませんね。 そうしたほうがいいと思います。 コンボボックスを使えば、リストにないアーティスト(新規アーティスト)を入力したときは、リスト外入力のイベントで、自動的に新規入力用フォームを呼び出すVBAを割り当てるなどの設計にすることができます。 ちょっと古いですが、下記が参考になると思います。 [AC95] コンボボックスのリストに新しいデータを追加する方法 http://support.microsoft.com/kb/404896
その他の回答 (6)
- hatena1989
- ベストアンサー率87% (378/433)
> SQL文は以下の通りです。 SQL文は、下記のようにすべきです。 SELECT T_アルバム.アルバムID, T_アルバム.アルバム名, T_アルバム.ジャンルID, T_アルバム.ソースID, T_アルバム.アーティストID, MT_アーティスト.アーティスト名 FROM MT_アーティスト INNER JOIN T_アルバム ON MT_アーティスト.アーティストID = T_アルバム.アーティストID; アーティストID は T_アルバム の方を表示させる。 アーティスト名のテキストボックスは編集ロックをかけておいて、更新できないようにしておく。 > アーティストの新規入力は、フォームを別個独立させるべきかもしれませんね。 そうしたほうがいいと思います。 コンボボックスを使えば、リストにないアーティスト(新規アーティスト)を入力したときは、リスト外入力のイベントで、自動的に新規入力用フォームを呼び出すVBAを割り当てるなどの設計にすることができます。 ちょっと古いですが、下記が参考になると思います。 [AC95] コンボボックスのリストに新しいデータを追加する方法 http://support.microsoft.com/kb/404896
お礼
ありがとうございます。 上記の方法で解決しました。
- hatena1989
- ベストアンサー率87% (378/433)
> T_アルバムだけ(これを(1)とする)でフォームを作成 ⇒ ○ これでエラー無しに入力出来るなら、下記のようにコンボボックスを利用すればどうでしょうか。 フォームのレコードソースは、 T_アルバム。 コンボボックスを配置して、下記のように設定。 コントロールソース アーティストID 値集合ソース MT_アーティスト 連結列 1 自動拡張 はい 列数 2 列幅 0cm;3cm 3cmの部分は、適宜変更してください。 これで、アーティスト名をリストから選択して入力することができます。 直接ボックスに入力することも可能。 ソースやジャンルも同様に設定します。 コンボボックスにするメリットは、マスターテーブルにない値を入力することを自動ではじいてくれることです。
お礼
ジャンルとソースは最終的にはコンボボックスにしようと考えていました。 アーティストは・・・、何らかの形で新規入力もできたらと考えていたので保留中ですが・・・。 アーティストの新規入力は、フォームを別個独立させるべきかもしれませんね。 そうすれば、アーティストもコンボボックスにできそうです。
- hatena1989
- ベストアンサー率87% (378/433)
> (1)にMT_アーティストを追加し、リレーションシップ→クエリ→フォームを作成 ⇒ ×(エラー発生) クエリをフォームのレコードソースにしたのですね。 どのようなクエリを作成しましたか。 クエリのSQL文をコピーして貼り付けてもらえますか。
お礼
SQL文は以下の通りです。 SELECT T_アルバム.アルバムID, T_アルバム.アルバム名, T_アルバム.ジャンルID, T_アルバム.ソースID, MT_アーティスト.アーティストID, MT_アーティスト.アーティスト名 FROM MT_アーティスト INNER JOIN T_アルバム ON MT_アーティスト.アーティストID = T_アルバム.アーティストID;
- hatena1989
- ベストアンサー率87% (378/433)
当方の Win7 AC2007 の環境で T_アルバム ★アルバムID テキスト型 アルバム名 テキスト型 ジャンルID テキスト型 ソースID テキスト型 アーティストID テキスト型 というテーブルを作成して、ウィザードで単票フォームを作成して、 データを入力してみましたが、症状を再現できませんでした。 新規のデータベースを作成して、上記のように単純なもので試しても再現できますか。 もし、エラーで出ないなら、 MT_アーティスト、MT_ジャンル、MT_ソース、T_曲目 等を一つずつ追加してリレーションシップを設定して、入力していってエラーが出るかどうか確認してみてください。 もし、エラーがで出たなら、そのエラーで出るまでの手順をご提示ください。 こちらでそのエラーが再現できたら、原因を追及することができるかも知れません。
お礼
調べて頂きましてありがとうございます。 当方で確認してみました。 T_アルバムだけ(これを(1)とする)でフォームを作成 ⇒ ○ (1)にMT_アーティストを追加し、リレーションシップ→クエリ→フォームを作成 ⇒ ×(エラー発生) (1)にMT_ジャンルを追加し、リレーションシップ→クエリ→フォームを作成 ⇒ × (1)にMT_ソースを追加し、リレーションシップ→クエリ→フォームを作成 ⇒ × (1)にT_曲目を追加し、リレーションシップ→クエリ→フォームを作成 ⇒ ○ という結果になりました。 MT_アーティスト、MT_ジャンル、MT_ソースいすれもNGというのが引っかかるのですが・・・
- hatena1989
- ベストアンサー率87% (378/433)
> その前段階として、T_アルバムで単票フォームを作ろうとして、質問の状態に至りました。 レコードソースは T_アルバム ですか。 それで、 > アルバムIDやアルバム名を入力しようとすると > 「レコードを追加できません、テーブル’T_アルバム’の結合キーがレコードセットにありません。」 > と表示されます。 という状況ですか? もう少し詳細な状況を説明してもらえますか。 とりあえず、 T_アルバム の ジャンルID に MT_ジャンル に存在しない値を入力してませんか。 あるいは ソースID に MT_ソース に存在しない値、アーティストID に MT_アーティスト に存在しない値を入力してませんか。
お礼
度々の回答ありがとうございます。 >T_アルバム の ジャンルID に MT_ジャンル に存在しない値を入力してませんか。 >あるいは ソースID に MT_ソース に存在しない値、アーティストID に MT_アーティスト に存在しない値を入力してませんか。 T_アルバムのデータを一通り確認してみましたが、そのような入力はありませんでした。 (T_アルバムのデータは動作確認用の単純なもので、確認は容易です)
- hatena1989
- ベストアンサー率87% (378/433)
T_アルバム と T_曲目 は一対多の関係になります。 この場合、一側(T_アルバム)のデータを先に入力しておかないと、そのようなエラーが表示されます。 このような関係のデータをクエリで一つにまとめて入力しようとするとうまく行かない場合が多いです。 Accessではこのような場合、メイン/サブフォーム形式の入力フォームを利用します。 クエリは使わずに、ウィザードで両方のテーブルから直接、必要なフィールドを選択すると自動でメイン/サブフォーム形式の入力フォームを作成してくれます。(リレーションシップが正しく設定されている場合) あるいは、T_アルバム から単票フォームを作成、T_曲目 から帳票フォームを作成して、T_アルバムのフォームのデザインビューに、T_曲目のフォームをドラッグ&ドロップしても作成することができます。 下記は、学生 と 成績 という一対多の関係のデータをメイン/サブフォームにしている例です。 Access2007入門部屋 練習1:成績管理データベース(2) http://www.mahoutsukaino.com/ac/access2007/04_db3/02.htm 下記は、メイン/サブフォーム形式についての総括的な解説です。 サブフォームを含むフォーム (一対多のフォーム) を作成する - Access - Office.com http://office.microsoft.com/ja-jp/access-help/HA010098674.aspx
お礼
回答ありがとうございます。 実は目指しているのは、そのようなメイン/サブフォームです。 その前段階として、T_アルバムで単票フォームを作ろうとして、質問の状態に至りました。 質問における説明が不足していたことは大変申し訳ありません。
補足
続報です。 お礼投稿後に、T_曲目からサブフォームを作成してメインフォームと結合してみましたが、同じエラーが表示されました。 どうすれば良いのでしょうねぇ・・・
お礼
ありがとうございます。 上記の方法で解決しました。