Accessのリレーションシップについて

このQ&Aのポイント
  • Access2010でデータベースを作成中の初心者です。テーブル間のリレーションシップについて困っています。
  • テーブル1とテーブル2・3のフィールドAを主キーにしてリレーションを組みましたが、レコードの追加や変更ができません。
  • 「テーブル'2'にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更ができません。」というエラーメッセージが表示されます。解決方法を教えてください。
回答を見る
  • ベストアンサー

Accessのリレーションシップ

Access初心者です。 Access2010でデータベースを作っていて、行き詰ってしまいました。 テーブル1にフィールドABCDEFがあって、Aに主キーが付いています。(Aはテキスト型でフィールドサイズ10です。) テーブル2にはフィールドAGHがあり、Aに主キーが付いてます。(Aはテーブル1と同じです。) テーブル3にも同じくフィールドAIJがあり、Aに主キーが付いています。(Aはテーブル1と同じです。) テーブル1のフィールドAを主テーブルとし、テーブル2・3のフィールドAにリレーションを組んでいます。 この時のリレーションシップで参照整合性と連鎖更新と連鎖削除にチェックを入れ、種類が一対一になりました。 その後、テーブル1でレコードを追加しようとすると、「テーブル'2'にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更を行うことができません。」と出ます。 これを解決する方法はどうするのか、お教えお願いします。 分かりにくい説明ですいません。

noname#218560
noname#218560

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

No3 の回答者さんが言われてるように主従関係が逆になっていると思います。 リレーションシップ画面で結合線をダブルクリックしてリレーションシップの設定画面を確認ください。左側に表示されてるテーブルが主になりますが、左側にテーブル2が表示されてませんか。 もし、そうなっていたら、結合線を削除して、フィールドAをテーブル1の方からテーブル2の方へドラッグして設定画面を表示させてください。テーブル1の方が左に表示されてると思います。 こうしてから、連鎖更新、連鎖削除を設定してください。

noname#218560
質問者

お礼

回答ありがとうございました。 これが原因でした。 内容も詳しく書いてくださりとても役立ちました。 ありがとうございました。

その他の回答 (3)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

これ・・ テーブル1とテーブル2の主従が逆になっていませんか? 正しく設定してあればテーブル2に新たなレコードを追加しようとした場合に テーブル1に該当するレコードが無ければ テーブル1に・・・となるはずですよ。

noname#218560
質問者

お礼

回答ありがとうございました。 原因はこれっぽいです; 主従関係確認したら、判明いたしました。 究明ありがとうございました。

noname#192382
noname#192382
回答No.2

リレーションの連鎖更新と連鎖削除を外したら出来るようになるはずです。

noname#218560
質問者

お礼

回答ありがとうございました。 これが原因ではなかったみたいです。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

「ACCESS使って覚えようリレーションシップの考え方」 というサイトを参照。 リレーションシップは関連付けするもの、クエリと違うので使い方の説明を見直しても良い。 ACCESSCLUBのサイトにも事例、説明あるので確認。 この事例は間違いやすいのでー、機能理解が先かと思われますから再認識してみる。

noname#218560
質問者

お礼

回答ありがとうございました。 初心者には間違いやすい事例なのでしょうか・・・ 参考にさせていただきます。

