<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--アクションクエリ
 [アクションクエリとは] [追加クエリ] [テーブル作成クエリ] [更新クエリ] [削除クエリ]  [マクロで自動実行 1 2 3 ] 



 ■追加クエリ

まずは、追加クエリなるモノのイメージをつかみましょう。
下の図を見てみてください。


基のテーブルがあります(緑)
追加先のテーブルがあります(黄色)

基のテーブルから、ある条件を満たしたレコードだけ取り出して(あるいは全件)、追加先のテーブル内の、指定されたフィールドに、データを追加していく、という趣旨のクエリーです。

まずは大まかにイメージつかんでください。
具体的な操作に入っちゃうと全体がつかみにくいと思いますんで・・・。

つまり、上の図でいくところの、ピンク色の四角で囲んだ部分、こいつをこれから作ろう、としているわけです。
で、そいつを「実行」すると・・・。



上の図のように、追加先のテーブル(紫)に、レコードが追加されます。
基のテーブル(緑)の方からレコードがなくなるわけではありません。
あくまでも、全く同じレコードを追加先のテーブルに追加していく、というイメージになります。


と、この辺を頭に入れていただいて・・・。
では、具体的に一度、追加クエリを作って実行してみましょう。


まずは・・・。
上の図でいくところの、緑色の方のテーブルを用意しましょう。


「追加分のテーブル」という名前にしてみました。
あ、みなさんテーブルの名前は何でもいいですよ。
でも、どっちがなんだかぜんぜんわかんない、ってのは、なしですからね。
なんて名前を付けたか、後でちゃんとわかるような名前にしておくとよいでしょう。

みなさん実感なさってると思いますけど、Access使うときのコツは「名前」をしっかり意識することです。
テーブルの名前、フィールド名、クエリーの名前、プロパティ名、テキストボックスの名前・・・みんな、名前でつながりを持ちます。
これがわけわかんなかったりおろそかだと、エラーが出てもどこを確認したらいいかわからないですもんね。

で、上のテーブルを基に、下のようなクエリを作りましょう。
普通のクエリです。

で、フィールドを全部選んで・・・。ココまでとりあえず作ってみてください。
まあ、別に特別なことはやらないんで、結果もちゃんと全部出ますよね。ためしに、データシートビューに切り替えてみてください。
・・・別に問題ないですよね。問題なさ過ぎてまだなんだかよくわからないとは思うんですけど・・・。

で、この選択クエリを、「追加クエリ」に変えます。
どうやって変えるか・・・ココが一番のポイントですね。


上の図のように、ツールボタンで切り替えるのです。
(メニューバーの[クエリ]でもオッケー)


すると「追加先のテーブルは、どれ?」といダイアログが出てまいります。
いろいろごちゃごちゃありますが・・・。
とにかく「練習のテーブル」を選びます。


え?なんでかって?
もーだから全体像をつかんでおいてくださいって言ったんですーっ。
ただでさえややっこしいんですから〜。
もう一度、一番上の図を見直してくださいね。



と、こうなりました。

少し変化が見られると思うんですけどどうでしょう。「レコードの追加」っていう欄が出てますよね。

注意して観察していただきたいんですけど、「レコードの追加」のところには、「練習のテーブル」の各フィールドが選ばれてるんです。
つまり、「追加分のテーブル」の「番号」フィールドの中の値を、「練習のテーブル」の「番号」フィールドに入れましょう、といってるんですね。

「練習のテーブル」と「追加分のテーブル」で、フィールド名をそろえておくと、こうやって自動的に結びついてくれます。
「練習のテーブル」で「番号」って名前にしているのに「追加分のテーブル」の方で「ID」とか「ナンバー」とかいうフィールド名にしちゃってると、自動的には結びついてくれません。そういうときは、上の図のように赤い丸印のトコをクリックして、フィールドの一覧の中から該当する追加先のフィールドを選びます。

まあ、このくらいならたいした手間でもありませんけど、おんなじデータベースの中くらい、フィールド名は揃えてテーブル作るようにしましょうよ。そういうことの積み重ねが、「リレーションシップ」であり「テーブルの正規化」となるのです。リレーションとか正規化を、ソフトウェアの機能と思ってはいけないですよ。


これで準備オッケーです。
アクションクエリの場合は、データシートビューへの切り替え(黄色いマル印)と、実行ボタン(緑のマル印)で動作が異なりますので、その辺のことお話しますね。


黄色のマル印の方は、アクションクエリの場合はほとんど使用しないと思ってください。正しい結果が得られるかどうかの確認用です。

