練習3:納品書作成データベース(1)
今回は、Access2007を起動するよりちょっと前の作業・・・データベース全体の設計みたいなところからお話していきます。そんなに本格的な設計話じゃないので、軽いノリで読んでみてください。
実は・・・日本の企業や団体での多くの業務で、「印刷物」ってすごく重要なポジションにあると思うんですが、世界各国ではそれほどでもないんですよね。以前ちょっとお話したかもしれないんですが、縦横に罫線が引かれている印刷物を好んで出そうとするのって、日本くらいなもんなんです。だから、世界規模で売り出されているMicrosoft Officeの一員であるAccessの印刷物(レポート)のデザインは、あんまり、日本人好みじゃないというか、少なくとも私個人の感想としては「もちっと気の利いたもの出せんのかい」という感じです。もちろん、テキストボックスを移動したりなんだりかんだり苦労すれば、それなりの印刷物は作れます。でも、もうちょっと、テンプレートっていうか、そういうのが完備されててもイインジャナイノカナーと、四六時中思っているわけです。
Access2007になって、結構、「あっ、それそれ、そういう機能があると助かるわー」と思うことがちょこちょこあったので、ちょっぴり期待してたんですが・・・レポートに関しては、さらにアメリカナイズされたっぽい感じで、日本の帳票類のイメージからどんどん遠のいてるって感じです。まあ、エコロジーってこと考えると、紙に印刷しない方向で物事考えるほうがいいのかもしれませんけど・・・。
作成するデータベースの概要
納品書作成データベース
ExcelやWordなどではよく作られるタイプの「納品書」を、Accessでも作ってみようではないか!!!
こういうの作るにはどうしたらいいんだろう?
上の図は、Excel2003で作成したものです。Wordでもこういう表を作ることがありますよね。
Accessではどうやって作ればいいか???と、本来こういうアプローチでAccessを使い始めるのは少々危険です。何度かお話しておりますが、ExcelとAccessはデータの持ち方や構造が異なるので、こういう ”完成形・表面” だけを見て、真似て作ろうとしてもおそらく、無理です。「ゆでたまごから生卵を作る技術(from MOTHER2)」みたいに、すごく高度なんだけどなんか無意味っぽいデータベースになってしまう可能性が大です。
でも、こういう動機からAccessでデータベースを作ろうとするケースも、無きにしもあらずですよね。たぶん。
そこで今回は、上記のようなことをAccessでやるには、どう考えたらいいのか???をテーマに、すごくシンプルな納品書作成データベースを作ってみましょう。
作り始めるとあれこれ欲張りたくなるところなんですが、まずは基本的な考え方を理解してください。そうすれば、いくらでも応用が利くようになりますよ。大丈夫。
基本的な考え方は、以下の通りです。まず、頭の中にイメージを持ってください。
- 印刷重視。コピーを取っとくからデータは残らなくてもいい。デザインも細かいところまでこだわりたい>Excel、Wordで
- いつどこにどんな納品をしたかデータを蓄積したい。その延長線上で、納品書の印刷もしたい>Accessで
設計しよう。自由に書き出してみよう。
まず、納品書に求められるものは何なのか、お手本でもあるExcelのシートを観察して考えてみましょう。
図1:納品書のイメージ(上半分)。Excelで作ると、だいたいこんなもんでしょうか。
1.この伝票の作成日、入力日、または納品日。日付は重要ですね。右上に配置することが多いでしょうか。
2.「納品書」と真ん中に書いてあることが多いような気がします。真ん中じゃなくてもいいかも。要は、タイトルですね。
3.あて先、納品先。会社名と担当者を入れる場合もあれば、会社名だけのときとか、住所や電話番号も印字することもある。
4.担当者は、毎度同じ場合もあれば、その都度違う可能性もありますね。会社名も変わる可能性はあるのか・・・。
5.自社情報。住所や電話番号を入れたり。
6.印刷したものにハンコついたりする場合もありますよね。押印場所として空欄の枠だけ印字することもある。
7.「以下の通り納入いたしました」的な、ご挨拶っぽい文章があらかじめ印字されていたり。
8.明細部分。納品する商品の一覧です。
9.小計。明細部分の金額の合計。
10.消費税。現時点(2009年1月)では税率は5%なので、9.の小計に0.05を掛ければいいのかな?
11.合計。小計と消費税を足せばいいのかな?
12.通信欄。備考として欄を設けておきます。ほとんど使わないと思うけど。。。
図2:納品書のイメージ(下半分)。備考欄やメモ欄が設けられていることも多そうだ。
では、上記の図から、この「納品書作成」業務にはどんな情報が、どんなデータが、どんなフィールドが必要になるのか、考えてみましょう。
正解はありませんからね。こういうのには。会社が100あれば、納品書のありかたも100通りあるはず。まずは、いろいろ書き出してみて、必要なことを見極められるようになっちゃいましょう。
右の図のような感じを頭に入れておくとよいですよ。
皆さんの身の回りのいろいろなお仕事をひとくくりに「業務」と表現したとして、その中で必要な情報や発生する情報・・・・お客さんの名前や連絡先とか、会社で取り扱っている商品の値段や詳細とか、仕事のスケジュールとか日程とか・・・・そういうものを分けて整理して、テーブルに入れるわけです。
で、そのテーブルの中身を、クエリやらフォームやらレポートやらを使って表に出すわけです。
で、その、表に出すときに、より良い状態で出せるように、マクロやらコード(VBAによるプログラム)やらを作って、主にフォーム(たまにレポート)の後ろっ側に貼り付けて仕込んどくわけで。この構図が大切です。
図3:テーブルは別格、と考えておくといいんじゃないかしら
長年Accessを使っていても、どうしても 「フォームにデータが入っている」 という感覚から抜け出せず、リレーショナルデータベースの特性を活かせずに、妙なテーブル作ったがためにデータの巡りが思うようにならず、それを補うためにおかしいところを取り繕う処理をVBAで作って振り回してばっかりいる人も少なく無いんです。VBA使ってるってだけで尊敬されたりして、さらに気の毒な沼から抜け出せずにいる人もけっこういます。まあ、本人が幸せならそれでいいんですよね。
でも、これからAccessを使っていこうとするなら、上の図のような構図を実感できるようになっとったほうがいいんじゃないかな・・・って、私は思います。
まあ、とにかく、今回作ろうとしている「納品書」にどんな項目があるのか、ざっと書き出してみましょう。
まず、納品書の中に書かれていることを全部書き出してみて、その後、それらを「親データ」と「子データ」に分けてみます。「親データ」はこの納品書1枚につきひとつだけ発生するデータ、「子」データは納品書1枚に1件~複数件発生するデータ、っていう見方をしてみてください。
図4:形式にこだわらず、落書き感覚でたくさん書き出してみよう。
で、それぞれの項目に対して、どんなことを期待するか、どうなったらいいと思っているか、等等、いろいろ書き込んでみましょう。
全部実現できるわけではないので、あんまり欲張ってはいけませんが・・・・でも、大切なことを見落としてもいけないので、勇気を出してとにかく思い切り書き出してみましょう。
このとき、もし、今まで実習していただいたAccess2007の使い方・機能の中で、当てはまりそうなものがあったら、それも書き出してみるといいですよ。おさらいにもなります。ただ、あんまり思い込みすぎてもいけないので、Accessから離れて別の角度からもあれこれ考えてみてください。
図5:いろいろ書き込んでみよう
そして、この二つの関係について考えます。
Accessでデータベース化するなら、Accessのための項目もいくつか用意してやらないといけません。Accessには納品書作成業務なんてわかりませんからね・・・。この二つのデータ群を結びつけるための項目が必要になります。私たちのためっていうよりも、どっちかというと、Accessのため、ですかね。
納品書一枚一枚に、異なる番号を付けるってのはどうでしょう。ほら、伝票番号とかいうやつ。
後日、お客さんや配送業者から問い合わせが来たときとかに、「伝票番号を教えていただけますか?」とか言えば、こちらでもすぐ、どのお客さんにいつ配送したものかわかるじゃないですか。そういうのってよくありますよね。
そしたら、「伝票番号●●の親データと子データ」みたいな感じの結びつきを作ることができますよね。
図6:二つのデータの塊の関係を見極めよう
そしたら次に、それぞれの項目をどうやって入力するか、データがどうやって入ってくるかについて考えます。データ入ってこないと、出しようがありませんもんね。
まずは、親データの方から・・・。納品日とか、通信欄とかは、その都度入力するしか無いでしょうね。
会社名は、どうでしょう。一見さんばっかりって可能性もありますが、たいていは、特定の取引先ってだいたい、決まってるんじゃないでしょうか。お得意さんに届けることもあれば飛び込みのお客さんに届けることもある、ってタイプの業務もありそうですね。
子データの方では・・・・今回は、「注文番号」は、いわゆる行番号っぽく、1、2、3と番号を振ろうと思ってるので、ちょいと横に置いておきます。
「数量」も、基本的には、注文の都度違うわけですから、手入力ってことになりますよね。
問題は「品名」「型番」あたりですかね。「単価」もそうかな。自社で取り扱っている商品のリストとか、ありそうなもんですよね。他のメーカーから取り寄せた商品をそのまま納品することもあるかもしれませんけど・・・。
「金額」は、単価と数量が決まれば自動的に計算できるかな、と思います。
図7:形式にこだわらず、いろいろ書き込んで考えてみよう。
もし仮に、会社名や品名などの情報を、一覧から持ってくる・・・というような動きを作るとしたら、一覧を別に作っておかないといけませんよね。どんなのを用意しておけばいいか、考えてみましょう。
実は、この辺が正念場なんです。会社によっても業務によっても、どうするのが一番いいのか異なります。会社の業務にフィットしたデータベースを作るには、ここんとこをしっかり考えておかないといけないんですよ。
がんばれば至れり尽くせりなデータベースを作ることはできますが、複雑になりますし、作るのに時間も労力もかかります。納期がなく、永遠に時間をかけてよいのならいいのですが・・・そうもいかないですよね。どこかでちょっとだけ妥協して、「ここんとこはあらかじめ番号を調べておいて、手入力で」 なんて手を使うこともあります。決してダメなデータベースってわけじゃないんですよ。どのくらい時間をかけることができて、どの部分は絶対に作らないといけないのか、その辺の見極めも、この段階である程度つけることができると、作業が楽になるんです。こういうのが難しいんですけどね・・・。
図8:なんとかマスター的なものを用意しておけばいいんじゃないかしら
今日は、ごくごくシンプルなのを作ります。下の図を見てください。
まずはこの段階の、もっとも簡単なテーブル同士の結びつき方から成る納品書作成データベースを作りましょう。
これが問題なく作れるようになれば、「途中で商品名が変わった場合はどうすればいいのか」「取引先の会社名が変わったときはどうなるのか」「単価が変わった場合、過去の納品書データにどう影響するだろうか」とか、そういうことも徐々にイメージできるようになって、いろいろな納品書作成業務に対応できるようになるはずです。
シンプルっつったて、これだって結構難しいですよ。がんばって完成させましょう。では!
図9:まずはこれを作ってみよう
データベースの新規作成
データベースを作成します。
「納品書作成」というデータベースを新規に作成してください。
図10:お馴染みの画面
テーブルの作成 (全部で4つ作ります)
まず、一つ目のテーブルを作成しましょう。
フィールド名 |
データ型 |
伝票番号 (主キー) |
数値型 |
納品日 |
日付/時刻型 |
会社番号 |
テキスト型 |
ご担当者 |
テキスト型 |
通信欄 |
メモ型 |
図11:さあ、テーブルを作ろう
フィールド名は、自由に変えていただいてもいいですよ。ただ、他のテーブルと結びつけるためのフィールドだけは注意してくださいね。
データ型は、レイアウトビューの状態でリボン内で変更しても良いし(右図)、テーブル名をつけて保存してからデザインビューに切り替えてから変更してもOKです。
出来上がったら、「
納品テーブル」 と名前をつけ、閉じておきましょう。
図12:フィールド名の入力、データ型の変更・・・操作はもう、ばっちり?
次に、ふたつ目のテーブルを作ります。
タブメニューの「作成」をクリックし、「テーブル」をクリックします。テーブルのデザインは以下のとおりです。
フィールド名 |
データ型 |
伝票番号 |
数値型 |
注文番号 |
数値型 |
型番 |
テキスト型 |
数量 |
数値型 |
図13:ふたつ目のテーブルを作るには??
データ型を変更したら、
「納品明細テーブル」 と名前を付けて保存します。
このテーブルは、プロパティも少し操作してみましょう。
図14:データ型をしっかり変えよう
デザインビューに切り替えます。
まず、「伝票番号」の主キー設定をはずしましょう。
このテーブルは、いろいろ事情があって今回は、主キー無しテーブルにします。
ほんとは、ちゃんとつけたほうがいいんでしょうが、いろんなお話をしながらちょっとずつ作るデータベースなんで、このテーブルに主キーをつけてしまうと、その”ちょっとずつ”のお話が進めにくくなってしまいそうなので・・・。主キー無くても何とかなりますので、設定を外してください。
図15:「伝票番号」をクリックして、左上の「主キー」ボタンをクリックすると?
さらに、「型番」は、今回、半角の英数字しか入力しない予定なので、漢字変換する必要はないんです。
そういうとき、ちょっと入力のお助けになるプロパティがありましたよね。その辺もぜひ、使ってみてください。
忘れちゃった人は、何もしなくてもいいですよ。
上書き保存して、閉じます。
図16:IME。。。なんだっけ?
3つ目のテーブルを作ります。
フィールド名 |
データ型 |
会社番号 (主キー) |
テキスト型 |
会社名 |
テキスト型 |
郵便番号 |
テキスト型 |
住所 |
テキスト型 |
電話番号 |
テキスト型 |
「
取引先マスター」と名前をつけて保存します。
※郵便番号、住所、電話番号はオマケです。実際には使いません。 が、これらを使って新しいプロパティをご紹介しちゃおうかなと思います。
郵便番号を入力したら、対応する住所が自動的に表示される・・・最近、Webでもそういうの、良く見かけますよね。そういうの、やってみましょう。プロパティで割りと簡単にできるんです。
右図を参考に、「住所入力支援」というプロパティをクリックし、ビルドボタンをクリックします。
図17:住所入力支援ですって?支援してもらおうじゃないのよ
「住所入力支援ウィザード」が始まります。
まず、右図を参考に、郵便番号を入力する予定のフィールドを選択します。
選択できたら、 「次へ(N)>」 ボタンをクリックします。
図18:郵便番号は郵便番号に
次に、住所をどうやって表示するか決めます。
複数のフィールドに分けて入れることもできますが、今回は住所用のフィールドを一個しか作ってないので、一番上の「分割なし」を選択します。
で、住所を代入するフィールドを選択します。
選択できたら、次へ進みましょう。
図19:住所は住所に
最後の画面はテスト入力です。
会社や学校、ご自宅の郵便番号を入力してみてください。対応する住所が出てくれば完了です。
図20:出ます?。
物々しいメッセージが出ますが、OKボタンをクリックしてください。
その後、テーブルを上書き保存し、閉じてください。
図21:はいはい
4つ目のテーブルです。
フィールド名 |
データ型 |
型番 (主キー) |
テキスト型 |
品名 |
テキスト型 |
単価 |
通貨型 |
図22:このテーブルには予めデータを入れておこう
「商品マスター」と名前をつけて保存し、何件かデータを入れておきましょう。何でもいいですよ。お好きなものを。
何件か入力していただいたら、入力した「型番」をひとつかふたつ、ちょっとメモっといてください。次のページで、「試しに型番を入力してみる」っていうことをやるんで、書き留めておいてもらったほうが手っ取り早いっすから。
紅茶は10億円と相場が決まって・・・あっ!なんか変な表示になっちゃった!!!
これは、列幅が狭いから、でしたよね。数値や日付時刻型のフィールドは、こうやって、「全ての桁を表示しきれませんので誤読があってはいけませんから、全部表示しません!」という態度を示すんですよね。#で。
図23:ギャー!!!おかしくなった!!!もうおしまいだ!!!
「取引先マスター」にも、データを数件入力しておきます。先ほど設定した「住所入力支援」がちゃんと動くかどうか、確かめておいてください。で、こちらも、「会社番号」をひとつふたつ、書き留めておいてください。
図24:「取引先マスター」も何件か入力。住所入力支援は果たして?
では、「商品マスター」「取引先マスター」共に、閉じましょう。
列幅を変更してると、テーブルを閉じるときこんなメッセージが出ますよね。このメッセージが出ても、皆さんもう、「えっ?何コレ??」なんてびっくりしたりしませんよね。
今日は、「はい」でも「いいえ」でも、どっちでもいいです。
図25:こんなメッセージが出ても、もう慌てないわ
リレーションシップ
さあ、次に、リレーションシップの設定を行いますよ。
タブメニューの「データベースツール」をクリックし、「リレーションシップ」をクリックします。
図26:リレーションシップだ!
今回は、サブフォームを作りますんで、このふたつのテーブルの親子関係だけははっきりさせておかなければなりません。
他の、「商品マスター」と「取引先マスター」はクエリで結びつけるので、リレーションシップを作る必要はないです。作っても邪魔にはなりませんが、今日のところはこの二つのテーブルの関係だけ作成できればOKです。
「納品テーブル」と「納品明細テーブル」を選択します。
図27:テーブルを選ぶのだ
「伝票番号」同士を結びつけるため、どちらかからどちらかへドラッグします。
図21:ドラッグして結びつけるのだ
すると、リレーションシップの設定をするためのダイアログボックスが出てきます。
「伝票番号」がそれぞれのテーブルから選択されますね。
更に今回は、リレーションシップのちょっとした恩恵にあやかろうと思います。ちょいと下を見ると、「参照性合成」っていう表記がありますよね。
今回のような、伝票っぽいものの場合、これが結構役に立つんですよ。
図22:伝票番号同士が結びついてるかな?
「参照性合成」にチェックを付けると、その下の「フィールドの連鎖更新」と「レコードの連鎖削除」をチェックできるようになります。
「レコードの連鎖削除」にもチェックをしてください。
参照性合成の具体的な効力については、後半戦でお話しますね。ここでは、設定の仕方を覚えてください。
図23:参照性合成を使おう
リレーションシップが出来上がりました。
図24:できたー
リレーションシップを閉じましょう。
閉じる時、保存するかみたいなメッセージが出てくるので、「はい」をクリックして保存してもらいます。
保存してから閉じてもいいんですが、まあ、閉じる時保存するんでもいいんじゃないかなーと思います。
図25:はーい
まだまだ続きますぞ。
このページのまとめなど
- Excelのワークシートや、印刷物などを基にデータベースを作りたいとき、そのままテーブルにしちゃだめだぞ。
- データを用途や目的別に小分けして、それぞれの結びつきや関連などを思うがままに書き出そう。
- テーブルの(フィールド)プロパティ「住所入力支援」。郵便番号を入れると住所が自動的に現れる優れもの。活用しよう。
- リレーションシップの「参照性合成」。いったいどういうものなのか?詳しくは後半戦でお話します。
作成日:2009-1-27