質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

5356閲覧

Access2016:テーブルAとテーブルBのデータを同時に削除したい

th_bridge

総合スコア15

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

1クリップ

投稿2017/06/21 02:56

編集2017/06/28 02:15

以下のようなフォーム画面があります。
イメージ説明

内容/数量/単価/小計/備考はサブフォーム、
他の項目はメインフォームです。

画面一番下の検索欄にワードを入力することで、
メインフォームのすべての項目を検索対象として
部分一致で該当するレコードを表示します。

この検索結果のデータを、画面右上の「削除」ボタンを押すことで、
テーブルから削除したいです。

メインフォームの内容は「テーブルA」、
サブフォームの内容は「テーブルB」にそれぞれ入っているのですが、
「削除」を一度実行して、同時に2つのテーブルのデータを削除することは可能でしょうか。

どちらのテーブルにも共通するフィールド「請求No」の値にもとづいて
テーブルAとテーブルBで共通する請求Noのレコードを一度の操作で同時に削除したいです。

■一連の流れ
フォーム画面でレコードを検索>「削除」をクリック>表示されていたレコードをテーブルから削除(テーブルは2つに分かれている)

一度やってみたのですが、メインフォーム(テーブルA)のデータは削除されましたが、
サブフォーム(テーブルB)のデータはそのまま残っている状態でした。

お分かりになる方がいらっしゃいましたら
お力添えいただけますでしょうか。

よろしくお願いいたします。

追加1:リレーションシップエラー
イメージ説明

追加2:請求書テーブルBの主キーを請求NOにしてのリレーションシップ
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Accessの場合はリレーションシップの機能で実現できます。

参照整合性とは(リレーションシップ)~マイクロソフトアクセス活用法

上記を参考にリレーションシップの設定で2つのテーブルを結合して、「参照整合性」と「レコードの連鎖削除」にチェックをいれておけば、メインフォームのテーブルを削除すればサブフォームのテーブルの紐付いたレコードが削除されます。

補足

一度やってみたのですが、メインフォーム(テーブルA)のデータは削除されましたが、
サブフォーム(テーブルB)のデータはそのまま残っている状態でした。

もし、そのままの状態ですと、リレーションシップで「参照整合性」にチェックを入れることができないので、テーブルBのテーブルAにない請求Noのレコードは削除しておいてください。不一致クエリをつかうと簡単にチェックできます。

画像をみて補足
請求書テーブルB の主キーを「請求NO」にしてください。
主テーブル側の結合フィールドは主キー(または重複なしインデックス)である必用があります。

ちなみに、テーブル定義SQLで、ON DELETE CASCADE の設定をすることをビジュアルなUIで設定できるようにしたのがリレーションシップ設定画面です。

投稿2017/06/21 03:36

編集2017/06/21 13:21
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

th_bridge

2017/06/21 08:46

いつもご回答ありがとうございます。 現在のリレーションシップでは「参照整合性」にチェックが入っていない状態です。 いただいたアドバイスに従い、テーブルAとテーブルBで不一致クエリを実行し、 BにありAに無いレコードを削除してリレーションを張ろうとしたのですが、エラーとなってしまいました。 ※画像を追加いたします。 データ型はどちらも「数値型」、インデックスは「いいえ」としています。 この場合、エラーとなる原因は何が考えられますでしょうか。
th_bridge

2017/06/27 01:47

補足いただきありがとうございます。 また、お返事が遅くなりまして申し訳ありませんでした。 別な作業で忙しく、こちらを見れずにおりました。 ご指示いただいた内容で試してみることにいたします。 取り急ぎ御礼まで申し上げます。
th_bridge

2017/06/28 02:17

ご指示いただいた内容で無事、参照整合性をつけた リレーションを張ることができました。 レコードの削除もイメージ通り動作することを確認しました。 今回もどうもありがとうございました。
guest

0

テーブルが親子関係にあるならキーを張ったのち、テーブルをカスケード ON DELETE CASCADE にすれば親テーブルを消せば子テーブルが同時に消えてくれると思います。

投稿2017/06/21 03:00

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

th_bridge

2017/06/21 08:44

ご回答ありがとうございます。 恥ずかしながらカスケードという言葉を初めて聞きましたので調べてみたのですが、 理解ができませんでした。 「テーブルをカスケードにする」というのは、どういうことでしょうか。
th_bridge

2017/06/27 01:48

追加のご説明ありがとうございます。 また、お返事が遅くなりまして申し訳ありませんでした。 別な作業で忙しく、こちらを見れずにおりました。 挙げていただいたサイトも見てみます。 取り急ぎ御礼まで申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問