![]() |
||
<HOME <お願い事項 <Access2002 TOP <Access97 TOP <サイト内検索 | ![]() |
|
![]() |
||
MS-Access2000超入門部屋--アクションクエリ | ||
[アクションクエリとは] [追加クエリ] [テーブル作成クエリ] [更新クエリ] [削除クエリ] [マクロで自動実行 1 2 3] |
で、ここまでテストが済んだら、ってお話ですけど・・・アクションクエリを動かしたときの確認メッセージ、もういらないですよね。
クエリひとつひとつが正しく動くことがわかったので、あのメッセージ自体は非表示にしてしまってもいいかな、って思います。
いきなり非表示にしちゃダメですよ!!!どんな場合でも、ここまでテストが終わってから、です。
では、メッセージを一時的に非表示にするアクションを、マクロに追加しましょう。
このマクロ、デザイン画面を開いてください。
実行しちゃダメですよ。そんなことは申し上げるまでもないと思いますが・・・。
で、マクロのデザイン画面が出たら・・・。
左のように、一番上の行の一番左端の、レコードセレクタ部分(グレーのトコ)をクリックして、1行分選びましょう。
まあ、1行目のどこかにカーソルがあればよいとは思いますが・・・。
で、左の図でピンク色の印をつけたツールボタンをクリックします。
1行、行が追加されるんですね。
追加されたトコに「メッセージの設定」っていうアクションを追加します。
このマクロアクションは、確認メッセージを非表示にしたり、再び表示させるようにしたり、マクロの中で切り替えることができるアクションなんです。
といっても、非表示になるメッセージは確認メッセージだけ。エラーになったりシステムの不具合から出るメッセージは、やっぱり表示されます。
っていうかそれ表示されなくなっちゃったら大変なことになっちゃいますよね。
「メッセージの表示」は、「いいえ」です。
変更できたら、保存しながら閉じましょう。
で、再び、上のマクロを実行してみてください。
え?どうやって実行するのかって???んもー、そういうこと忘れちゃわないでくださいよー。
データベースウィンドウで、マクロの一覧出して、マクロ名をダブルクリックするか、左上の実行ボタンをクリックするんです。
こういうのは「感覚」、「雰囲気」ですから、とにかく身体で覚えちゃってくださいよ。
マクロの実行のとき、アクションクエリを動かす際の確認メッセージ、出なくなりました?
くれぐれも注意ですけど、マクロ作るときにいきなり「メッセージの設定」アクションを1行目に持ってこないこと。
何度かテストして、アクションクエリのメッセージばんばん出てくる状態で繰り返しテストして、正しく動くことがわかってから、ですよ。
で、テーブルの中身をそれぞれ確認してみると・・・。
おなじように、「練習のテーブル」からレコード消えてますか?
で、「結果ばかりのテーブル」にレコード追加されてます?
オッケーですね。
これだけじゃ気分が盛り上がらないんで・・・。じゃあ、フォームで活用してみましょうか。
これもやはり「一例」です。こうしなくちゃいけないってわけじゃないんで、その辺誤解のないようにお願いしますね。
「練習のテーブル」を基に、表形式のフォームを作りましょう。
オートフォーム機能でも、フォームウィザードを使ってでも、どっちでもいいので、適当な表形式フォームを作ってくださいね。
適当なフォーム、できました?
そしたらですね・・・。
フォームフッター欄を利用して、左のように「コマンドボタン」を作ってみてください。
どうやるのかって???
フォームのデザインビューに切り替えて(左上の青い三角定規ボタン)
「フォームフッター」っていう帯部分を下にドラッグして
フォームフッター部分を1センチくらい引き出して
ツールボックスから「コマンドボタン」をクリックして、
フォームフッター部分のどこかをクリックする。
こういう手順ですね。
ゆっくりでオッケーですから、確認しながら挑戦してみてください。
で、このコマンドボタンをクリックしたら、先のマクロが動くようにしようかなと思います。
コマンドボタンのプロパティを出して、「クリック時」のイベント欄を操作します。
後は、テキストボックスの位置とか大きさとかはお任せしますんで、適当に変えてみてください。
そのままでもいいですよ。
さて。どうかな・・・。
3つほどチェックをしてから・・・。
マクロ実行!コマンドボタンをクリックしましょう。
・・・。げー???
な、なんじゃ?こりゃ。#Delete??????
・・・。
他のコーナーで、似たようなことをお話したことがあるかもわかりませんが・・・。
フォームやデータシートビューというのは、「開いたときの状態」をずっと表示します。
つまり、レコードソースとなっているテーブルやクエリの中に何か変化が生じても、とりあえず開いたときの状態をそのまま表示します。
基のテーブルの中のレコードが、削除クエリによって削除されました。
でも、開いたときの状態を表示しようとするので・・・削除した行がそのまま残っちゃってるイメージになってるんです。
#Deleteって、そういう状態なんですよ。
そういう時、どうすればよかったんでしたっけ???
「再クエリ」でしたよね。
マクロの最後に、「再クエリ」ってアクションを入れておけば、フォームが基にしているレコードソースの最新の状態を表示しようとしてくれいます。
これ、意味もわからず「再クエリ」ってアクションをつけるのは返って危険です。
なんとなく、でもオッケーです。なんとなく、意味を理解するようにしてください。
ほんとに、なんとなく、でよいのですから・・・。
さて、今度は・・・。
#Deleteとか出なくなりましたけど、あれ・・・。
1レコード、残っちゃってません?
チェック入れたレコード、全部削除されてます???
わたしは・・・1レコード残っちゃいました。
最後にチェックをクリックしたレコードだけ、どうしても残ってしまいます。
さて、ココから先が、フォーム上からアクションクエリ(特に削除クエリ)を動かすときの難しさなんです。
操作というより、Accessのレコードの更新のタイミング、っていうところですかね・・・。
上の図をよく見てください。
チェックをクリックすると、なんかちょっと、点線で囲まれたような状態になってますよね。
この状態というのは、「練習のテーブル」の中のこのレコードが、今まさに編集中(エンピツマークのついてる状態)っていう状態なんです。
つまり、まだこのチェックマークは、ついていることになってないんです。
レコードが編集中、で、まだ完全に処理が終わってないと見なされてるんです。
どっか別のところ(他のレコードのテキストボックスとか)をクリックすると、点線はなくなってふつうのチェックボックスになると思います。この状態のとき、はじめてこのチェックマークは認識されるんです。
これは、Accessのテーブルが、レコード単位の更新を行っているから・・・。
テーブル全体ではなくて、1レコードずつ直接保存されていきますよね。
その恩恵には皆さん十分あやかってると思いますが、このようなときだけは、即効レコード単位で更新できるという仕組みが返ってややこしい状況を生み出してしまいます。
まず、こういうことをきちんと理解しなければなりませんね。
そうしないと、フォームを使った細かい作りこみのとき、いちいちわけのわからない状態になると思います。
なんで?じゃなくて、こういうものなんです。
で、どうするか・・・。つまり、上のようなことが自然に行われるように仕向けてやるしかないんです。
要するに、コマンドボタンをクリックする前に、どっか別のところへカーソルを移動させるとか、1回再クエリするとか・・・。
「だからどうすればいいの?」って思われるかもしれませんね。でも、ココから先はみなさん各自で考えてみてください。
決まったやり方はありませんし・・・それに、どうしてこういうことが起るのか、なんとなく理解できた方は、おのずと答えが見えてきてるんじゃないかと思います。
ここで理解いただきたいのは、「こういうときにどうやるのか」ということじゃなくて、「なぜこういうことが起るのか」ということです。
じゃあどうする?
どうしてこういうことが起るのか、ただしく把握できた方は、多分、「このフォーム上にマクロを実行するコマンドボタンを配置するのはやめよう」という結論を見出すかもしれないですね。
結果欄にチェックをつけて、フォームを閉じて、メニューフォームか何かから、マクロを実行するようにするとか。。。
この状況を正しく理解できた方なら、マクロを実行させるタイミングをいろいろ工夫する必要があるんだな、ということがわかっていただけると思います。
でも、ここで、Accessって使いにくい、という結論しか出せない方もいらっしゃるかもしれませんね・・・。
(オシマイ)
![]() |
![]() |