実際に「練習のテーブル」へレコードを追加するのは、「実行ボタン」(緑色のマル印)をクリックしたときです。



で、このクエリ、後々繰り返しまた使うかも・・・という場合と、1回こっきり。もう使わないよ。という場合と考えられます。
後々繰り返し使う場合は、名前を付けて保存をしておきます(上の図でいうと赤いマル印のツールボタンをクリック)。

じゃあ・・・いちおう保存しましょうかね。練習ですから、とにかくひととおりやってみましょう。
わたしはQ_追加クエリって名前にしました。なんでもいいですよ。適当につけておいてください。



では改めて・・・ツールバーの「実行ボタン」をクリックします。

すると・・・。なにやら物々しいメッセージが出てきましたね。
確認メッセージです。エラーじゃないですよ。
追加するレコードが、「追加分のテーブル」側に3レコードあるわけですね。わたしのは3レコードあったんで、こんなメッセージが出ました。
「いいえ」をクリックすると何にもしません。
「はい」をクリックすると、処理を続行します。

・・・。でも、なんか何も起ってないような気がしますよね・・・。シーンとしてると思います。
じゃ、このクエリ、閉じましょう。



んでもって、「練習のテーブル」をデータシートビューで見てみましょうか。

レコード、追加されてます?

たまたま今回、一番下に追加されてますけど、これは別にいつも一番下に追加されるってわけじゃないんですよ。
テーブルって、データシートビューで開くと、だいたい主キー順に並んで出てきますよね。主キー順に見たら、たまたまこうなってたってことです。

追加クエリを使うとき、注意しなくちゃならないのは、追加先のテーブルにレコードを追加したとき、主キーがダブっちゃわないかってとこですね。
ダブったレコードはエラーになって、このテーブルの中には書き出されません。
「なんで主キーなんか作らなきゃならないの???」ってお話は・・・他のページでは何度かさせてもらったかもわからないですけど・・・それは、また別の機会にお話します。
とにかくこのテーブルの主キーは「番号」ですから、同じ番号が2度3度入力されることを拒みます。

こいつは確認ができればオッケー。閉じましょうか。


さて、どんな性質を持つクエリか、つかんでいただけましたか???

さっき、名前を付けて保存しましたよね。クエリ。んじゃ、もう一回使ってみます???

同じレコードをもう一回書き出すことはできないので(主キーがダブルからね)、無理やり内容を書き換えちゃいますかね。
「追加分のテーブル」の方、もう一回開いて、中身を全然別のデータに書き換えちゃってください。
書き換え終わったら、テーブル閉じて・・・。


クエリの一覧を見てください。
追加クエリって、アイコンの形がちょっと違うでしょう。プラスの記号みたいなアイコンになってますよね。
さっき作ったQ_追加クエリ、ダブルクリックしてみてください。
あるいは、左上の「開く」をクリックしてもオッケー。
これが、「クエリを実行する」という操作になり、選択クエリの場合はデータシートビューが開き、アクションクエリの場合は・・・実行されます。


と、こんなメッセージがまず出てきます。
「はい」の方をクリックしましょう。


そうすると、次にこのメッセージが出ます。
クエリのデザイン画面が出てる状態で実行するのと、閉じてるクエリを実行するのとでは、一つ前のメッセージが出る出ないの違いがあるようですね。



んでは、追加先の「練習のテーブル」を開いて確認してみましょう。

追加、されてますか???



追加もとのレコードが入ってるテーブルの方も・・・。
こちらは全然変化ないですよね。
追加したらからって、ココからレコードがなくなっちゃうわけじゃないのです。

じゃ、このテーブルも、「練習のテーブル」も閉じて・・・

で、もし・・・。このまま再び「Q_追加クエリ」をダブルクリックしたりして実行したとしたら・・・。
下のようなメッセージが出てくると思います。

以前、主キーのお話しましたよね。
今の動作は、「追加分のテーブル」の中のレコードを、もう一回「練習のテーブル」に追加しようとしてるわけですよね。
ってことは当然、A000021とA000022とC000001とC000002とC000003は、ダブります。
「番号」は主キーですから、A000021をもう一回書き込むことはできないよ、という状態なのです。

こんな話ばっかりしていると「主キーってめんどう、意味ないじゃん」って言い出す人がいそうな気がして気が進まないんですけど・・・主キーは主キーで、別の問題ですんで、ここでは「追加クエリを正しく動かすための知識のひとつ」と考えてくださいね。