<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--見積書を作る
   1 > 2 > 3 > 4 > 5 > 6 > 7 > 8 > 9 > 10 > 11 > 12 > 13 > 14 > 15 > 16 



さてさて・・・ここでさらにひとつ、考慮すべき点があるのですが・・・(まだあんのかって感じですけど)
今、わたしのフォームは、「レコードセレクタ」ってやつを表示させてる状態なので、ああ、あの、表形式のフォームの方のお話ですけど、新しく入力したり個数とか変更したりしている最中って、エンピツマークが出るんです。皆さんのフォームではどうでしょう?

このエンピツマーク、前にも他のコーナーでお話したかもわかんないですが、「そのレコード編集中」っていう状態を表しています。

いちおう、MS-Accessは、マルチユーザー・・・ってほど大掛かりなものでもないですが、同時に複数の人がおなじテーブル開いて同じように仕事できるんですけどね。でも、おなじレコードに対して、みんなで書き換えとかしたら、データめちゃくちゃになっちゃうじゃないですか。Aさんが商品番号変更しているときにBさんが個数の変更をして、Cさんが個数をゼロにしたら、いったいこの見積はどうなっちゃうんでしょう。でしょ?でしょ?そんなことがあっちゃいけないでしょ?Aさんの変更が完全に終わってからじゃないと、誰も意図しない見積になってしまうかもしれませんよ。
だから、いちおう、見た目「レコード単位のロック」をします。エンピツマークのとき、そのレコードはエンピツマークの人が使っているので、他の人は見るだけで、個数とか変えられないよ、っていう状態です。他の人はレコードセレクタに進入禁止マークみたいなのが出ます。他の人が使用中のレコードよ、っていうことですね。

これは、たった一人で、パソコンのハードディスクに保存してわたしだけが使ってるMDBでも、おなじことなんです。
つまり、だーれも他に同時に使う可能性なんてまったく皆無でも、エンピツマークになって、このレコードはロックされます。
他のレコードにカーソルを移動したり、フォームを閉じたりしないかぎり、ずーっとエンピツマークの状態で、他の人は見ることができない・・・。
つまり、ちゃんとテーブルの中のデータとして保存されてるわけではなく、エンピツマークになっている人だけの「仮更新状態」なんです。ええ。
たった一人で使っていても。だーれも共有していなくても。

なので、この状態で、フォーム開いたまま、エンピツマークのまま、そっとそっとさっきつくった見積書を開くと・・・。

エンピツマークのレコードは、レポートには反映されてこないんです。
新規入力中のレコードなら出てこないし、個数とか変更している最中だと変更する前の数字が出てきます。
まず、この仕組みを正しく理解する必要がありますよ。

明細を入力した後に、たとえば必ず備考欄を入力するとか、値引額を入力するとかであれば、その時点でレコードは保存されると思うんですけど、値引しない場合もあるかもしれないし、「とりあえず印刷してみよう」とかいう人もいるかもしれない。とにかく、レポートを印刷する前に、ちゃんと「レコードのの保存」をしてやらないと、あれ???って思っちゃう人もあるかもしれないですよね。

だいたい、いきなり印刷しないように「カーソル移動をしなければならないような感じにうまいことフォームのデザインを考える」とか、再クエリするとか、みなさんいろいろ工夫なさるところだと思います。それ以外にもうひとつ・・・メニューバーの「レコード」の中に、「レコードの保存」というのがあって、これ選ぶと、エンピツマークではなくなるのです。
でも、「レコードの保存」というマクロ命令はありません。
なんとかコマンドボタンをクリックしたときに、この「レコードの保存」をやりたいなぁ・・・。その方がスマートだよなぁ・・・。

ここで・・・わたしは普段ほとんど使わないのですが、「コントロールウィザード」というやつを活用してみようと思います。

ツールボックスの中の、右上のボタンです。
これ、わたしは普段オフにしてます。
別に深い意味はないんですが、ウィザード使ってると、基本操作お教えすることできないじゃないですか。
いちおう、「魔法使いの開発工房」は講習会なので。。。だから使ってないだけなんですけどね。

コントロールウィザードをオンにした状態で、コマンドボタンを作りましょう。



メインのフォームの、フォームフッター部分にでも作ってください。

コマンドボタンを作るためのお助け画面が出てきます。
この中に・・・「レコードの操作」というのがあって、「レコードの保存」というのがあります。これを選びましょう。
後は適当でいいです。完了ボタン押しちゃってもいいですよ。

ボタンができたら、クリック時のイベントを見てみましょう。

なんか難しそうな処理が書いてありますけど・・・。
実際に必要なのは1行だけで、あとのはエラーが出たときのお決まりの処理です。

Docmd.DoMenuItemっていう行がありますよね。これですね。
これは、マクロの命令の中の「メニューの実行」っていうやつですね。「メニューの実行」というアクション自体は、Access2000にはすでに存在してないんですけど・・・こういう書き方もできるんですねぇ。メニューバーの中にある命令をマクロを使って実行させるという方法があるんです。それをVBAで書くと、こうなるというわけですね。これ書くの面倒なので、こういうときはウィザードをうまく活用していくといいかもしれないですよ。ちょっと・・・裏技かもしれないですね。

では、この処理の中の中で、見積書レポートを開くようにしてみましょうか。


じゃあ、改めてフォームを開いて、明細に1行追加して、エンピツマーク状態で今作ったボタンをクリックしてください。

今度は、反映されます?
ちょっと無駄な処理かもしれないですけど・・・。もしかしたらこういうことをやらないとならないときも出てくるかもしれませんので、どんな感じか一度試してみてくださいね。