<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
こんな感じかな。
まあ、別にやらなくてもよいことばかりですけど、ちょっとした気配りで、お?やるな?というデータベースになっていきますから、この辺もうまく活用していってください。
こういうのじゅーばこのすみつつくみたいに気がつく人って、いますしねぇ(笑)。
習慣になっちゃえば、どうってことありませんよ。この辺の作り込みは。