![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
アクセス初心者です。会社で会員管理に使っているアクセスのデータがこわれてしまいました。入力だけに携わっていたのですが、急きょ勉強して修復に努めています。現在データベースが3つあり、メインフォームにサブフォームを2つ作り、その3つのデータを反映させています。壊れる前はこの3つをリレーションしてありましたが、現在リレーションができていません。それなのにフォームでは3つのデータが関連付けられた状態で表示されます。3つのデータには会員番号という同じフィールドがありますがリレーション以外に何か関連付ける方法があり、それがどこかではたらいているのでしょうか?また、リレーションしようとすると主テーブルににデータがないため参照整合性の規則に違反していると出てしまい処理ができません。本当に超初心者で申し訳ありませんがとても困っていますのでよろしくお願いします。
No.2ベストアンサー
- 回答日時:
> リレーション以外に何か関連付ける方法があり、
> それがどこかではたらいているのでしょうか?
フォームをデザインビューで開いてサブフォームを選択し、メニューの
「表示(V)→プロパティ(P)」などでプロパティシートを開いて下さい。
その「データ」タブで、「リンク子フィールド」「リンク親フィールド」に
同じデータ型のフィールドを設定した場合、フォーム-サブフォームの
レコードが連動表示(→「親」側と同じ値の「子」に表示を限定)されます。
> リレーションしようとすると主テーブルにデータがないため
> 参照整合性の規則に違反していると出てしまい
「一対多」型の参照整合性リレーションシップを設定するのでしたら、
「多」側にしかないデータを「一」側に追加してやるしかないと思います。
「多」側にしかないデータの抽出は、例えば「一」側をテーブル1、
「多」側をテーブル2とすると、
Select テーブル2.ID From テーブル2 Left Join テーブル1 On テーブル2.ID=テーブル1.ID Where テーブル1.ID Is Null;
というクエリで行えます。
(新規クエリの作成時に、「不一致クエリ」を選択すると楽に作成できると
思います)
なるほど、フォームとサブフォームはそんなところで、関係付けられていたんですね。リレーションについては教えていただいた方法でやってみます。会社が休みに入ってしまい、今データに触れないのですが、年が明けたら早速確認してみます。
No.3
- 回答日時:
(1)スキャンディスクを完全で行いディスクエラーに起因するトラブルを回復する。
(2)データベースメニューで<修復>を行って結果を確認する。
これで復旧しなければ、バックアップの出番です。
バックアップ時点に遡ってデータ入力を行う。
これが基本。
さて、バックアップしていないのでしょうね。
そうすると、ここでの質疑応答で解決しようとしても無理ではと思います。
そう思いつつも少し復旧要領を示しておきます。
先ず、関連テーブルの全レコードが表示されることが前提です。
この前提がクリアされていれば以下を参考にされて下さい。
<会員名簿>
会員番号 氏名 入会年月日
1001 鈴木 一郎 2006/10/10
1002 中村 太郎 2006/11/11
<会員別注文履歴>
ID 会員番号 注文日 品目
1 1001 2006/12/01 A
2 1001 2006/12/02 B
3 1002 2006/12/03 C
というテーブル構造を例に話を進めます。
<リレーションシップ>
会員別注文履歴.会員番号---->会員名簿.会員番号
参照整合性のレ点を外す!
まずは、リレーションシップをこのように修正します。
次にテスト用選択クエリを作成します。
<選択クエリ>
SELECT 会員別注文履歴.ID, 会員別注文履歴.会員番号, 会員別注文履歴.注文日, 会員別注文履歴.品目, *
FROM 会員名簿 RIGHT JOIN 会員別注文履歴 ON 会員名簿.会員番号 = 会員別注文履歴.会員番号;
ID 会員別注文履歴.会員番号 注文日 品目 会員名簿.会員番号 氏名 入会年月日
1 101 2006/12/01 A 101 鈴木 一郎 2006/10/10
2 101 2006/12/02 B 101 鈴木 一郎 2006/10/10
3 102 2006/12/03 C 102 中村 太郎 2006/11/11
ID 会員別注文履歴.会員番号 注文日 品目 会員名簿.会員番号 氏名 入会年月日
1 101 2006/12/01 A 101 鈴木 一郎 2006/10/10
2 101 2006/12/02 B 101 鈴木 一郎 2006/10/10
3 102 2006/12/03 C
上述のようなリレーションであれば、仮に会員名簿の[102]が参照できなくてもエラーは発生しません。
このように、当該のデータが空文になるだけです。
この空文になる<会員別注文履歴>をゼロにすることが復旧の目的です。
方法は2つ。
<会員別注文履歴>を削除するか、対応する<会員名簿>を作り上げるかです。
この修復が完了したら、参照整合性にレ点を付けても構いません。
この修復が完了したら、リレーションシップを元に戻します。
<リレーションシップを元に>は、既存のクエリを調査すれば判ると思います。
詳しいご回答ありがとうございました。
突然アクセスの画面に「~エラーを修復しますか?」と出たので「はい」を選んだら、参照すべきアクセスが消えていました。
以前にもあったので、外部メモリーに入れてあった前日のバックアップを戻し開いたら、検索をかけるたび「ブックマークが~」と出てアクセスが動かなくなりました。(2)<修復>を試みたのですが出来ませんでした。
とりあえず、エクスポートできたデータをもとにテーブルを作り直したので、対応しないものができてしまったのだと思います。教えていただいたように選択クエリを作って空白の部分を調べ、完全なものにしてからもう一度リレーションシップをしようと思います。
No.1
- 回答日時:
クエリーとか。
私もアクセスを触っていますが、自分で組んでテーブルを増やすうちに
煩雑化し、整理できなくなった状態で使い続けています。
なので、きちんとした回答はできそうにありませんが、クエリーで
テーブルから必要な情報を取り出したり、それぞれのテーブル(もしくはクエリー)の
「コレとコレは同じもの」と教えたりしているうちに、リレーションシップは
勝手に出来上がっていました。
自分でどうにかしたことはありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) アクセス フォームの自動入力 1 2023/03/20 00:18
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- Access(アクセス) ACSESS初心者です マンション管理をACCESSで出来ないかとチャレンジしています。 リレーショ 3 2022/10/08 11:45
- Excel(エクセル) Excelについて教えてください。 帳票データがあります。 アクセスに取り込むため、 データ形式にし 1 2022/06/08 19:59
- Access(アクセス) Access2016でフォーム内にExcelの複数シートを 表示させるイメージで複数テーブルの デー 1 2022/11/25 15:30
- Access(アクセス) スキルシートのエクセルの項目に 2 2023/04/04 22:41
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
3つの表を1つに縦に連結する
-
Accessレコードの追加や変更が...
-
access テーブル内のレコード...
-
時間の足し算
-
ACCESSに同時アクセス(編集)を...
-
リンクテーブルを CopyObject ...
-
2つのテーブルを比較して一致し...
-
フォームの計算がテーブルに反...
-
SQLで条件指定結合をしたいがNU...
-
Accessでテーブルからテーブル...
-
INSERT時にデータ登録とmaxの発...
-
採点のDBを作りたい
-
Accessの追加クエリで既存のテ...
-
ツリー構造をRDBで表現するには?
-
【Access】2つのテーブル 複数...
-
ACCESSのSQLで数値型に変換する...
-
デザインビューで、連結式 を...
-
accessのマクロでODBC接続で外...
-
ACCESSのクエリ内のテーブルが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
ACCESSに同時アクセス(編集)を...
-
Accessクエリでの、LIKE条件
-
Accessでテーブルからテーブル...
-
access テーブル内のレコード...
-
デザインビューで、連結式 を...
-
2つのテーブルを比較して一致し...
-
3つの表を1つに縦に連結する
-
ACCESSで指定されたテーブルか...
-
Accessレコードの追加や変更が...
-
Accessの追加クエリで既存のテ...
-
Accessでvlookupみたいなことは...
-
SQLで条件指定結合をしたいがNU...
-
ツリー構造をRDBで表現するには?
-
SQLで日付を条件に削除したい
-
リンクテーブルを CopyObject ...
-
Accessのサブフォームで#Name...
-
時間の足し算
-
INSERT時にデータ登録とmaxの発...
-
SQL: SELECT UNIONすると文字数...
おすすめ情報