• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESS:参照整合性がとれない)

ACCESS:参照整合性がとれない

space_needleの回答

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

提案テーブルの内容を全自動で管理テーブルに書き込むのは、Accessにトリガ機能が無いため、不可能です。 したがって、フォームの中で機能を作りこむ必要があります。 先にデータが追加されるのが提案テーブルなのであれば、管理テーブルの「コード」はオートナンバでなく、長整数型などにしておく方が良いでしょう。 提案テーブルに追加する処理の中で、追加クエリを実行するか、VBAでInsert文を実行することで実現するしかありません。 ただ、なぜ提案テーブルと管理テーブルが必要なのかがよくわからないのですが。 管理テーブルに提案テーブルの内容は全て書かれているようですので、管理テーブルだけにして、提案テーブルは選択クエリの形で持っておけば、データは完全に一致しますし、フォームでもテーブルをベースにするのではなく、選択クエリをベースにすればすむので、もし理由が無いのであれば、これをお勧めします。

_shino_
質問者

お礼

ありがとうございます。 教えてくださった通りにやったら、できました。 本当にありがとうございました。

_shino_
質問者

補足

回答ありがとうございます。 補足すると、私は自分の職場の業務改善を担当していまして、職場の方からの改善要求を出して頂いて、要求に対する改善の進行状況を把握・提示するためのツール作りをしています。改善要求は、提案テーブルに提案内容を記入するだけにし、できるだけ提案しやすい形にしたいと思い、管理テーブルと別にしました。 回答くださった方法でやってみたいと思います。

