Access削除時のレコード有無チェックの必要性について

このQ&Aのポイント
  • Access2010での削除処理時に、他のテーブルに該当レコードが存在するかをチェックする必要性について検討しています。
  • メインのテーブルである社員テーブルには全社員が登録されているため、削除クエリを実行する前に存在チェックを行っています。
  • しかし、該当レコードがなければ削除されないため、レコードの有無に関係なく削除クエリを実行してもよいのではないかと疑問に思っています。一般的には無条件に削除クエリを実行することが多いのでしょうか。
回答を見る
  • ベストアンサー

Access 削除時にレコード有無チェックは必要?

お世話になります。 Access2010 10個あるテーブルでそれぞれ社員番号を条件にVBAにて削除クエリを 実行してます。 メインのテーブルである社員テーブルには全社員が登録されて いるので、無条件に削除クエリを実行しておりますが、他の9個に ついては必ずしも該当レコードが存在するとは限りません。 なので、他の9個のテーブルについては削除クエリを実行する前に、 削除する社員番号が存在するかをチェックした上で(社員番号をキーに FindFirst)、存在したら削除クエリを実行してます。 今更ですが、わざわざチェックする必要があるのかな?と。。 元々は「社員番号が存在しないテーブルに対して、わざわざ削除クエリ を実行する意味がない」と思い、チェックするようにしました。 なんとなく、無条件で削除クエリをやるよりは  該当レコード有り?    Yes ⇒ 削除クエリ実行    No  ⇒ 何もしない とやった方がキレイかなと。 しかし、削除するレコードの有無に関係無く削除クエリを実行しても よいのでは?と思った次第です。 要するに該当するレコードが無ければ削除されないし、あれば削除 されるし。 一般的に削除クエリを実行するときは、無条件にやるものなのでしょうか。 ご教示の程、宜しくお願い致します。

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

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

どちらでもいいと思います。 この辺はプログラマーの好みですので。 私なら、チェック無しで削除クエリを実行するかな。 レコード存在チェック、削除クエリ実行と2度テーブルにアクセスするのが無駄に思いますので。 さらに言えば、リレーションシップを設定して、連鎖削除をオンにしておけば、一側のテーブル(マスターテーブル)のレコードを削除するだけで、関連付けされたすべてのテーブル内の関連レコードが自動で削除されますので、その機能を利用しますね。

naoto0216
質問者

補足

hatena1989さま いつもご回答ありがとうございます。 ちなみに、社員番号をキーにFindFirstする前に当該テーブルが EOFか否かのチェックもしてました。 「1レコードも存在しないのに削除クエリを実行する意味が 無い」ということでチェックしてたかと思うのですが、 このチェックも不要ですよね。 ※1レコードも存在しないのに、削除クエリ実行してエラーに  ならない?ってことを懸念。 仰る通りリレーションシップの設定すれば、関連付けされた テーブル全て削除できるんですよね。。 そういう機能があるのは知ってるのですが、使ったことが無い ので、思ってもないレコードが削除されやしないか心配で 使ったことがありません。

その他の回答 (1)

回答No.2

Q、削除時にレコード有無チェックは必要? A、不要です。

naoto0216
質問者

補足

f_a_007様 ご回答ありがとうございます。 やっぱり不要なのですね。 了解です。ありがとうございました。

