Chapter 2 MDBとして作ってみよう!(1)

2-1.サンプルアドインについて
2-2.テーブルを作る
2-3.クエリーを作る


2-1.サンプルアドインについて

それでは、"ポイントだけ押さえれば簡単にオリジナルアドインを作成できる"というテーマにしたがって、さっそくアドイン作りに入っていきましょう。具体的な作成手順に入る前に、今回サンプルとして作成するアドインの完成予想図を説明しましょう。

このサンプルアドイン(SampleAd.MDA)は、[ツール]-[アドイン]メニューから起動するメニューアドインで、次のような機能を持っています。
  1. カレントデータベースにあるすべてのフォームを調べ、その名前をリストボックスに一覧表示します。
  2. その中からフォームを1つ選択して、[OK]ボタンをクリックします。
    フォーム一覧の画面イメージ
  3. 指定したフォーム(フォームオブジェクト)のすべてのプロパティを調べます。
  4. プロパティ名とプロパティ値をリストアップしたフォームを表示します。
    プロパティ一覧の画面イメージ
簡単にいえば「フォームプロパティ表示アドイン」です。「これならフォームのプロパティウィンドウを見ればいいじゃないか!」と言われそうな、アドインとしては非常に単機能で実用性のないものですが、どんな感じでアドインを作っていくかを知るには十分だと思います。逆に高機能なアドインを作るにしても、結局はVBAのコードが複雑になったり、フォームの数が増えたりするだけで、アドインと普通のデータベースとの違いがより明確になるというものでもないでしょう。

今回のもう一つのテーマのポイントは、「アドインといっても、基本は普通のデータベース .MDB と同じ」ということです。それを知っていただくためにもあえて最初はMDBとしてアドインを作り始めることにしました。これを今読んでいる方のほとんどは、しばらくはこれが「アドイン入門」であることを忘れるぐらい、いつも作っているデータベースと同じ手順で作っていくことが分かると思います。

ページのトップへ



2-2.テーブルを作る

まず、Accessを起動して、データベースを新規作成します。今回は普通のデータベース .MDB として作成します。データベースの名前は SampleAd.MDB です。

データベースができたら、最初にテーブルを作成します。もちろん実際には、フォームを先に作っても、部品としてプロシージャを先に作ってもかまいません。

今回作成するテーブルは、カレントデータベースのフォーム一覧データを格納するテーブル(smp_tblObjList)指定フォームのプロパティ一覧データを格納するテーブル(smp_tblObjPropList)の2つです。それぞれのテーブルのフィールドデザインは下図のとおりです。
  • smp_tblObjList テーブル
    smp_tblObjListテーブルのデザイン

  • smp_tblObjPropList テーブル
    smp_tblObjPropListテーブルのデザイン
ここではテーブルの頭に"smp_"という名前を付けていますが、これは、ユーザーが作成しているデータベースのテーブルか、あるいはアドイン上のテーブルかを簡単に識別できるようにするためのものです。テーブルやクエリー名の場合にはあまりこだわらなくてもよいのですが、モジュールのプロシージャ名などではこのちょっと変わったユニークな名前が重要になってきます。それについてはモジュールのところで別途説明しますので、ここでは、ある種、慣例的に付けるものだと思ってください。要するに他の人がめったに付けないような名前にすれば何でもよいのです。

smp_tblObjListテーブルは、データベース上にあるフォームの名称を格納するだけですので、「ObjectName」というテキスト型フィールドだけを定義します。もし、フォーム名一覧のリストボックスに、フォーム名だけでなくフォームの「説明」や「更新日時」も表示したければ、それに合わせてフィールドを作っておいてもよいでしょう。また、ここではIDフィールドは特に意味を持ちませんが、テーブルの最初の保存時に勝手に追加されるままにしておきました。

smp_tblObjPropListテーブルは、指定フォームのプロパティ名とプロパティ値を格納します。プロパティ名はこのテーブルの「PropertyName」フィールドに格納します。また、各プロパティ値は「PropertyValue」フィールドに格納します。プロパティ値には文字列や数値のものもありますが、特に注意しなければならないのは、中には非常に長い文字列、つまりテキスト型フィールドとして格納可能な255バイトを超えるプロパティ値を持つ可能性もあるということです。例えば[RecordSource]プロパティにSQLステートメントを格納している場合などがそれに相当します。そのため「PropertyValue」フィールドはメモ型フィールドとしておかなければなりません。

今回はたった2つのテーブルだけ、しかも非常にシンプルなフィールド構成のものです。確かに、格納されるデータの内容は「氏名」や「金額」といったデータベースアプリケーションでよく使われるものとは違いますが、テーブルの作り方自体には特に違いはない、ということはお分かりになったと思います。

ページのトップへ



2-3.クエリーを作る

続いての作業として、クエリーを作成します。クエリーについても、とりたてて注意は要りません。必要に応じて選択クエリーやアクションクエリーなどを作成するだけです。しかし、今回のサンプルアドインではそれらのクエリーは1つも使っていません。smp_qdefObjList および smp_qdefObjPropList という2つのデータ定義クエリーがあるだけです。

この2つのクエリーはちょっと変わった用途に使っています。先ほど作成した2つのテーブルですが、まずsmp_tblObjListテーブルの場合には、異なるデータベースを対象にフォーム一覧を調べる際、それまであったフォーム一覧データをクリアして、テーブルをいったん空にしなければなりません。またsmp_tblObjPropListの場合には、異なるフォームのプロパティを調べる際にそれまであった他のフォームのプロパティ一覧データをクリアしなければなりません。そのような場合、削除クエリーを実行しても、またVBAを使って削除してもまったく差し支えないのですが、今回はその1つの方法として、データ定義クエリーを使ってテーブルそのものを作り直してしまう、という方法を使っています。後で図示するクエリーのSQLビューの内容を見れば分かると思いますが、"CREATE TABLE"というSQLステートメントを実行することによってテーブルを新規作成するのです。実際にはこのクエリーを実行する前に、それまであったデータの格納されているテーブルのオブジェクトをデータベースから削除しなければなりませんが、これについてはモジュール作成のところで説明したいと思います。

ここで作成するデータ定義クエリーは、
  • smp_tblObjListテーブルを生成する smp_qdefObjList クエリー
  • smp_tblObjPropListテーブルを生成する smp_qdefObjPropList クエリー
の2つです。それらのSQL文は次のようになっています。もちろんここで生成するフィールドは、「テーブルの作成」のところで説明したものと同じものです。ということは、実はこのクエリーを先に作れば、テーブルをデザインする作業はわざわざやらなくてもよかった、ということになります。しかし、テーブルを実際に作ってみて、テーブルの定義が確定してからデータ定義クエリーを作成する方が、手順としては確実な方法でしょう。
  • smp_qdefObjList クエリー
       smp_qdefObjListクエリーのデザイン
  • smp_qdefObjPropList クエリー
       smp_qdefObjPropListクエリーのデザイン
なお、もしこのサンプルアドインの最後に表示されるプロパティ一覧のフォームで、プロパティ名をキーとして並べ替えて表示したいという要求があれば、それに対応した選択クエリーを作成しておくのもよいでしょう。

ページのトップへ

| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved