<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 MS-Access97超入門>アクションクエリ
 準備 更新クエリ 追加クエリ テーブル作成クエリ 削除クエリ



■更新クエリ

例えば、「単価を全部2割値上げする」とか、何か一定の法則に基づいてテーブルの中のデータを変更したいときなどに使うクエリーです。

あんまりランダムな処理はできませんけれど・・。
じゃ、いっこ作ってみましょうか。「単価を2割値上げする」処理を作ってみましょう。
とりあえず、今、どの商品の単価がいくらか、だいたい頭に入れといて下さい。

今作ったテーブルを基にして、クエリーを新規作成します。

まず第一段階として「2割値上げした値段」を求める式を作ります。

1.[単価]をグリッドに選びます。

2.その右側(どっち側でも別にいいんですけど)、むりやり式を入力します。

新価格:[単価]*1.2

[新価格]という仮のフィールドをクエリーの中で作ります。
で、その中身はというと・・・テーブルの中の[単価]というフィールドに1.2掛け算するぞ、という意味です。
:とか[ ]とか数値とかは当然ですが半角です。
ちょっと画面だと見にくいんですけどね・・。
半角とか全角とかは、意識して入力するくせを付けた方がいいと思います。

んで、このクエリーをちょこっと実行してみましょう。
クエリーを実行するのは・・・???
ツールボタンの中のどれかをクリックすれば、実行結果を確認できましたよね。えーと・・・。


どうでしょう。計算してます?
[新価格]っていう、基のテーブルに存在しない新しいフィールドが作られて、1.2掛けた数値が出てます?

確認できたら、青い三角定規ボタンをクリックしてデザイン画面に戻ります。

こうやって、クエリーの中で、新しい値を計算したりできるんですよ。横向きの計算だけですけどね。
こういう操作は、更新クエリーでなくても役に立ちますから、別途押さえておかれるとよいと思います。

横計算は簡単なんですけどね。縦の計算は、クエリーでちょっとイメージ違っちゃうんですよね・・・。
まあ、それはまた別の機会に・・・。

さて、ただ新価格を知るだけなら、このクエリーにこのまま名前を付けて保存しておき、必要なとき開けば(実行すれば)、すべての商品の1.2倍の価格を知ることができるのでこれでオッケーなんですけど・・・。

テーブルの中の[単価]というフィールドの値を、もう根こそぎ1.2倍にしてしまいたい・・・というとき、いよいよ更新クエリーの出番です。

どうするかというと・・・

3.[新価格]のフィールド欄に入力した式は削除します。

といってもただ削除してしまうのはもったないので、ぐーっとドラッグして式全体を黒く反転させてから、キーボードの[Ctrl]+[X](コントロールキーを押しながらXのキーを押す。指2本使用)を押しましょう。
「切り取り」という操作です。ただ削除するだけではなくて、クリップボードというパソコン内の特別な記憶領域に、一時的にこの式が記憶されます。

メニューバーの[編集]にも「切り取り」というのがありますから、これ選んでも同じですね。まあ、左手が空いてるようでしたら、キーボード操作も活用してみて下さい。

4.クエリーを更新クエリーにします。

んで、ツールバーを見ます。[クエリーの種類]というツールボタンがあります。このボタンの右側の、小さい▼マークの細いボタンをクリックすると、クエリーの種類を変更できるようなメニューが出てきますので、更新(U)を選びます。

なんか、ちょぴっとだけグリッドの雰囲気、変わったと思いません?
「更新クエリーのデザイン画面」になったんですけど・・・・。

5.どう更新してほしいのか、式や数値を書きます。

で、注目すべきは[単価]の下の「レコードの更新」というとこ。こんなの、選択クエリー作ってるときはなかったですよね。
ここに、更新クエリーを実行したとき、[単価]をどうしたいのか、式とか値とかを書き込みます。

ここに500って直接数値を書くと、全部500円になるんですね。

