Microsoft Access Club >初心者講座 >アンケート管理ソフト >このページ >次頁 - 前項  サイト内検索


テーブル作成の考え方 : アンケート管理ソフト



アクセスでソフトを作る場合に一番大事なことは、「どのようなデータを残すのか」ですね。 この考え方でテーブル構成が決まります。

ここには、第三者に依頼をされてシステム作りを行うのか、否かも考えて下さい。他人様の要請で行うなら、又その業務に精通していないなら、十分に調整を行って、何が必要なのかをディスカッションして下さい。

それを綿密に行っても、後日修正が必ず大幅に入るんですから‥。よく、PCの前で二人並んでテーブルのフィールドを作成している光景をよく目にしますが、いかがなものでしょうね。

 サンプルファイルの考え方

  1. ショッピングセンターにお客が来る。
  2. そのお客にアンケートへの回答を依頼する。
  3. 例えば、メイン広場にPCを数台設置し、17インチのディスプレイ画面でマウスやキーボートを使って入力を行っていただく。
  4. 大人もいれば子供もいます。
  5. パソコンに精通している方も、初めての方もいます。
  6. 文字入力はダメです。
  7. マウスのクリックと数字入力に留める構想を持ちます。
  8. 一番厄介なのは、入力途中でクローズボタンをクリックする者、そのまま止めちゃって帰る者がいること。
  9. このようなことを未然に防ぐために「エラー制御」を含めたシステム構成を考えます。
  10. テーブル構成は、1つのメインテーブルを中心として行います。

組み立て方は、何処までAccessに仕事をさせるのかによって変わりますので、今からお話する構成方法は絶対ではありませんよ。

データベースウィンドウで全テーブルを見ていただくと、下記のようにテーブル作成を行っています。

各テーブル毎に「説明」を記述しているでしょう。これは行った方ががいいですよ。後で何のために作成したテーブルなのか分からなくなります。ホント。これは、各テーブルのプロパティに記述するだけです。

また、テーブル名を日本語か英語にするかというご質問に対しては、皆さんのお好きな方を選んで下さいね。むしろ、テーブルやフォームやはたまたコマンドボタンなどを名前を見ただけで判断できるようにすべきです。これはVBAを使う時、手間を省くために絶対必要です。

そもそも、テーブルやレポート、テキストボックスなどのオブジェクトには必ず一意の名前が必要です。

具体的には、テーブル名には tbl_○○○、フォームには frm_△△△、コマンドボタンにはcmd_□□□ 等の規則性を考えて下さい。

これらの名前作成は、Accessが自動的に設定する場面もありますが、そのまま使わないでお好きな名前に変更して下さい。貴方自身のためですよ。

それでは、実際にテーブルの作成に入りましょうか。まず、メインテーブル(tbl_question)から進めます。

 オートナンバー型のフィールド

フィールド名を ID としています。オートナンバ型のフィールドとは、各レコード毎に一意(他のレコードと重複しない)数値が自動的に作成・格納されるフィールドを云います。

では、何故オートナンバー型のフィールドが必要なのかを見ていきましょう。

オートナンバー型のフィールドを作成する必要性は、下記のとおりです。

  • データの視認性向上とデータの活用、そしてメインとサブの構成を行った場合

膨大なレコードを持っているテーブルを想定しますと、視認性ということも大事です。また、レコード数を算出する場合などにも重宝します。

注意点としては、下記のとおりです。

  • オートナンバー型を設定しているフィールド(レコード)を一部削除しますと、削除したオートナンバー数値は欠番となります。空白は許されません。

活用の一例として、Dlookup関数を見てみましょう。

オートナンバー型の「ID」フィールドデータの 45  にある「氏名」フィールドに格納されている名前を抽出する場合、下記のような構成になります。

DLookup("氏名","テーブル名","ID=45")

このようにオートナンバー型の持つ 一意性 を利用するケースは、今後いろいろと現れてくるので、オートナンバー型フィールドを持つテーブルを作成されることをお勧めします。

ただ、今回はオートナンバー型フィールドの設定を行わなくても問題ありません。但し、メインとサブの構成を行った場合など、つまり「CDアルバム管理ソフト」でお示しした 

  • メインテーブルとサブテーブルをリレーションで結び、メインとサブのフォーム構成でデータ管理を行う場合

は、必須です。

 「記入日」と「記入時間」フィールド

一般にデータ形式としては下記のようなものですね。

記入日は、 yyyy/mm/dd        記入時間は、 hh:nn:ss

  1. Accessでの書式設定は、上記のように yyyy/mm/dd と記す場合と、日付(L) とする場合とがあります。
  2. 日付(L)というのは、ウィンドウズの地域プロパティでパソコンが持っている日付表示形態です。
  3. サンプルファイルでは、日付(L)を使っていますが、説明としては yyyy/mm/dd 形式としてお話しています。

これらの数値は、フォーム入力の際に自動的に表示される仕組みを考えています。具体的には、

  • 記入日には、Date()関数
  • 記入時間には、Now()関数

