データベース設計演習3

(2007.01更新)

前回製作した、データベース(最終課題用)の問題点を調整する。

以下の例で指摘されている、パラメータクエリを利用した、検索用クエリの作成を各自で作成しているデータベースにも導入することを推奨する。

第12回の例題のデータベース「履修Pb」の問題点:


その他: Accessに関するテクニック

以下の機能を皆さんのデータベースで利用し、データベースを、より利便性の高いものにしてください。


Q&A

以前の講義(昨年度〜)で出た、Accessの設定に関する質問と回答

■「端数処理で 切り上げる関数は?」
  ・ int( 式 ) は、式の値を整数値に切り下げます(負の値の場合は、より小さな値へ切り下げ)
  ・round( 式 ) は、式の値を四捨五入します。
  ・int( 式 + 0.999) は、式の値を切り上げます。
   どんなに僅かな少数値でも切り上げるには、
   AccessのVBAで、roundupという関数を記述するほかありません。
    if 式 <> int( 式 ) then roundup=式+1 else roundup=式 endif

「時刻 - 時刻 の演算結果について」
  ・出社時刻 - 退社時刻 で勤務時間を求めると、小数の値になりますが、
   これは、1を24時間とした値です。 つまり、0.5は、12時間ということです。
   時給と勤務時間から給与に換算するには、
    (出社時刻 - 退社時刻)*24*時給
   を計算します。


■「通貨型で \記号 の代わりに $記号 で表示するには?」

テーブルのデザインを開き、該当フィールドのデータ型を 「通貨型」 にします。
次に、 デザイン画面下部の、 フィールドプロパティ の 書式 に、以下を入力します。

$#,####

■ 「クエリの結果で、順位計算して表示するには?」

標準のSQLやAccessのクエリには、ExcelのRank関数の様な、順位を求める関数はありません。
そこで、順位を求めるプログラムをVBAで作成するなどの工夫が必要になります。

(クエリの関数は基本的には、 select A,B, A+B, sqr(A) の様に、フィールド自身の値を用いて計算するタイプか、 select A,max(A) .... group by A のように、あるレコードのグループ内を集計した結果の値を1つだけ求めるタイプだけです。
順位の計算は、あるレコードのグループ内で、それぞれのレコード1つづつに別々の計算をする必要がありますから、標準の関数として用意されていないのかもしれません)

以下のサイトに計算方法が紹介されていたので参考にして下さい。
http://www.moug.net/tech/acvba/0120012.htm

VBAでプログラムを作成するのと、ACCESSの関数DCOUNTを使う方法の、2つの方法が紹介されています。

DCOUNTの方法の方が簡単(ただしレコード数が多くなると非効率)です。
以下の様な感じになります。

テーブル名「価格表」の、フィールド名「価格」の順位を降順で計算するクエリの式は、 
 DCOUNT("[価格]","価格表","[価格]>" & [価格])+1
※Dcountで、そのレコードの価格より大きな価格を持つレコードの件数を調べ、+1して順位としている


■ 「データベースにWebのアドレス(URL)を記録したいのですが?」

テーブルのデザインで、URLを格納するフィールドを作成し、データ型を”ハイパーリンク型”に設定してください。そのフィールドに、
 http://www.nagoya-bunri.ac.jp
などと入力しておくと、 フォームで表示した際に、アドレスをクリックするとブラウザで該当するページが表示されるようになります。
データ表示用のフォームは、フォーム作成ウィザードを使用し、帳票形式を選ぶとよいです。