練習2:売上集計データベース (3)
「削除クエリ」を作る
先ほど、「TEMP売上集計」のデータを消すとき、テーブルを開いて全レコード選択してDELETE、ってやりましたよね。
別に、あのやり方でもいいんですよ。
でも、テーブル開いてDELETEってやらなくても、テーブルのレコードを全部消す方法があるんです。「削除クエリ」ってやつを実行するんですよ。「削除クエリ」とは、「追加クエリ」の仲間で、テーブルのレコードを削除するためのクエリです。
ではさっそく、削除クエリを作ってみましょう。クエリを新規に作成してください。
図1:そうそう、それそれ
レコードを削除するテーブルは「TEMP売上集計」ですので、いつものようにこのテーブルを選択します。
図2:そう、その調子
全レコード削除するなら、特に何も必要ありません。テーブルを選ぶだけです。後は、削除クエリに変身させればOK。変身するには、右図のように「削除」というボタンをクリックします。
図3:それだ!
これで、削除クエリができました。
このクエリに名前をつけて保存しましょう。
保存したら、このクエリ、実行してみましょう。
「TEMP売上集計」テーブルのレコードが、残らず削除されるはずです。実行ですよ、実行。左上のほうに、ありますよね。「実行」。
「TEMP売上集計」を空っぽにしておいてください。
図4:オブジェクト名、案外大事よね
インポート操作の保存
では次に、インポートのところを、もうちょっと楽にできないか研究しましょう。
インポートの作業手順は、名前をつけて保存しておくことができるんです。いちいちテキストウィザードを開始する必要も無いので、ちょっとは便利になると思いますよ。
今回の処理では、毎日テキストファイルの名前が変わるので、全部自動化、というのはちょっと難しそうです。ファイル名がいつも同じならいいんですが、インポートするファイル名を指定する必要がありますからね。その辺も含めて、見ていきましょう。
では、1月7日のデータをインポートしましょう。
まずはいつもどおり、「TEMP売上集計」テーブルにインポートしてください。
図6:4回目だぞ、インポートウィザード
テキストインポートウィザードがひととおり終わって、完了すると、最後に「インポート操作の保存」という画面が出てきますよね。この画面までがんばって進めてください。
今まではスルーしてきたこの画面、いよいよ活躍のときです。「インポート操作の保存」にチェックを入れてください。
名前も、わかりやすいものに変えたほうがいいんでしょうが、今日のところはこのまま先に進みましょう。
図7:インポート操作を保存するアル
右下の「インポートの保存」ボタンをクリックします。
これで、インポートの操作が保存されました。
どうやって使うかは・・・。と、その前に、せっかく1月7日のデータをインポートしたんですから、忘れないうちに「売上集計テーブル」に追加しておきましょう。
図8:保存します
え?どうやるのかわからないって?
まさか、冗談でしょ?ハハハハハ。
追加クエリを実行して、その後、削除クエリを実行してください。
図9:追加してから、削除ですよ。
保存済みのインポート操作
では、また日が一日経って、出荷センターから1月8日のデータが送られてきました。早速、インポートしましょう。
タブメニュー「外部データ」をクリックし、リボンの中から「保存済みのインポート操作」をクリックします。
図10:保存できてるかな
「データタスクの管理」という小窓が開きます。
おっ、さっき保存したインポート操作、あるではありませんか。うーん、やっぱり、もっとかっこいい名前をつけておけばよかったですね。
もし、毎日出荷センターから送られてくるファイルの名前がいつも同じなら、このまま実行すればいいだけなんですが、残念ながら・・・・・今日送られてきたファイルの名前は、20090108.txtなんですよね。
なので、このまま実行するわけにはいかないです。
20090107.txtはもう、インポート済みですもんね。
図11:おお、ちゃんと保存されてるじゃん
右側に、インポートするファイル名が表示されていますね。そのファイル名のところを気合を入れてダブルクリックします。いや、気合は入れなくてもいいかな。
すると、何やら、ファイル名を変更できそうな様子。
図12:おおっモーゼの十戒のごとく
今日取り込む予定のファイル20090108.txtに、無理くり書き換えます。
図13:ファイル名は変えさせてもらった
ファイル名を変更したら、実行しましょう。左下の「実行」ボタンをクリックします。
図14:実行ニャー
終わると、メッセージが出ます。OK。サンキュー。
図15:終わったな・・・
「TEMP売上集計」テーブルを開いて、内容を確認しましょう。1月8日のデータが入りました?
図16:1月8日はどんな日だったかな?
で、後は、くだんのアクションクエリたちを順番に実行すれば、1月8日のデータの取り込み作業は完了です。
実行する順番間違えたら意味無いですからね。追加クエリから動かしてくださいよ。
図17:ワンツー
あれ?このファイル、インポートしたっけ?
誰だってうっかりはあるものです。
例えば、今日はもう、1月8日のデータの取り込みは終わったのに、「あれ?取り込んだっけ?」なんて思っちゃって、もう一回インポートの操作を開いて・・・なんてこと、絶対無いとは言い切れないですよね。
1月8日のデータが2回入っちゃったら、出荷数や売上の計算も倍になってしまって、分析どころではなくなってしまいます。
でも、残念ながら、私たちのうっかり操作をAccessは見切ることができないんです。
うっかり操作による重複を防ぐためにも、テーブルには主キーを付けておきたいところなんですが、オートナンバー型の「ID」じゃ、こういうとき、意味を成さないですよね。
図18:ああっ、もう一回実行したら、駄目だよ!!!
そんなわけで、100%避けることはできないんですが・・・・でも、何もしないよりはマシ、ってことで、「このファイルはインポート済みか否か」をチェックする術を考えておきましょう。皆さんは、どうすればいいと思いますか?
え?VBAならできるんじゃないかって?手段じゃなくて、考え方の話をしているんですよ。どうすればいいかわかんなきゃ、VBAであれこれいじったって何にもできませんよ。
「TEMP売上集計」の中の「売上日」と同じ日付が「売上集計テーブル」にあれば、既にインポート済み、ってことに、なりませんかね?この二つを比較すればいいんじゃないかって、思いません?
図19:どうすればいいか考えよう
と、いうわけで、クエリを作ります。
図20:クエリクエリクエリークエリーをー作ーるとー
このような、二つのテーブルのレコードを、主キー以外のフィールドで比較するクエリは、いくつか作り方があるんですが、今日はシンプルなやり方でやってみましょう。
比較するテーブルを選んでください。
図21:この二つを比較するアルよ
まず、二つのテーブルの関係を明らかにします。「商品コード」同士をドラッグして結び付けてください。
図22:二つのテーブルの関係は?
「売上集計テーブル」のほうから、フィールドを3つ、選びましょう。それぞれダブルクリックすれば、選ぶことができますね。もちろん下にドラッグしてもOK。「こっちのほうが自分にとっては操作しやすいなぁ」という方で選択してください。
「売上日」だけあれば比較できるんですが、それじゃどんなクエリを作っているのか実感しにくいので、3つとも選びましょう。
図23:3つ選択しよう
ここからがちょいと難しいです。
「売上日」の抽出条件を指定して絞込みをするんですが、その条件とは・・・・??
「TEMP売上集計の売上日と同じ日付のレコードが既にあるかどうか」です。
まず、「売上日」の列幅を少し、広げましょう。
久しぶりに出てきましたが、列幅広げるときのマウスポインタの形、覚えてます?
図24:列幅広げるには、十文字ポインタのままドラッグ、だよな
「売上日」の抽出条件として、右の図のように入力します。
TEMP売上集計.売上日
です。これで、TEMP売上集計テーブルの中の売上日フィールド、という意味になります。間は半角のドットです。
カーソルを他の場所に移すと、右下図のように勝手にカギカッコが付きます。
カギカッコが付かない場合は、たぶん、どこか入力内容が間違ってます...半角のドット、ちゃんと入力してますか?
図25:抽出条件を指定しよう
入力できたら、表示してみましょう。
図26:ちゃんと出るかな?
もし、うっかり1月8日のファイルをもう一度インポートしてしまっていたら、もう既に「売上集計テーブル」には1月8日のデータがあるので、右図のように217件が表示されるはずです。つまり、追加クエリを実行してはならない、ということですね。
うっかりインポートをしていなければ、このクエリの結果は0件のはず。そもそも、「TEMP売上集計」が空っぽなので・・・。
また、1月9日のファイルをインポートした状態なら、「売上集計テーブル」にはまだ1月9日のデータは入れてないので、このクエリの結果は0件になるはずです。
図27:頭を柔らかくして考えよう
イマイチよくわからない、ですって?
うーん、まあ、仕方ないですね。クエリはすごく奥の深いもので、パズル解いてるみたいなものなので、多少、慣れが必要です。今日のところはよくわからなくても大丈夫。先に進みましょう。
このクエリに適当な名前をつけて保存します。
図28:なんか名前付けよう
これで、ひととおり、材料は揃いました。
明日から、出荷センターからファイルが届いたら、右図の順番で処理をすればよいのです。
だいぶ、手間が省けるようになりましたね。
手順は覚えればいいんですが、でも、もし、皆さん以外の人にこの仕事を任せるとしたら・・・。実行する順番、間違えちゃうかもしれませんよね。それに、追加クエリや削除クエリを実行するときに出る、確認のメッセージ、あれも、文言が少々堅苦しいので、Accessに慣れていない人が見たらびっくりしちゃうかも。
そうだ、順番に操作すればいいように、メニュー画面を作りましょうか。
ユニバーサルとはいきませんが、多少は、わかりやすく導くことができると思います。
図29:ええと、どれが最初だっけ?
このページのまとめなど
- 削除クエリとは、テーブルのレコードを削除するためのクエリ。
- 追加クエリ、削除クエリの他に、更新クエリ、テーブル作成クエリをまとめて「アクションクエリ」と呼んだりする。
- 一連のインポート操作は名前をつけて保存することができる。これはAccess2007の新機能だ。たぶん。
作成日:2009-01-14