関連するQ&A

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

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

  • リレーション?参照整合性の謎?

    Ac2000です。 「T_メンバー一覧」(テーブル) ・ID ・名前 ・所属 「T_マスタ」(テーブル) ・ID ・名前 ・所属 ・備考 とします。 それぞれからフォームを作成し、「F_マスタ」のフォーム上で IDはコンボボックスとし、ここでIDを指定すれば 名前と所属が入るようになっています。 「T_メンバー一覧」に変更があった場合(所属が変わるなど)に、 「T_マスタ」も自動で変更されるようにしたいのです。 T_マスタにデータが入っている場合です。(1件のみ) リレーションをはり、ID同士で設定しました。 「参照整合性」にチェックをし作成しようとすると、 「T_マスタ」テーブルのデータが参照整合性の規則に違反しています。 たとえば、ある社員に関連するレコードがリレーションテーブルにあるときに、 この社員に関連するレコードが主テーブルにありません。 ・・・・ となってしまうのです。 T_マスタにデータが入っておらず、上のリレーションが成功したあとに、 入力をしようと、F_マスタを開き、IDを選択して、 フォームを閉じようとすると、 「テーブル 'T_メンバー一覧'にリレーションシップが設定されたレコードが必要なので、 レコードの追加や変更は行うことはできません。 となります。 この2点を解決する回避策を教えてください。

  • ACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

    フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。 売上テーブル  ID   商品コード  日付    金額   1    G1     20080101  532153  2    G1     20080101  564281  3    G1     20080301  538123  4    J4     20080301  124531  5    J4     20080302  125483 ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型 これを使い、 フォームではまず レコードナンバーを入力画面        ↓ レコード番号を入れると、そのレコードのデーターが画面に表示され、 その画面で修正可能        ↓  保存 ボタンで保存 という流れです。 レコードナンバーはIDを使おうと思っています。 データの量が莫大な為、コンポボックスなどは使えません。 できるだけ、VBAなどは使わずに作りたいです。 よろしくお願い致します。

  • Access 複数テーブルのレコード自動更新

    Access初心者です。会社で業務の進捗状況を、Access2002を使って管理しています。 フィールド数が増えたので、以下のようにテーブルを分けることになりました。 Aテーブル(メイン)   管理No.(主キー、オートナンバーではない)    カテゴリ    作業内容    : Bテーブル   管理No.(主キー、オートナンバーではない)    チェック項目B-1   チェック項目B-2    : Cテーブル   管理No.(主キー、オートナンバーではない)    チェック項目C-1   チェック項目C-2    : という形式で、AとB・Cはクエリのリレーションシップで、「管理No.」を1対1で関連づけています。 AテーブルのもとのデータはExcelからインポートしますが、 Aテーブルのレコード数は増えますが、クエリには反映されません。 Aのレコードが増えたら、BやCも同時に増やすことはできますか?

  • ACCESS/VBA 追加レコードが表示されない

    ACCESS 2003 で開発しています。 フォームのデータソースがテーブルAで、テーブルAの主キーはオートナンバーです。 フォーム上のボタンをクリックすると、追加クエリを実行して、テーブルAに1レコード追加し、 フォームにそのレコードを表示したいのですが、 クエリ実行前の最終レコードが表示されてしまいます。 テーブルAを見ると、オートナンバーがふられたレコードが末尾にちゃんと追加されています。 Dim dbs As Database Dim Qdf As QueryDef Set dbs = CurrentDb Set Qdf = dbs.QueryDefs("Q_データ追加2") ←追加クエリ Qdf.Execute Me.Refresh '* 最終レコードを表示 DoCmd.GoToRecord , , acLast どのようにすれば、直前に追加したレコードをフォームに表示できるのか おわかりの方がおられましたら、お教え下さい。ちなみに、ACCESSは、   「既定の開くモード 」:共有モード   「既定のレコードロック」:ロックしない      という設定になっています。 よろしくお願い致します。

  • Accessで、オートナンバー型を主キーにして関連テーブルを作った場合

    いつも大変お世話になっております。m(_ _)m (1)以下の設定で自動採番させた管理No.を主キーとし、テーブルを作りました。 データ型:オートナンバー型 書式:"ABC-"000 これで、ABC-から始まる3ケタの連番が自動採番されます。 (2)関連テーブルを作りました。 関連テーブルの「管理No.」は、上記と同じ設定をすると「オートナンバー」でデータが競合するのでは?と思い、テキスト型としました。 (1)を元にフォームを作成しました。 サブフォームを挿入し、(2)のデータを表示させました。管理No.でリンクする作りとなっています。 (1)の情報が1に対して、(2)の情報は複数あります。 管理No.がオートナンバーでない場合、上記のようなフォームを作って、(1)に情報を入力し、(2)に詳細情報として複数のデータを入力すると、(2)の「管理No.」は入力しなくても自動的に同じものがふられていきます。 しかし、今回は(2)に管理No.がふられないだけでなく、ページ内でエラーが発生し、フォーム自体もきちんと表示されません。 原因は、テーブルの作りにあるんでは?と思っています。 この場合、どのように作成すればいいのか教えてください。 やりたいことは、(2)のテーブルに同じ管理No.をいくつも入力しなくても済むように、管理No.でリンクしたサブフォームを作り、必要な情報(管理No.でない情報)を入力すれば、自動的に管理No.がふられるようにしたいのです。 いつもはできます。今回だけできません。 質問の内容が分かりにくい場合は補足します。 大至急の回答をよろしくお願い致します。

  • 多側のない1側レコードに多を入力するには

    こんにちは、いつもお世話になっています。 ウィンドウズ7 Access2010 質問なのですが、 1対多でリレーションされたテーブルレコードに、 1の中に多が一つもないレコードに対し、共通のレコードを追加することができますか? 以下例 1側テーブル  行コード(オートナンバー):1  行:あいうえお  行コード(オートナンバー):2  行:かきくけこ  行コード(オートナンバー):3  行:さしすせそ     中略  コード:10 行:わをん 多側テーブル  分類コード(オートナンバー):1  行コード:1  分類:母音  分類コード(オートナンバー):2  行コード:3  分類:子音  分類コード(オートナンバー):3  行コード:7  分類:子音 この場合、 1側テーブルの行コードが2、4~6、8~10の多側が入力されていません。 この未入力の多側テーブルに共通のレコードを入力したいのです。 ただし、共通と言っても、分類コードはオートナンバーで、 行コードは1側のテーブルに対応した数字を入力してほしいです。 おそらく、クエリで多側のない1側を抽出することはできると思います。 しかし、多側のない1側に一斉に?楽に入力するには何かいい方法がないでしょうか。 説明不足でしたらすみません、補足いたします。 すみませんが、どなたかご教授お願いいたします。

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

    リレーションシップとクエリ内部結合の違いについて リレーションシップとクエリ内部結合(リレーションシップ)の違いは参照結合性や連鎖更新、連鎖消去設定の差だけでしょうか? データ型のオートナンバーは一度使用した番号はレコードデータを消去しても、二度と使えないのでしょうか? 任意の番号に指定しようすると、オートナンバー型のIDフィールドに連結されているため編集できません となります。

  • ACCESS初心者です

    仕事で顧客管理台帳を作成しています。 顧客台帳をフォームで入力できるようにしました。 その中で、生年月日と年齢を入力する項目があるのですが、年齢を自動的にだせる方法はありますか? クエリでは自動的にだせたのですが、フォームには反映しないのでしょうか? または出来る方法はありますか?

  • Access:フォームをクリック!該当レコードを開くには?

    Aテーブルを参照している2つのフォームがあります。 Bフォームは、Aテーブルの全内容を表示し、 Cフォームは、特定の項目のみを表示します。 そこで!Cフォームで、詳細を見たいレコードをクリックすると、 Bフォームの該当レコード(全内容)が開かれるようにしたいのですが、 可能なのでしょうか。 VBAは初心者ですが頑張りますので、ぜひ教えてください。