<HOME  <お願い事項  <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--「テーブル」と「それ以外のオブジェクト」を分けてみる



続きです。

ではでは、ふたつのアクションクエリを立て続けに動かすためのマクロを作りましょう。
コードでもいいんですけど、今日はとりあえずマクロを作りましょう。

こんな感じのマクロを作りましょうか。
マクロの作り方がわからない・・・という人は・・・とりあえず皆さん大丈夫ですよね?
ちゃんと間違えずに「アクションの引数」のところに、それぞれクエリ名を指定してくださいよ。
アクションだけ選んで安心しないで下さいよ。


マクロ名はお任せします。

保存できたらマクロのウィンドウを閉じましょう。


んでは、このマクロを動かすためのゴーサインは・・・コマンドボタン作りましょうかね。

どこでもいいんで何か適当なコマンドボタンを作って、クリック時のイベントに、さっき作ったマクロを選びましょう。
一覧表示されるはずです。↓


ではー。いよいよテストその2です。フォームを保存し、フォームビューに切り替えてから、何か入力しましょう。

一応まだテスト段階ですので、記憶に頼るとして・・・番号、ダブらないようにしてくださいね。主キーですからね。
入力できたら今さっき作ったコマンドボタンをクリックします。

あり?・・・0件???
なんでなんで???

これがねー。泣き所なんですよ・・・


上の図を見ると・・・入力フォームのレコードセレクタ、エンピツマークになってますよね。
これって、何でしたっけ???
この状態のときって、まだ正式にテーブルの中に入力されたことには、なってないんですよね・・・。

細かい話ですが、メニューバー[レコード]→[レコードの保存](または[更新])を選ぶことで、エンピツマークが取れて確定!ということになるんですけど・・・。
こんな操作やるのめんどくさいしなぁ。

レコード単位で更新していってくれるのはありがたいんですけど、こんなわけで、なかなかタイミングが難しいときもあるわけです。


今回は、ワークテーブルは常に1レコードしか入らないような仕組みにしようと思ってるんで、「再クエリ」をしようかな。

フォーム開けっ放しでよいですから、マクロをデザイン画面で再び開きましょう。
マクロを手直しします。1行追加してください。

再クエリするものは、フォーム全体なので、コントロール名は空っぽのままでオッケーです。


マクロを保存しなおして閉じたら、再びフォームの方に戻りましょう。
んでもって、再度コマンドボタンをクリックしてテストです。

今度はどうやら、ちゃんと入力したものを把握してくれてるみたいですね。。。。
このメッセージに「1件」って出てれば、とりあえず大丈夫。



ギャー!なにこれ!ヘンなエラーが出るけど、なんで???

フォーム開いたままレコード削除すると、こういう表示になるんですよ。でも、壊れちゃったわけじゃないですよ。
フォームは、開いたときの状態を表示しようとしますからね。「レコードがあったけど削除されたらしい」って感じで、こういう表示になるんです。
一度フォームを閉じて、もう一度開けば、もう表示されないですよ。

でも、これじゃあんまりなんで、マクロの最後でも再クエリしますかね。


もとテーブルの方、追加されてますか?

ここまでテストが完了すれば、アクションクエリ動かすときの確認メッセージは出さなくても大丈夫かな・・・。
「メッセージの設定」というアクションをはさむことで、確認メッセージのみ非表示にすることができますよね。

最初から非表示にしちゃだめですよ。何度かテストして、オッケーだったら、です。

これで、続けて何件でも入力していっても、うっとおしくないですね。


あとは、みんなで共有しても番号がダブらないようにすればオッケーだと思いません?
まあ、ココから先はやってもやらなくてもどっちでもよいことですんで、いちおうココで自由解散にしますね。
あとは興味があったら読んでってください。

どんな番号がついてもよいのであれば、もとテーブルの[番号]をオートナンバー型にすればよいですよね。
自動的に番号を採番するのは・・・いろいろ考えなくちゃいけなくて難しかったですよねぇ。。。

あんまり難しいやり方はわたしにはわからないんで、ここではほんとにほんとに簡単な方法を・・・。
DMax関数を使って、もとテーブルの中で一番大きな番号を拾って、それに1足して、format関数で0001って感じでゼロがつくようにしてみます。

ほんとは、番号はテキスト型なので、+1ってやってもだめなはずなんですけど・・・。入力されてるのが0001、0002、0003って感じで全部数字なので、エラーにはならないんじゃないかと思います。A001とかAAA-0001とかの場合は、もちっと工夫しないとならないですよね。


 
 

この↑要領で、値の代入アクションをマクロの冒頭で実行することで、追加クエリを動かす前にワークテーブルに[番号]が代入されますので、続けて番号がつくと思います。
もとテーブルには、どんどん連番で番号がつきますよね。



なんだか、悪そうな人ばっかりですねぇ。何のデータなんでしょう。
皆さん、用心してくださいね。


もし、「前に入力した番号が何番だか知りたい」って場合は・・・。

うーん、そうだな。フォームのどこかに非連結のテキストボックス作っておいて、削除クエリ動かす前に番号を代入しておきましょうか。

わたしのフォームでは、テキスト9っていう名前のテキストボックスになりました。めんどくさいしこのままでいいや。

あと、ラベルを工夫して配置して、「さっきのは xxxx 番」って表示されるようにしてみました。


場所は、削除クエリの前ならどこでもいいんじゃないかとは思うんですが、いちおう前の方で・・・2行目にもうひとつ「値の代入」アクションを追加しました。

 
 

こうかな・・・。[番号]のテキストボックスには、すでに最新の番号がついてるはずですもんね。
この後すぐ削除クエリ動かしちゃうけど。





このマクロが正しく動作してくれれば、何か入力してコマンドボタンクリックした後、今さっき入力したレコードの[番号]が何番だったか、表示してくれると思います。
いろいろ工夫してみてくださいね。

決まったやり方はありませんから、とにかくいろいろいじってみて、納得行く方法を見出していってください。
それにはやっぱり、フォームとか、テーブルとか、アクションクエリとかのいろんな基本的な部分をしっかり理解しておく必要があると思います。
それと、絶対に「操作方法を覚え」ようとしないことですね。
Accessに限らず、データベースというものには「処理の流れ」というものがあります。
全体を常に頭の中に描きながら、ひとつひとつの処理を組み立てていくのがコツです。

あと・・・いきなりでかいデータベース作りながら悩まないことです。
小さなデータベースをひとつふたつ作りながら、基本的な仕組みを理解してから・・・でないと、いきなりでっかいデータベース作り始めちゃうと、ひとつうまくいかないとこが出てくると、わけわかんなくなっちゃいますよ。それじゃ苦しいですよね。。。


(オシマイ)