それじゃ困るんで、ここに1.2倍になる式を書きます。さっき切り取ったやつがまだクリップボードにあるはずなんで、あれを使おう。
[単価]の真下の「レコードの更新」というところをクリックしてカーソルを出します。

んで、キーボードから[Ctrl]キー+[C]キーとやります。

さっき切り取った式が、ぺたっと貼りつく感じで現れます・・・よね。。。現れなかった人は、直接式を入力しましょう。

でもでも、この式、[新価格]:っていうところは、要らないんですよ。
だから、うまくカーソルを左の方に動かして、そーっと[新価格]:を消します。

最終的に「レコードの更新」欄に

[単価] * 1.2

という式が入力された状態にします。


ここから先は、このクエリーの扱いには注意しないといけないです。
このクエリーは、選択クエリーのように情報を表示するクエリーではなく、テーブルの値を直接書き換えます。それが目的なんですけどね。
まず一回実行して[単価]が1.2倍になったら、「元に戻す」ということはできません。
何度も何度も実行すると、どんどん1.2倍になっていって、タイヘンな価格破壊になってしまいます。

でも、Accessにはそんなことわからないので、おかめうどんが何万円になろうがおかまいなしに、実行ボタンがクリックされるたびに忠実に1.2倍にし続けてしまいます。

そんなわけで、まず式が正しく計算結果を出すか、選択クエリーの状態で確認して、それから更新クエリーに切り替えるような作り方をするわけです。

ツールバーに、クエリーを実行するためのボタンが2つありましたよね。でも、アクションクエリーの場合は、この2つの役割は大きく異なります。

ほんとうに実行するときは、赤いビックリマークの実行ボタンの方です。
では、クリックしてみましょう。

びっくりマークのツールボタンをクリックすると、なんだか物々しいメッセージが出ますが・・・。
要するに実行したら1.2倍にしちゃうよ、元に戻せって行っても、テーブル書き換えちゃうから無理だよ、って行ってるわけですね。

[はい]の方をクリックすると、クエリーは実行されます。
アクションクエリーの実行時には、必ずこういう確認メッセージが出ます。

なんか何にも変ってないみたいに見えますけど。。。
とりあえず、このクエリーになんか名前を付けて保存しておきましょうか。せっかく作ったんだし。
「単価更新」とか、そんな名前付けて保存しといて下さい。
テーブルを開いて確認してみましょう。

単価、書き換わってます?

こんなクエリーが、皆さんの作るデータベースの中でどんなときに必要になるかワカリマせんけれど、まあぶっちゃけた話こういうクエリーです。

んじゃ、試しにもうひとつ作ってみましょうか。
練習用のテーブルを基に、[チェック]というフィールドの値をオフ/オンする更新クエリーに挑戦してみます。

細かい作り方はもういいですよね・・。
完成品は←こうなります。レコードの更新欄にTrueと入力します。
これを実行すると、Yes/No型のフィールドが全部チェック付きの状態になります。

逆に、レコードの更新のところにFalseと入力すると、全部チェックなしの状態になります。

結果はこのとおり。

全部Falseにするのではなくて、例えば「数量が500以上の商品だけチェックをはずす」のであれば、抽出条件を付けます。これは選択クエリーと同じです。

これを実行すると、指定した数量が500以上のレコードだけ、チェックがなしになります。

こういうのもよく使いますね。このクエリーもいちおう、名前をつけて保存しておきましょうか。
工夫してなにかわかりやすいなまえをつけといてください。後で使うかどうか分かりませんけどね。

選択クエリーと違って、アクションクエリーは繰り返し繰り返し頻繁に実行するものではありません。用途もはっきりしてます。
「○○うどん」という名前の商品だけ抽出して、[チェック]をオフにするとか、数量が500個未満の商品だけ抽出して、[単価]をゼロにするとか、いろいろな更新クエリーを作って実行してみましょう。