Visual Basicユーザーのための Accessプログラミングソリューション
Access97 Tips集 part8
秋月 巌 AKIZUKI,Iwao
今月も先月に続き、Accessでプログラミングをする際に必要にオペレーションについて、説明します。AccessはVisual Basic互換のVBA(Visual Basic for Applications)をサポートしていますが、VBAを使おうとした場合、プログラミングを始める前に用意しておかなければならないオブシェクトがいくつかあります。テーブル、フォーム、レポートなどはVBAから動的に作成することも可能ですが、Accessのインタラクティブな環境を使って作成した方が便利です。また、これらのオブジェクトを的確に作成することで、後々のコーディングの手間を減らすことができます。できる限りAccessで用意されている機能を使いオブジェクトの設定が終わってから、VBAでプログラムを記述することで、より拡張性の高いシステムに仕上げるのが良策でしょう。
●データを表示するフォームを作成する(その2)
◆フォームのレコードセットプロパティ
デザインビューで作成した新規フォームにテーブルの内容を表示するには、フォームの「レコードソース」プロパティを設定する必要があります(図1)。「レコードソース」プロパティにはテーブル名、クエリー名、SQL文のいずれかを指定します。AccessのフォームはVisual Basicでいうならば、フォームとデータコントロールがセットになったものだと考えることができます。ひとつのフォームにはひとつのレコードセットを持つことができ、それ以上のレコードセットを操作する場合には、DAO(Data Access Object)を使ってVBAで操作するか、サブフォームをフォームを埋め込んで利用します。
フォームのオープン時に、「レコードソース」プロパティに設定した値を元に、自動的にレコードセットが取得されます。VBAにより「レコードソース」プロパティの値が動的に変更された場合には、Requeryメソッドを利用してレコードセットを更新します。
図1:フォームの「レコードソース」プロパティにテーブル名を設定
![]()
◆コントロールウィザードでフォームにテキストボックスを配置
ツールボックスのウィザードボタン(図2)がオンになった状態で、テキストボックスなどのコントロールをフォームに配置すると、自動的にコントロールウィザードが起動します(図3)。このダイアログでは、テキストボックスに表示するフォントの種類、サイズ、プロパティを設定します。次の画面(図4)では、テキストボックスがフォーカスを取得したときの日本語入力システム(IME)の動作を設定します。ウィザードの最後の画面である図5では、コントロールの名前を指定します。これらウィザードで指定した内容はテキストボックスのプロパティとして保存され、後からプロパティシートや、VBAコードで変更が可能です。 図2:コントロールウィザードを有効にする
図3:コントロールウィザードが自動的に起動
![]()
図4:テキストボックスがフォーカスを取得したときの動作を指定
![]()
図5:コントロールの名前を指定してウィザードを終了
![]()
◆レコードセットをフォーム上のテキストボックスに連結する
コントロールウィザードではテキストボックスの属性を指定するだけで、フォームのレコードセットとの連結は行ないません。コントロールにデータを表示するためには、コントロールの「コントロールソース」プロパティにレコードセットの項目名を指定します(図6)。フォームのレコードソースにSQL文を指定した場合には、ドロップダウンリストに項目が表示されないので、キーボードで入力します。
コントロールの設定が終了したフォーム(図7)を実行した画面が、図8です。DAOでレコードセットを作成した場合は、フォーム上のオブジェクトとレコードセットのデータを連結することはできません。データを連結できるのは、あくまでフォームの「レコードセット」プロパティによって取得されたデータだけです。
図6:コントロールソースに表示する項目名を設定
![]()
図7:コントロールの設定が終了
![]()
図8:実行するとデータが表示される
![]()
●コンボボックスにデータを表示するフォームを作成する
◆コンボボックスで利用するレコードセット
コンボボックスにデータを表示する場合には、コントロールウィザードが威力を発揮します。コンボボックスにデータを表示する場合、2つのレコードセットが必要になります。データを表示するためのレコードセットと、ドロップダウンリストに表示されるレコードセットです。
ここでは、作成した商品データを取り扱う取引先をコンボボックスに表示する方法を説明します。商品データの表示までは前項で作成したプログラムを利用しています。ドロップダウンリストには「取引先」テーブル(Torihikisaki)を使用し、リストには「取引先名」項目(Torihiki_mei)を表示します。しかし、取引先名を選択したときに「商品」テーブルに入力されるのは「取引先名」項目の値ではなく、「取引先」テーブルの「取引先コード」項目(Torihiki_code)のデータです。このデータが、「商品」テーブルの同名項目に格納されるようになっています。
◆コンボボックスの種類を選択
図9:ツールボックスからコンボボックスを選択
ツールボックスから「コンボボックス」ボタン(図9)をクリックして、フォームにコントロールを配置するとコントロールウィザードが起動します(図10)。最初の画面からは3つのラジオボタンを選択することができます。
最初の「テーブル、またはクエリーの値を表示する」は、ドロップダウンリスト内にテーブルに格納されたデータを表示する場合に使用します。
2番目の「表示する値をここで指定する」を選択すると、ドロップダウンリストに表示するリストを指定することができます。ここで指定したリストはテーブルには保存されず、コントロールのプロパティとして保存されます。
3番目の「コンボボックスで選択した値に対応するレコードをフォームで検索する」を選択した場合、検索目的のコンボボックスをウィザードで自動作成します。ドロップダウンリストにはフォームのレコードセットと同じデータが表示され、リストから選択した瞬間に該当のレコードにフォームのカレントレコードを移動します。
ここでは、テーブルから選択したデータを別のテーブルに格納するので、最初のラジオボタン「テーブル、またはクエリーの値を表示する」を選択します。
図10:「テーブル、またはクエリーの値を表示する」を選択
![]()
図11では、ドロップダウンリストに「取引先」テーブルの内容が表示されるように指定しています。下部にあるラジオボタンを選択するとリストボックスに表示されるアイテムが変更されます。続いて表示される図12では、表示する項目を選択しています。図ではひとつしか選択していませんが、複数の項目を選択し、表形式で表示することも可能です。
図11:ドロップダウンリストに表示されるテーブルを指定
![]()
図12:表示する項目に「取引先名」項目を指定
![]()
図13ではドロップダウンリストがビジュアルで表示されます。表示リストの列幅をここで設定することができます。図14ではコンボボックスの値を保存する項目を指定します。リストにはフォームのレコードセットに存在する項目が列挙されます。リストに表示されているテーブルのキー項目の値が、ここで選択した項目に保存されます。
図13:ドロップダウンリストのサイズを変更
![]()
図14:データを保存する項目を選択
![]()
最後にコントロールの名前を設定(図15)すれば作成が終了です(図16)。フォームを実行すると図17の画面が表示され、商品名と関連のある取引先名がコンボボックスに表示されます。
図15:コントロールの名前を設定
![]()
図16:操作が終了し、フォームに配置されたコンボボックス
![]()
図17:実行すると関連データが表示され変更も可能
![]()
●マスター詳細形式でデータを表示するフォームを作成する
◆マスター詳細形式とは?
マスター詳細形式とは、任意のレコードとそれに関連するデータをひとつのフォームで表示する方法のことです。このように複数のテーブルを関係づけて表示することで、リレーショナルデータベースの利点を活かすことができます。
ここで紹介するサンプルでは、ある商品のデータと、その販売履歴を表示します。商品のデータの表示には前項までで作成したフォームを利用します。
Accessでマスター詳細フォームを作成するには、サブフォームを利用します。サブフォームとはフォームの中にフォームを埋め込む方法のことです。埋め込まれるフォーム自体は普通のフォームと同じですが、「サブフォーム」コントロールを使うことで親フォーム内に表示されます。
◆「サブフォーム」ウィザード
サブフォームを利用するにもウィザードを使うと便利です。ツールボックスの「サブフォーム」ボタン(図18)をクリックしてフォームに配置するとウィザードが起動します(図19)。この画面では、サブフォームの作成方法を選択します。既存のフォームをサブフォームとして利用する場合は「フォームから作成する」を選択します。「テーブルやクエリーを使って作成する」を選択した場合、サブフォームに埋め込むためのフォームをウィザードが作成します。ここではサブフォームに使用するフォームを用意していないので、こちらを選択します。 図18:ツールボックスのサブフォームボタン
図19:サブフォームウィザード
![]()
◆親フォームとサブフォームの関連づけを設定
次の画面(図20)ではサブフォームに表示するためのデータを指定します。「テーブル/クエリー」コンボボックスから表示するテーブルかクエリーを指定し、リストボックスから表示する項目を選択します。次の画面(図21)では、親フォームとサブフォームとの関連付けを指定します。サブフォームに表示されるのは、テーブルやクエリーのすべてのデータではなく、親フォームに表示されているデータと関連のあるものだけだからです。
親フォームとサブフォームのレコードセットの間に共通の項目名が存在する場合、ウィザードは自動的にそれを検出し、リンク条件の候補を表示します。しかし、リンクづけする項目名が違っている場合などウィザードが正常に動作しないケースもあります。その場合はラジオボタンで「独自に設定する」を選択します(図22)。
図20:サブフォームに表示するデータを作成
![]()
図21:親フォームとサブフォームの関連付けを指定
![]()
図22:「独自に選択する」をチェックし、項目を選択
![]()
関連づける親フォームの項目とサブフォームの項目を、それぞれ指定します。関連づけが複数の項目に依存している場合は、ドロップダウンリストから複数の項目を選択します。最後にサブフォームの名前を指定してウィザードを終了します(図23)。ここで指定した名前は「サブフォーム」コントロールの名前だけでなく、埋め込まれるフォームの名称としても利用されるため、サブフォームとして区別しやすい名前を指定します。
作業の終了したフォーム(図24)を実行すると、親フォームに表示されている商品の購入履歴が表示されます(図25)。
図23:サブフォームの名前を指定して完了
![]()
図24:完成したマスター詳細フォーム
![]()
図25:表示されている商品の販売履歴をサブフォームに表示
![]()
●フォームに画像を表示する
◆画像データベース
図26:連結オブジェクトフレームボタン
AccessのテーブルにあるOLEオブジェクト型を利用することで、画像などのマルチメディアデータベースを作成できるだけでなく、Excelシートのような他の種類のオブジェクトを格納することもできるようになります。画像をフォームに表示するには、連結オブジェクトフレームを利用します。ツールボックスの連結オブジェクトフレームボタン(図26)をクリックしてフォームに配置します(図27)。データベースと連結するには、コントロールの「コントロールソース」プロパティに、OLEオブジェクト型の項目を指定します。
完成したフォーム(図28)はデータを表示するだけでなく、コピー&ペーストを利用してデータベースに情報を保存することも可能です。
図27:連結オブジェクトフレームをフォームに配置
![]()
図28:データベースに格納された画像をフォームに表示
![]()
VB Magazine ライブラリ | Visual Basicコースホームページ
int21 ホームページ | PCDN ホームページ