関連するQ&A

  • Access「レコードが削除されました」のエラー

    お世話になります。 あるデータベースを作成し、クエリで条件抽出しています。 そのクエリを実行しても、「レコードが削除されています」という エラーが出てしまうようになりました。 どうしてなのか、どうしたらいいのか教えていただけませんでしょうか。 テーブル3つをリレーションしています。 テーブルAは、テーブルBとCにつながっています。 クエリA:テーブルAのチェックボックスAでYesの人だけを選択し、 それに連動するテーブルAのデータを選択したいと思っています。 カテゴリーごとに抽出できるようパラメータをいれ、 抽出条件に「yes」を入れてあるのですが、 実行するとエラーになります。 同じ条件で作成しているクエリBは、同様にテーブルBの チェックボックスBのYesの人だけを選択するようにしているのですが、 実行しても問題がありません。 同じ設定をしている2つのクエリなので、 あとは元のテーブルデータがおかしいのかと思っているのですが 情報はちゃんと入力されています。 情報の閲覧が出来ないので非常に困っています。 復活するときもあるのですが、不安定です。 どうかチェックする部分を教えてください。 なぜこういうことが起きるのかも教えていただければと思います。 私は素人なので、VB等は組めません。 クエリ上で行ないたいのですが、 どうしたら宜しいでしょうか。 Access2000、複数人で入力しています。 宜しくお願い致します。

  • アクセスのクエリでレコード削除ができません。

    アクセス超初心者です。 テーブルを商品コードでくっつけて、クエリのデザインビューで表示しました。 いらないレコードを削除しようとしたところ、できません。 くっつける前の、テーブルではできますが、クエリで実行させ、レコードを削除しようとしたところできません。 どうしたらよいのか教えてください。 あと、もうひとつ、クエリで、出力したいフィールド名をドラッグしたあと、削除したいときには、どうすればよいでしょうか? 表示しないなら、できるのですが・・・。削除がわかりません。 よろしくお願いいたします。

  • 一致するレコードを削除したい。

    質問します。ACCESS(office2000)を使って下記の様に実行したいのですが。 テーブルA         テーブルB 商品名、 管理番号    単価、 管理番号 パソコンA   101      \1,200  112 パソコンB  102       \1,300  102 パソコンC  103      \1,500  123           ↓ テーブルA 商品名、  管理番号 パソコンA  101 パソコンC  103 削除クエリを実行して管理番号が一致するレコードをテーブルAから削除したいのですが、削除クエリどうやって設定すればいいのでしょうか。どうかご教授をお願い致します。

  • Accessのフォームから削除したレコードをテーブルに保存したい

    Accessを利用してフォームからデータを入力しているのですが、クエリを使わずフォーム画面から不必要なレコードをコマンドボタンで削除しています。削除したレコードをテーブルに保存したいのですが、追加クエリで条件を決めずにフォームの画面から判断したレコードだけを削除し、かつ削除したレコードを削除専用のテーブルに追加する方法を教えてください。よろしくお願いします。

  • Access2003レコードの連鎖削除について教えてください

    Access2003レコードの連鎖削除について教えてください テキスト学習の経験のみです。 現在アクションクエリの操作をしていて疑問になったので教えてください。 「T会員マスター」で退会者も一緒に管理しているが、退会者の人数が多くなったので テーブル作成クエリで「T退会者テーブル」を作った。 その後退会者を「T会員マスター」から削除クエリを使用して削除する。という操作です。 「連鎖削除」にチェックを入れて「T購入履歴データ」からもその会員のレコードを削除する流れになっています。 <質問> 退会者のマスターは「T退会者テーブル」で今後も管理ができるのでいいと思うのですが、「購入履歴」はまったく削除されてしまうのは、問題がないのでしょうか? もし、問題があるとすれば「T退会者の購入履歴」というテーブルを作るものでしょうか? よく「削除クエリは実務では怖くて使わないよ」とありますが、やはりそういうものでしょうか? 実務経験があまりないので質問が分かりにくいと思いますが、よろしくお願いします。

  • 2つのテーブルで重複する値のレコードを削除したい

    削除クエリ?重複クエリ?について教えてください。 テーブル1 フィールド"番号"には 1 2 3 テーブル2 フィールド"番号"には 3 4 5 があるとします。 「テーブル2と重複しているテーブル1のレコードを削除する」 (この場合「3」が重複しているのでテーブル1の3が入力されているレコードを削除) としたいのですがどいゆうSQL文を書けばいいのかわかりません。 ご教授よろしくお願いします。

  • Access2007 削除クエリで複数テーブル削除

    Access2007で、削除クエリを作成しようとしています。 この削除クエリでは、AtblとBtblのテーブルから該当のレコードを削除したいのです。 Atbl           Btbl 発注No. フラグ        発注No.  10   1          10                 10                 10  20   0          20 といったように、Atbl.発注No.1つに対して、Btblは複数レコードあります。 これを、Atbl.フラグ=1 の条件の発注No.に該当するA,Btblのレコードを削除したいのです。 よろしくお願いします。  

  • アクセス削除クエリ「複雑すぎてできません」のエラー

    テーブルA(フィールド40個)があります。 削除クエリで、From *Aテーブル(すべて) フィールド30個 について Where  0 (数字ゼロ) の条件を入れます。 これを実行すると「クエリが複雑すぎてできません」が でてきます。 フィールド30個についてすべて0のレコードを削除したいのです。 どういう条件を入れればいいでしょうか?

  • ACCESS2007でレコードの条件付き削除

    よろしくおねがいします。 テーブル [仕訳伝票]、[仕訳明細]に 仕訳IDで 前者が1、後者がN のリレーション設定しています。 [仕訳伝票]の仕訳日のフィールドが削除日以前のデータを削除するのに次のようにしました。 「仕訳明細クエリ」作成 ※添付画像を見てください DoCmd.RunSQL ("delete FROM 仕訳明細クエリ;")で 「 実行時エラー'3086' 指定したテーブルから削除できませんでした 」 因みに 「仕訳明細クエリ」を開いてDeleteキーで手動削除すると仕訳明細のレコードは削除できましたが仕訳伝票のレコードは残っています。

  • Access2000の削除クエリで消してしまったデータの復旧

    Access2000を使用していますが、うっかり抽出条件を入れるのを忘れて削除クエリを実行してしまい、テーブルの中のレコードをすべて消してしまいました。バックアップを取っていなかったので、データが無います。 何か削除したレコードを復旧させる方法はありますでしょうか。難しいとは思いますが、どうぞ宜しくお願いいたします。

専門家に質問してみよう