Chapter 6 テスト、そしてMDAへ

6-1.MDBを実行してみよう!
6-2.データベースプロパティの設定
6-3.システムテーブル(USysRegInfo)の作成
     ・テーブルの作成
     ・レコードの作成


6-1.MDBを実行してみよう!

テーブルやフォーム、モジュールなど、すべてのオブジェクトの作成が完了したところで、全体的なテストをしてみましょう。とはいってもまだ正式なアドインとしてはテストしません。現在作っている単独のMDBとしてテストしてみることにします。

テストに先立って、テスト用のフォームを作りましょう。テスト用のフォームというのは、カレントデータベースのフォーム一覧に表示するためのフォームです。このアドインではフォームのプロパティまでしか調べませんので、コントロールを挿入したりする必要はありません。フォームウィザードなど不要ですので、とにかく空のフォームをいくつか作っておきます

スタートアッププロシージャを実行準備ができたら実行です。このアドインを走らせるためには前述のスタートアッププロシージャを実行します
標準モジュールを開いてsmp_Mainプロシージャのコードのどこかをクリック、コードウィンドウの右上に"smp_Main"と表示されていることを確認して、[F5]キーを押します。もちろんイミディエイトウィンドウで"?smp_Main()"と入力して[Enter]でもかまいません。


うまくいけば、このサンプルアドインの機能とおりの動作をしてくれるはずです。選択するフォームを変えてみたりしながら、出力されたプロパティ値がそのフォームのプロパティシートに表示されているものと同じか確認してみてください。
テスト実行画面1 テスト実行画面2

なお、これを実行すると、上図のようにアドイン内にあるフォームの名前も一覧に出てきてしまいますが、モジュールではフォーム一覧の取得先データベースをCurrentDb関数を使って開いていますので、最終的にアドインとして実行すればこれらのフォームはここには出てきません。「このようなテストのとき、CurrentDb関数とCodeDb関数の違いはどうなるのだろう?」と思われた方もいるかもしれません。実は、CodeDb関数はアドインから呼び出されると.MDAファイルのみを参照しますが、MDBから呼び出された場合にはCurrentDb関数とまったく同じように作用します。このような単独のMDBとしてのテストでは便利なのですが、この2つを逆に使ってしまう場合も考えられますので、最終的なアドイン(.MDA)としてのテストではこの点も重要なチェック個所となるでしょう。

ページのトップへ



6-2.データベースプロパティの設定

さあ、いよいよこのサンプルアドインも大詰めです。これまでは普通のMDBとして作ってきましたが、正式なアドインとするために、いくつかの仕上げ作業を行います。まずはデータベースプロパティの設定です。

データベースウィンドウがアクティブになっているとき、[ファイル]メニューの[データベースプロパティ]を開いてみたことはありますか?。通常のアプリケーションではこの設定は大した意味を持たないので、意外と忘れられた存在かもしれません。しかしアドインの場合には重要です。とはいっても、動作に関して影響を与えるのではありません。アドインをセットアップする際、そのアドインに関する情報を提供するために「アドインマネージャ」にこの設定内容が表示されるのです。"正式なアドインにする"ということで、ここではその設定を行ってみましょう。

設定は簡単です。次の図を参考に、アドインマネージャに表示したい内容をデータベースの3つのプロパティ、[タイトル]、[会社名]、[コメント]に入力するだけです。
データベースプロパティのダイアログ

ページのトップへ



6-3.システムテーブル(USysRegInfo)の作成

・テーブルの作成

アドインがAccessにセットアップされるとき、アドインマネージャはアドイン内のあるテーブルを読み込んで、そのアドインがメニューアドインなのか、ウィザードなのか、あるいはビルダーなのかを判断します。また、アドインを起動する際に、Accessのメニューや新規作成ダイアログに表示されるアドイン名もそのテーブルから参照されます。実際にアドインが起動されようとしたとき、アドインの何というプロシージャをそのスタートアッププロシージャとして起動すればよいのか、その情報も同じテーブルから参照されます。それが「USysRegInfo」という名前の"システムテーブル"です

「USysRegInfo」テーブルは自分で作成しなければなりません。さらに所定の内容のレコードを追加する必要があります。そのレコードの設定によって、アドインの種類やスタートアッププロシージャなどの情報がAccess側に提供されるのです。したがって、ここでは実際にこのテーブルを作って、「メニューアドイン」として動作させるためにはどんなレコードを作らなければならないかを確認していきましょう。