を用います(これらは、フォームのところでお話します)。

ここで、これらフィールドを1つにまとめられないかと云う疑問が湧いてきますね。 日時+時間を1つのフィールドに格納するということです。まぁ、すっきりしますしね・・・。

データ形式を、yyyy/mm/dd hh:nn:ss とすれば、2000/01/01 12:10:25 と表示されます。これを実現するには、Now()関数 を用いると簡単にできます。(これらは、フォームのところでお話します)。

しかし、これにはウィークポイントがあるんです。つまり、このデータを日付の抽出条件としてクエリ等で利用する場合に問題が発生します。

  • 例えば、1月分のデータを抽出するには、日付の抽出条件(指定条件)を 2000/01/01 から 2000/01/31 としますね。 yyyy/mm/dd のデータ型ならいいんですが、何せデータ型は yyyy/mm/dd hh:nn:ss 型なので、抽出が無効になります。 #なお、この場合はエラー表示がされませんから、充分注意して下さいね。

今の段階では、何のことやらさっぱり分からなくても結構です。安心して下さい。

 「年齢」から「question_5」フィールドまで

質問項目は、文字列データです。 であると、このquestion_*フィールドには、文字列データを格納していくことになるんですが、データベースは数値を扱うのがメインです。文字列を数値に置き換えてすっきりさせて下さい。

この置き換えには、リレーションを活用します(このリレーションについては、日を改めて説明する予定です)。え、何故なんだ?と云うお声が沸いてきそうなんで、ちょっと事情説明しましょうか。

データ管理は 数値 で行われるべきであると考えています。例えば、文字列(言葉)データを格納していく場合を想定して下さい。

  • 4丁目の花屋
  • 幸町の交差点
  • 港町警察署

 

データ入力者によっては、下記のようにデータ入力する場合が考えられます。

  • 四丁目の花屋
  • 幸町交差点
  • 港町警察

 

このような表現でも正解ですね。実生活の上では、全然問題ないです。が、しかし、データ管理上では、誤り なんです。

コンピュータは、4と四を別物と認識します。"の"のあるなしでも然りです。データ分析に誤差が生じてしまいます。これら 修正、及び入力者へのチェックを皆さんが管理者として日々できますか。

その点、数値は万国共通です。

1は「4丁目の花屋」、2は「幸町の交差点」‥と最初に決めておき、その数値を入力させるようなシステム作りを行ってさえいれば、余計なデータが入り込むことがなくなります。

この 1は「4丁目の花屋」、2は「幸町の交差点」‥ という取り決めを行い、システムに組み込むのが、リレーションの構築を行うと云うことなんです。

最後に、余りポピュラーじゃありませんが、テーブルで「ルックアップ」の設定ができるのをご存知でしょうか。私はお勧めしないんですが、お話だけはしておきます。

これを設定しますと、データシートに直接入力する場合やフォームでデータシービューとして入力する場合に該当項目をクリックするだけで入力ができるようになります。この設定はテーブルの各フィールドにある「プロパティ」で行います。

 

 

上記の例は、「tbl_question」テーブルの「年齢」フィールドのプロパティです。「表示コントロール」が見えますか。これは既定値では"テキストボックス"となっています。つまり、"テキストボックスからデータ入力を行う"と云う意味です。これを「リストボックス」に変更します。

 

次にどのテーブルをリストボックスとして使うのかを選択します。ここでは、「tbl_age」テーブルを指定しています。

そして、このテーブルを保存し開きます。「年齢」フィールドでデータ入力行うとすると下記のようなリストボックスが自動的に現れるでしょう。後は、項目を選択するだけです。便利ですね。

 

 

しかし、これには落とし穴がいろいろとありまして、例えばテキストボックス入力と併せて行う場合とか、データを抽出する時などに予期せぬことが発生しがちです。主としてデータシートでデータ入力やデータ表示を行う方以外は、利用せぬ方が無難です。

次に、「tbl_temp」テーブルなんですが、これは一時的に入力フォームのデータ格納に使うだけの予定です。入力フォームを閉じる時にはデータは全て消えています。よって、フィールドの構成は、全く「tbl_question」テーブルと同じで結構です。

普通は、このようなテーブル構成を行いません。つまり、「tbl_question」テーブルにフォームを介して直接データ入力を行います。

 第三者が使用するソフト

今回のソフトは、他人が使うことを前提にしています。しかも 素人 さん相手です(笑い)。

よって、データ入力の途中で取り止め等が頻繁に発生すると考えて、本テーブル(tbl_question)をこのような 荒波 から守る意味もあって 一時テーブル(tbl_temp)にデータ入力させて、全ての条件を満たされている場合のみ、本テーブル(tbl_question)へデータ転送させます。

と、同時に一時テーブル(tbl_temp)からデータ削除を行う。このような流れを予定しています。

 

以上、ざーっとお話しました。次回も引き続きテーブル関係のテーマを予定しています。では、…
 

ページの先頭へ 前ページへ戻る

 


テーブル作成の考え方 : アンケート管理ソフト


 

-Microsoft Access Club-