<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--基本操作をさらに考える
   >00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 



え?せっかくこの前「売上入力フォーム」を作ったのに、あれはどうなるのかって?
ええ、まあ、そうですけど・・・よりよいシステムを作っていくには、やり直しや作り直しは多少は・・・あー・・もうわかりましたよう。怒らないでくださいよう。

じゃあ、いろいろ前回工夫したトコ、見てみましょう。
おさらいだと思って、いっしょに操作してみましょう。ね。

まずはー・・・。売上日のデフォルト値を、今日の日付にしておきましょう。Date関数っていうのを使えば一発でしたよね。

[売上日]テキストボックスのプロパティで、「既定値」のとこに、

 =date()

って入力します。

それと、新しい伝票を次々入力するときの動きを作りましたよね。ええと、「次の入力」コマンドボタンをクリックしたときの動きを作りましょう。

[次の入力](わたしのはコマンド8って名前がついてます。[終わり]の方はコマンド9でした)のクリック時のイベントプロパティ欄をクリックして、右端のビルドボタンをクリックします。

「コードビルダ」を選んで・・・。

コードの入力をします。
ここでやったことは・・・いろいろありましたけど、

社員番号の入力し忘れのチェックや、新しいレコードの入力時に伝票番号を自動的に振るやり方、それから、フォームを閉じるとき、社員番号の入力がなかったらそのレコードの入力はなかったことにするアンドゥっていう動作・・・。

あ、それから、タブオーダーって機能も見ておきましょう。

フォームの中で、カーソルの移動の順番を決めておく機能でしたよね。
メニューバー[表示]→[タブオーダー]で、でてきます。

伝票番号は自動的に入力されるようにしてるから、カーソルが移動する必要はないし、一番下に移動させちゃいましょう。んで、社員番号が一番上に来るようにしますか。
え?動かない?んなあほな。
各コントロール名(社員番号とか売上日とか)の左端にある、グレーの四角部分をドラッグすれば、上下に移動しますよ。ぐちゃぐちゃになっちゃったら[キャンセルボタン]クリックしてもう一回仕切りなおせばいいんですから、とにかくチャレンジチャレンジ。


そうすると、伝票番号は入力する必要ないわけで(っていうか入力されちゃっても困る。ダブっちゃう可能性もあるし)、このテキストボックスの中にカーソルが入らないようにしておくとさらにグーですよね。
ってことで、[伝票番号]テキストボックスの「使用可能」「編集ロック」プロパティを変更しときましょうか。

この他にあと、メニューから売上入力フォームを開くとき、伝票番号を自動的に振ったりする仕組みをちょっと作りましたよね。
そいつは・・・また後で見ましょうか。


では・・・改めまして。フォームを上書き保存して、フォームビューに切り替えましょう。

で社員番号を何か適当に入力して、、「次の入力」ボタンをクリックすると・・・。

社員番号がなんか入ってれば、とりあえずよしということで次の伝票入力状態になるはずですから、新しい伝票番号がつくはずなんですけど・・・。
(伝票番号0のレコードができちゃいますが、まあ、今日は練習ですから)

伝票番号、新しいのがつきました?
でもって、サブフォームの方も同じ伝票番号がつくと思うんですけど・・・。伝票番号でつながりを持ってますからね。

んじゃ、商品テーブルの内容思い出して、なんか商品番号入力してください。

と、サブフォームも2行目が現われますよね。サブフォームの方の、新規レコード入力行になります。

んでは2行目にも別の商品番号を入力して・・・・3行目にも・・・と、

わーーーー!!!!

な、なんじゃこりゃ、なんかエラーが出てます!!なんだなんだ、あたしが何をしたっていうのよ!!!!!!!

なんにもしてないのになんかヘンなエラーが出るんですけど、なんでですか



サブフォームが基にしているテーブルを思い出してください。売上明細商品テーブルです。
あのテーブルは、売上明細テーブルとリレーションシップを結ぶために、[伝票番号]と[行番号]のふたつのフィールドを組み合わせて主キーにしました。
上の図を見てください。サブフォーム内の1行目と2行目、まったくおんなじじゃありません?
テーブルの中に、同じ伝票番号で同じ行番号のレコードを入力することはできないのです。


こういうこと書くと「主キーなんてやっぱりめんどくさいだけじゃないの?」と思う人がいると思うんですけどね。前にも申しましたが、主キーなんてもんは、わたしたちのためにあるのではありません。Accessのためにあるのです。別に主キーなんて設定しなくてもいいんですよ。たいして問題も起きないんじゃないですかね。主キーなんかなくたって。

でも、Accessは、「売上明細」テーブルが[伝票番号]を基準にしているテーブルだとか、そういうことは一切わからないので、リレーションシップとかそのへんの機能はまったく働かなくなります。

みなさんが「主キーなんてめんどくさい、なんで主キーなんてあるの?」って思うのは、上のようなエラーが出てきたりしてわけがわかんなくなったから、じゃありませんか?でもでも、よくよく考えてみると、売上伝票を作るとき、「0行が2つある」ってことが起こること自体、ヘンですよね?今は、まだ作ってる途中だから中途半端なことが起こるんですよね。
Accessを使ってるとか、そういうことは置いといて、ふつうの紙の伝票に売上を書き込むときのこと考えてください。1行目がふたつある伝票なんてないでしょう?それは、1行目と2行目のことでしょう。そしたら、異なる行番号を入力しないとおかしいですよね。

繰り返しになっちゃいますけど・・・。

Accessだから、コンピュータだから、データベースだから、と、やたら難しく考えちゃってません?ふつうに考えてありえないことが起らないように、ありえないデータが入ってこないように配慮するために、主キーなり、リレーションシップというものがあるんだって、そう考えましょう。
「主キーとかリレーションシップというものがあるからAccessって難しい」、と、逆に考えちゃイケマセンよ。


行番号を1,2,3と、順番につけてやれば、ちゃんと入力できますよね。

で・・・ここまで確認いただいたら、サブフォームの中を少し工夫しようではありませんか。せっかくですし。
まずは・・・。「商品番号を入力するのではなく、もうちょっと便利で楽な仕組み」を考えてみたいんですが、どうでしょう。

商品の種類が300も400もあるようだと(商品テーブルの中のデータ件数が多い場合)もっといろいろ工夫しないとならないかもわかりませんが、とりあえず10品目くらいなら、コンボボックスを使って選べるようにするのがいいんじゃないかと思うんですよ。

テキストボックスからコンボボックスに、コントロールの種類を変えるのはすごく簡単なんで、これチャレンジしてみましょう。

変え方は、左の図のとおり。
[商品番号]のテキストボックスを右クリックして、ショートカットメニューをたどります。

形は変わりますが、このままじゃなんも出ませんよね。

そこで。
コンボボックスとなった[商品番号]のプロパティを出して、
「値集合タイプ」
「値集合ソース」
の2箇所を変更/調節します。

今回は、商品テーブルの中身をそのまま出そうと思いますんで、「値集合タイプ」はそのまんまでオッケーです。
「値集合ソース」の方を変更します。
左の図のように、「値集合ソース」のトコをクリックしてからビルドボタンをクリックしましょう。