まず作業に入る前に、メニューから[ツール]-[オプション]を実行してオプション設定の画面を表示させてください。ここで[表示]タブにある「システム オブジェクト」をチェックします。「USysRegInfo」テーブルはシステムテーブルです。これをチェックしないとデータベースウィンドウに表示されません。もちろんテーブルの設定作業が完了すれば後はめったに修正することはないでしょうから、元に戻しておいてもかまいません。

ここで、「USysRegInfo」テーブルはすべてを自分で作ってもよいのですが、最も簡単なのが、すでにあるアドインデータベースから丸ごとインポートしてくる方法です。そして、必要なところだけをこのアドインに合わせて修正していきます。これなら少なくてもフィールド構造を間違えることはありません。

例えば、Accessのセットアップ先にもよりますが、「C:\Program Files\Microsoft Office\Office\1041」にある「Utility.mda」からこのテーブルをインポートすることができます。もし同じ名前のテーブルが見つかれば、これ以外の.MDAでもかまいません。


・レコードの作成

「Utility.mda」から「USysRegInfo」テーブルをインポートした場合、そのテーブルにはまだレコードがありません。所定のレコードを追加入力する必要があります。インポートされた「USysRegInfo」テーブルを見ると、「Subkey」、「Type」、「ValName」、「Value」の4つのフィールドがあることが確認できると思います。これらのフィールドにどんな値を入力すればよいかがここでのポイントです。一方レコードについても、各レコードごとにそれぞれ異なる設定項目を保存するようになっています。

まず最初のレコードではレジストリへのサブキーの追加を指示します。メニューアドインの場合、次のような書式で設定します。

Subkey Type ValName Value
HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\サンプルアドイン(&S) 0    

「HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\」の部分はどんなアドインの場合でも必ずこのまま入力します。そしてその後に続けてメニューに表示するアドイン名を入力します。ここでは"サンプルアドイン"とします。また、最後にアンパサンド(&)+1文字を付加することによって、アクセスキーを割り当てることもできます。最初のレコードでは、Typeフィールドにはサブキーへの追加を意味する "0" を指定します。


次に、2番目のレコードではスタートッププロシージャ名を設定します。

Subkey Type ValName Value
HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\サンプルアドイン(&S) 1 Expression =smp_Main()

Subkeyフィールドには1番目のレコードとまったく同じ内容を入力します。このSubkeyフィールドは「USysRegInfo」テーブルのすべてのレコードで同じ内容にしなければなりません。全部で3レコード作りますが、1番目のレコードの内容をコピーして貼り付けてしまうと作業が楽ですし、間違いがありません。

Typeフィールドには"1"を入力します。これはレジストリに設定する値が文字列であることを示すものですのです、こだわらずにそのまま"1"と入力してください。

ValNameフィールドには、このレコードがスタートッププロシージャ名を指示するレコードであることを示す"Expression"を入力します。そしてValueフィールドにそのプロシージャ名を"=プロシージャ名()"の形式で、イコールを必ず付けて入力します。


最後に、3番目のレコードにこのアドインのデータベースファイルのパスと名前を設定します。

Subkey Type ValName Value
HKEY_CURRENT_ACCESS_PROFILE\Menu Add-Ins\サンプルアドイン(&S) 1 Library |ACCDIR\SamplAd.MDA

Typeフィールドには2番目のレコードと同様に"1"と入力します。ValNameフィールドには、このレコードがライブラリデータベースのパスを指示するレコードであることを示す"Library"を入力します。そしてValueフィールドには"|ACCDIR\"に続いて、このアドインのファイル名("SamplAd.MDA")を入力します。"|ACCDIR\"は定型的なもので、Accessのアドインなどが格納されるパスに自動的に展開されて解釈されます。


次の図は、このサンプルアドインで作成された「USysRegInfo」テーブルの実際の内容です。
UsysRegInfoテーブルの内容

「USysRegInfo」テーブルの内容はWindowsのレジストリとも関わり合いを持っています。しかしこれについてあまり深く考えると難しくなってしまいますので、オリジナルのアドインを作る際にはこのサンプルアドインのテーブルを部分的に変更して、見様見真似で作るのが簡 単でいいと思います。

今回の作業で、一応アドインとしての全体が完成しました。次回は実際にこのアドインをAccessにセットアップしてみます。

ページのトップへ

| Index | Prev | Next |