関連するQ&A

  • Access2000のリレーションシップのエラーについて

    どのくらい説明すればいいのかわからないのですが、アクセス2000でリレーションシップの設定をするときに、 「主テーブルで参照されているフィールド用の固有インデックスがありません。」 というエラーメッセージが出てきてリレーションを作る事が出来ません。 問題なのは3つのテーブルのリレーションなのですが、それぞれのインデックスをチェックすればいいのだとは思いますが、対象となったフィールドは主キーではないので、重複は許可していますが、一応どちらもインデックスは作成しています。 どのようなリレーションシップかというと、業者テーブルと商品テーブルと販売履歴テーブルのリレーションで、 商品テーブルの業者IDと業者テーブルのIDのリレーション→左内部結合(商品テーブルの全フィールドに入れる) 業者テーブルの業者IDと販売履歴の業者IDのリレーション→右内部結合 は出来るのですが、商品テーブルの商品名と値段フィールドと、販売履歴の対応する部分についてのリレーションについてもたせようとするとエラーが出てしまいます。このようなリレーションはいらないのでしょうか? どちらも固有の値でない量のリレーションだからなのでしょうか? この二つのフィールドの参照整合性をどう保てばいいのか教えて下さい。

  • Access2002 参照整合性について

    テーブル間にリレーションシップを設定する場合、リレーションテーブル側に主テーブルにないレコードがあると参照整合性を設定できないにも関わらず、「結合の種類」で「3」(リレーションテーブル側の全レコードと主テーブル側の同じ結合フィールドのレコードだけを含める)を選べるのは何故でしょうか。 参照整合性を設定できた時点で、リレーションテーブル側には主テーブルにないレコードは無いということだと思うのですが・・・。 よくわからなくなってしまいました。 お答え、よろしくお願いいたします。

  • マイクロソフト アクセス リレーションシップの扱い方について

    よろしくお願いします。アクセスで作成したテーブル、例えばAとBには共通の番号があります。それぞれは各テーブル内で番号がいくつか重複しています。この番号により、リレーションシップの関連付け(参照整合性は行わず)を行った後、クエリで抽出したところ、ところどころ同じデータが発生して、膨大な量になってしまいます。参照整合性・フィールドの連鎖更新・レコードの連座削除をチェックして再度リレーションシップを作成しましたが、主テーブルで参照されている固有のインデックスが見つからないとのエラーメッセージが出ます。このテーブルA・Bを使用してデータが重複しないようにクエリで抽出する事はできますか。

  • Accessリレーションシップについて

    お世話になります。 Access2010 普段はクエリにて、いくつかのテーブルやクエリを紐づけているのですが リレーションシップの設定は今までやったことがありません。 ネットで調べて、 ・「参照整合性」にチェックを入れることにより、1対多の多側で1側に存在  しないIDで登録しようとするとエラーになる。   →間違ったデータが入力されるのを防ぐ。 ・多側でリレーションシップが設定されているフィールドに値を入力しない  ことは可能。但し、当該フィールドの「値要求」プロパティを"はい"に  した場合は、入力しないとエラーになる。 ・「フィールドの連鎖更新」にチェックを入れると、1側で変更したものが  多側でも自動的に変更される。 ・「レコードの連鎖削除」にチェックを入れると、1側で削除した場合、  多側で該当するデータをもつレコードが自動的に削除される。 上記については実際に試してみて動きを確認しました。 ※上記の認識違いや、もっと大事なことがあればご指摘、ご教示頂けると  幸いです。 今までは、こっちのテーブルで削除したらこっちのテーブルでも削除 みたいなことをやってたので、便利だとは思うのですが。。 以下のテーブルでリレーションシップの設定を行ったとします。 売上テーブル  ID 商品 担当者コード  1 AAAAA  3  2 BBBBB  1  3 AAAAA  1  4 CCCCC  2  5 CCCCC  3 担当者テーブル 担当者コード 担当者名  1     担当者A  2     担当者B  3     担当者C 売上テーブルの担当者コードと、担当者テーブルの 担当者コードでリレーションの設定を行い、「参照整合性」及び 「レコードの連鎖削除」にチェックを入れたとします。 例えばフォーム上にリストボックスを設置し ID 商品 担当者名 を表示し、リストボックス上で選択されたレコードを、削除ボタンを 押したら、そのレコードが削除されるプログラムを作成します。 ※選択されたレコードのIDを取得し削除クエリで削除。 リストボックスでID:5のレコードを選択し、削除ボタンを押した場合 売上テーブルのID:5のレコードを削除しても、担当者テーブルから 担当者コード:3のレコードは削除されない・・という認識でよろしい でしょうか。 ※要するに、1対多の多側で削除されても1側には影響無し。 同様にリストボックスでID:5のレコードを選択し、削除ボタンを押したときに 担当者コード:3を取得し、まずは担当者テーブルで担当者コード:3の レコードを削除すると、併せて売上テーブルのID:1及びID:5が削除 される。 要するに、上記のケースで「レコードの連鎖削除」の設定を行うと 本来削除すべきID:5以外のレコード(ID:1)まで削除されてしまう ことになる?? ※そもそも例がちょっと悪かったかもしれません。。 何が言いたいかというと、「フィールドの連鎖更新」「レコードの 連鎖削除」は、よーく考えて設定しないと意図しないところまで 更新されたり削除されてしまうのかなと。。なので、設定することに よって、プログラムの作りも変わってきてしまうことになるので しょうか。 理解不足で質問自体もモヤモヤしたものになってしまいましたが、 ご教示のほど、宜しくお願い致します。

  • リレーションシップ

    テーブルAとテーブルBでリレーションシップを組んでいて 紐づいてる値をどちらとも同じ変更したいのですが、 テーブルAの値を変更しようとすると、 テーブル’テーブルB’にリレーションシップが設定されたレコードが必要なので、 レコードの追加や変更を行うことはできません。 と表示され、 だったら先に、テーブルBの値を変更しようとすると、 テーブル’テーブルA’にリレーションシップが設定されたレコードが必要なので、 レコードの追加や変更を行うことはできません。 となってしまいます。 どちらも同じ値に変更したいのですが、どうすればよろしいでしょうか? テーブルAとテーブルBは一対多で参照整合性にチェックがついて紐づいています。

  • 未定義になるのは主キーじゃないのが原因?

    二つのテーブルを一対多のリレーションシップで繋ぐとき、 一になる方は主キーじゃないと、一対多にならなかったり参照整合性はできないのでしょうか? 主キーではないテーブル1のフィールド(一)と、(多)のテーブル2のフィールドでリレーションを組もうと思ってるのですが、 リレーションシップの種類が未定義になってしまいます。 これは、1になる方のテーブル1が主キーじゃないのが原因なのでしょうか? テーブル1のこのフィールドは、重複することはありませんが、空白も入る為、主キーにできないし、 主キーはほかのフィールドで使っています。

  • Accessの参照整合性について

    アクセスでリレーションシップをはると参照整合性にチェックするボックスがありますよね。 以下の選択の組み合わせが考えられると思うのですが、 1.参照整合性にチェックしない場合 2.参照整合性のみチェックした場合 3.参照整合性と連鎖更新にチェックした場合 4.参照整合性と連鎖更新と連鎖削除にチェックした場合 一(マスタ)対多のリレーションを張ったとき、以下のように理解しています。 2.のとき マスタにあるものしか登録できない。また、マスタは他のテーブルにリレーションを張っている場合、削除も編集もできない。 3.のとき マスタにあるものしか登録できない。またマスタで更新をかけると、他のテーブルのレコードも更新がかかる。また、マスタは他のテーブルにリレーションを張っている場合、削除はできない。 4.のとき マスタにあるものしか登録できない。またマスタで更新、削除を行なうと他のテーブルのレコードも更新、削除がかかる。 では1.のときってリレーションシップは張れるのですが、何の意味があるのでしょうか?

  • Accessのリレーションシップウインドウに奇妙な現象が・・助けてください(TT)

    「依頼2テーブル」と「担当者テーブル」という2つのテーブルを作っています。「依頼テーブル2」の名前に2があるのはあまり意味はありません。 「担当者テーブル」の「担当者No.」フィールドを主キーにし「依頼テーブル2」にも「担当者No.」を作成しリレーションを貼ろうとしているのですが、奇妙なことになってまして・・・・ 現象1 「ツール」→「リレーションシップ」でリレーションシップウインドウを開くとテーブル名が表示されますが、「担当者テーブル」と「依頼テーブル2_1」と表示される。 現象2 現象1をなんとなく気持ち悪がりながらも「担当者No.」を結合フィールドとしてリレーションを貼り、参照整合性も設定するとエラーもなく設定でき「担当者テーブル」が親、「依頼テーブル2_1」が子であることを示す線がちゃんと表示される。 現象3 現象2もかなり気持ち悪いと思いながらも、「上書き保存」をするが、再度リレーショナルシップウインドウを表示するとリレーションシップが解除されている。(結合を示す線が消えている) 現象4 もう、オカルトな気分満点な状態のままリレーションシップウインドウで右クリックし「全てのリレーションシップを表示」を選択すると「担当者テーブル1」~「担当者テーブル10」と「依頼テーブル2」が表示され、「担当者テーブル」、「担当者テーブル1」~「担当者テーブル10」の11個のテーブルと「依頼テーブル2」が「担当者NO.」を結合フィールドにして全てリレーションシップが貼られている 以上のような状態になっています。作成したテーブルは2つだけなのにこんなことが起こるんでしょうか? また、自宅PCと会社のPCで同じファイルを操作していますが、現象は変りません・・・・ ご存知の方・・・助けてください~!!!

  • アクセスの追加クエリについて(1対1リレーションシップの場合)

    お世話になります。 似たような質問はあるのですが、どれもしっくりこないので質問させて下さい。 アクセスで検査結果のデータベースを作ろうと考えています。 アクセスでデータベースを作製するのはこれが初めてです。 1製品毎に製造番号をつけ、各テーブルの主キーにしています。 テーブルは検査のタイミング毎に分け、それぞれの検査項目をフィールドに設定しています。 この方法だと各テーブルのリレーションは1対1になります(よね?) それで、新たに製品の詳細(製造日や数量など)を一括して登録したいと考え、製造番号を含むテーブルを作成しました。 このテーブルで入力した製造番号を他のテーブルにも自動で登録したいので、追加クエリでやろうとするのですが、 「0件のレコードを追加します」と出てしまいます。 データは適当にですが、入力はしています。 どうすれば実現できるのでしょうか? また、テーブルを分割しなければ製造番号を追加する必要もない訳ですが、 1つのテーブルに統合するべきなのでしょうか? その場合はフィールドは50個ぐらいになってしまいます。 大変お手数ですが、ご教示頂けると幸いです。 よろしくお願いします。

  • アクセスのリレーションシップについて

    出来上がっているデータベースの更新をしないとけなく、テーブルに追加しようとしたらリレーションシップが設定されているため追加できませんというメッセージがでます。 これは、一度リレーションシップを外して、テーブルに追加して、再度設定すればよろしいのでしょうか? 基本的なことがちょっとわかっていません。 ご存知の方よろしくお願いいたします。

専門家に質問してみよう