2007/03/13

Access2007 新機能 複数値フィールド -- 01

前回のMulti-valued field(複数値フィールド)に関しての続きです。

個人的にはRapidな開発領域から外れるような形でのMicrosoft Accessによるシステム開発にはあまり気乗りがしないのですが、今更ですがこれだけPCが普及した社会であり、企業内の机の上にはPCが基本である現状でもあり、日常的な細かな業務もPCで管理出来るようにして業務効率を上げたいとの要望は尽きることなくあるわけで、専用で高価なSystemを程でもないような領域では、Access2007のアプローチは有効であろうと思います。

目指すべきMicrosoft Accessでのシステム開発のポイントは、如何にコードを書かずに済ますかだと思います。色々と細かい事をフォローしようとするとVBAコードの記述が必要になってくるのですが、そのような局面を如何に減らすかがポイントではないでしょうか。

まずは前回作成したテーブルに対して、Access2007の基本機能でシンプルにフォームを作ってみます。テーマはあくまでもRapidな開発を考えてですので、スクラッチから(Formデザインで初期から)作成等はしません。

このAccessの機能によるフォームの自動作成のポイントは、テーブルデザイン時に各フィールドを適切に設定しておく事です。入力ルールやIMEの制御等を含めて、テーブルのデザインとして設定することで、フォーム作成時に後から余計な設定をする必要がなくなります。

前回のテーブル作成時にMulti-valued field(複数値フィールド)を設定しましたが、作成時にはフィールドの型としてLookup Wizard(ルックアップウィザード)を選びましたが、作成したテーブルのフィールド型は参照しているテーブルのPrimary Key(主キー)の型となります。(※ 主キーとして複数フィールドを設定している場合はもう少し複雑な事になりますが、これは別途記述したいと思います。)

作成(設定)時はLookup Wizardを選びますが、



作成されたテーブルのフィールド型はNumber型になっている。(参照先の主キーの型)



上記のように複数値を許可して作成したフィールドも型としては特に追加されたタイプではなく、複数値型が新たに追加されたわけでは無い事がわかります。

フォーム作成の対象となるテーブルを選択した状態でCreateメニューからFormボタンを押す事で、テーブルの各フィールド設定に基づいて自動的に作成されます。



作成されたフォームは以下のようになります。



複数値フィールドと設定したVendorsはテキスト型ですが、入力はキーボードからの文字入力は出来ず、ドロップダウンリストからの選択になります。



このようにテーブルのデザイン時に設定してあれば、シンプルな操作で入力フォームが作成できます。

同様の事を複数値フィールド機能を使わずに、テーブル同士を繋ぐ副テーブルを使った場合のフォームの作成ステップを考えると雲泥の差に感じます。

話はちょっとズレますが、実はこの別テーブルで関連付けした場合でもフィールドにルックアップの設定をしておけば、Accessはやや強引ながらもボタン一発で自動的に複数値を入力可能なフォームを作成してくれます。



ちょっとだけVendor入力のサブフォームのサイズを修正しましたが、それなりに使えるフォームです。入力規則はしっかりとフォローされますし、副テーブルにはデータが自動的(?)に入りますし。

ちなみに上記フォームの基となるテーブルと関連テーブルはこんな感じです。



このサブフォームもAccess2007からの新機能だと思います。従来はサブフォームはWizardを使うにしても別途作成する必要があったのですが、Access2007だとTableを直接参照する事が出来ます。



ですがこれが通用するのもフォームだけでレポート(帳票)作成となると別です。ボタン一発で作成したレポートを比較してみましょう。

まずは複数値フィールドを使ったテーブルから作成したレポート。



そして、副テーブルを使ったパターンのテーブルから作成したレポート。



上記のように副テーブルを使ったパターンでは、単純にAccessまかせではレポート(帳票)として使い物になりません。サブレポートを使うなり、VBAコードをレポート内に入れてレコード単位で子要素を取得して表示するような処理をしなければなりません。

つまり複数値フィールドを使用するメリットは別途副テーブル等を作成/管理する手間の面よりも、レポートやフォーム作成時の簡易性にあると思います。

VBAで制御コードを書いたSpecialなフォームやレポートにはデザインや入力性では敵わないのですが、作成必要な時間、つまりはコストを考慮した場合には検討する価値のある物なのではないでしょうか。

以上のような形で、複数値フィールド(Multi-valued field)に関して見てきましたが、次回にはその内部的な面を調べてる予定です。

またここまで使ってきた上でAccessの機能に「これはちょっと・・」的な事を思う面もあるので、それらも書きたいと思います。

関連のありそうな記事

0 コメント: