2012/09/11

【Access】VBA無しでどこまでできるの?その4

 その3の続きです。
 今回もちゃちゃっとやっちゃいますよ。まずは必要になるフォームを考えてみます。当然メインとなるは売上台帳ですね。これをつけるために作ってるんですから。あとは各種マスター編集用のフォーム。それからと…。
 「ああっ。
 って本当に声が出ちゃいました。自分、完璧に「在庫データ」なんてのを作ったことを忘れておりました。…これどうしよ。ま、まぁこれは後で何とかしよう。
 若干動揺しましたが、とりあえず売上台帳から作ります。色々ギミックを仕込んで…といきたいところですが、とりあえずはシンプルに作ることにします。というか実際色々とシミュレーションしてみたんですが、VBA使えないとやっぱり苦しいところが多々あったのでぶっちゃけ諦めました。
 ここでひとつお詫びが…、前回フォームにはクエリはいらんって言ってましたが、どうやら2つくらい必要になりそうです。1つが売上台帳用のクエリ、もう1つが在庫データ更新用のクエリです。いやぁー、無計画って怖いですねー(無責任)。
売上台帳用クエリ(物理名:SalesForm)
2012091104
在庫データ更新用クエリ(物理名:UpdateStocks)
2012091105
 在庫データ更新用クエリが難解に見えるかもしれませんが、要するにパラメータ「日付」で抽出された「Salesテーブル」と一致する「GoodsId」を持った行の「Qty」を「Salesテーブル」の「Qty」で引いてみなさいってことです。何か余計に難解な文章になってしまいましたね。売上台帳用の方は「入力日」というパラメータを用いることで入力する日を限定してしまおうって魂胆です。入力時に以前のデータがづらづら表示されても邪魔なので。
 ではやっとフォームです。
売上台帳(物理名:SalesForm)
デザインビュー
2012091102
フォームビュー
2012091103
 ちょっとシンプルすぎないか不安になりますが…。データソースはもちろんさっき作ったクエリです。見ての通り「SalesIDフィールド」と「SaleDateフィールド」は非表示に、「GoodsIdフィールド」はコンボボックス化して商品名を表示するようにしています。コンボボックスはよくある手法なのでいちいち解説しません。ヒントは列数2、列幅0,◯cm(◯は任意)。「SaleDateフィールド」の既定値は次に作るフォームから引っ張ります。
 次は売上台帳の入力日を確定する作業を入れたいのでそれを行うフォームを作ります。実際の作業順序からするとこいつがAccessを起動した時に表示するトップフォームになりそうなのでいっそのこと色々乗っけてメニューフォームにしちゃいましょう。
メニュー(物理名:MenuForm)
デザインビュー
2012091106
フォームビュー
2012091107
 おぉ、メニューフォームを作ると何だかそれっぽく見えてくるものですね。何かこれだけで満足しちゃいそうですが、クエリ等のパラメータをこのフォームに設定し直します。一応、下記に一例。
クエリ修正一例
2012091108
 このように抽出条件を[Forms]![対象フォーム]![対象コントロール]とすることでフォームのコントロールを参照することが可能です。これで売上台帳はメニューフォームで指定された日付で表示される予定です。
 フォームを2つ作っただけですが、なんだか雑多になってきたので今回はこの辺でやめておきます。あと、マスター編集のフォームは面倒くさいので省略します(ウィザードで一発で済むので)。
 次回はレポートと出来ればボタンを動かすためのマクロを作ります。


HP Directplus オンラインストア
pagetop