<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97データベース工作室>在庫のザの字はどう書くの〜♪
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20



で、このクエリーに名前をつけて保存し、コンボボックスの値集合ソースにします。

どうでしょう。出ます?
ついでに、「商品」のコンボボックスの更新後処理イベントで、「注文数」のテキストボックスにカーソル(フォーカス)を移動するように、

DoCmd.GotoControl "注文数"

なんて入れておくと、すごくスマートだと思います。


しかーし!!!

ここで問題発生!!!おーーーーーーーまいがーーーーーー!!!

条件がかたっぽ空っぽだと、商品コンボに何にも出てこなーい!!!!!!!!


取り乱してしまいました。

冷静になって考えてみると、あたりまえのことなんです。
だって上の画面の状態だと、「メーカーが空っぽのレコード」を探しちゃうわけで、こちらの目論見であるところの「メーカーは抽出条件なし、全件出せ」という命令にはならないんですよね。コンピュータですからねー言われた通りにしかしないですから。気が利かないですよねぇ。

そこで。「コンボボックスから何か選択したときはそれと同じものを抽出、何も選択してないときは全部」という抽出条件に書き換えてやらないとイケマセン。
ちょっとややっこしいですけど、なにかの役に立つんじゃないかと思うんで、挑戦してみてください。

IIf(IsNull([forms]![出庫フォーム]![分類]),True,[分類]=[forms]![出庫フォーム]![分類])

頭の式1:というのはとりあえず気にしないで、式だけきっちり入力します。

で、これの意味なんですけども、とりあえずIIf関数というのと、IsNull関数というのをヘルプでひいて、どんな関数なのか確認してください。その上でのお話です。

この構文によって、「もし出庫フォームの分類コンボボックスの中身がNull(未使用、空白)だったらこの列にはTrue(−1)と表示しNullじゃなかったら[分類]=[forms]![出庫フォーム]![分類]を出しなさい」という意味になります。
まずIIf関数の引数を理解いただかないとどうにもならんので、まずは大まかにこの関数の仕組みを理解してください。

で、抽出条件欄にTrueと入力しておくことで、コンボがNullのとき、全件出力できるわけです。
Nullでないときは、直接Where条件式を入力してますので、これがそのまま実行されるというわけです。

同じことを「メーカー」の方でもやります。

IIf(IsNull([forms]![出庫フォーム]![メーカー]),True,[メーカーコード]=[forms]![出庫フォーム]![メーカー])

商品マスターテーブルから参照するフィールド名と、コンボボックスの名前、フォーム名など、細かいところを確認しながら入力しましょう。

グリッドが狭くて入力しにくいようでしたら、[F2]キーでズームというウィンドウが開きますので、この辺の機能も活用してください。



どーん。

どうでしょう。出るようになりました?
どっちかかたっぽがわからなくてかたっぽだけ選択した場合でも、
ちゃんと抽出結果が出てくると思います。


さてさて。わたしのはこんな感じになりました。

これで、何か品物の注文を受けたとき、
いつ、どこのお客さんから、何をいくつ注文受け、担当したのは誰か
、という入力を簡単に行うことができるわけです。

ふいー。
工夫しようと思えばいろいろあるもんですねぇ。
もちろん、全部テキストボックスのままで、全部手入力したっていいんですけどもね。
どこまで作り込むかは、作り手や使い手の好みかな。


んじゃ、ついでに、よりテストしやすいように、「新規入力ボタン」でも作りましょうか。
何度か登場してると思いますが、マクロの「レコードの移動:新規レコード」というアクションを使います。
マクロを作ってもいいし、コードを書いてもよいでしょう。



こんな感じのボタンをフォームの下の方にでも作って、マクロかコードを作ればいいんですよね。
この辺はみなさんもうオッケーだと思います。
挑戦してみてください。




で、この時ついでにひとつ、気配りしてみましょう。
「分類」「メーカー」のコンボボックスと、オプションボタンを取りまとめてるフレームふたつ。
これらはこのフォーム上でデータ入力のための補助をしてくれますけども、もとにしてる「出庫テーブル」のフィールドとは結びついてなくて、単独行動なんですよね。
だから、次のレコードに移動したり、新規入力したりしても、前に選択した「怪獣」とか「横浜」とかいうのが残ってるように見えるわけです。

なので、例えば新規入力をしよう!というときとかに、初期値に戻すみたいな処理を入れてやると、入力している人たちにちょっぴり優しいフォームになると思うんですね。

ざっと挙げてみると・・・

◎「分類」と「メーカー」のコンボボックスを空っぽに

◎フレーム24(あたしのはそういう名前なんですけども)を1(全社)に

◎フレーム36(あたしのはそういう名前でして)を11(全顧客)に

こんな感じ・・・いかがでしょう?

【コードで書くなら】

Private Sub コマンド70_Click() '-----[新規入力]ボタンの名前が[コマンド70]なので・・・

DoCmd.GoToRecord , , acNewRec

Me![分類] = Null

Me![メーカー] = Null

Me![フレーム24] = 1

Me![フレーム36] = 11

End Sub

【マクロなら】
 レコードの移動 レコード:新しいレコード
 値の代入 アイテム:Forms![出庫フォーム]![分類] 式:Null
 値の代入 アイテム:Forms![出庫フォーム]![分類] 式:Null
 値の代入 アイテム:Forms![出庫フォーム]![フレーム24] 式:1
 値の代入 アイテム:Forms![出庫フォーム]![メーカー] 式:11

こんな感じかな。
まあ、別にやらなくてもよいことばかりですけど、ちょっとした気配りで、お?やるな?というデータベースになっていきますから、この辺もうまく活用していってください。

こういうのじゅーばこのすみつつくみたいに気がつく人って、いますしねぇ(笑)。
習慣になっちゃえば、どうってことありませんよ。この辺の作り込みは。