長谷川 裕行
(はせがわ ひろゆき)
有限会社 手國堂 代表取締役
http://www.hirop.com/
テクニカルライターとして活躍。プログラミングに関する著書多数、DB Magazineなどにも多くの記事を提供している。 |
VBによるアプリケーション作成手順をひととおり説明してきたので、データベースを扱うアプリケーションを作ってみることにしましょう。実のところ、VBでそれなりのアプリケーションを作るにはまだまだたくさんの事柄を知らなければなりません。が、あまり理屈ばかり頭に押し込んでも、実践が伴わなければやる気が湧いてきません。ここまでに覚えた知識を使って、とにかく作ってみましょう。
VBで、簡単な住所録を作ってみることにしましょう。住所録は、データベースの基本です。まず、デ-タベースについて簡単に説明しておきます。
- おなじみの住所録を作る -
最初に作るデータベース・アプリケーションは「住所録」です。1人分の情報が、
氏名、読みがな、生年月日、住所…
という形で整理され並んだ単純な構造で、誰にとってもおなじみのデータベースです。
実際に業務で用いるデータベースは、住所録のように単純ではありません。たくさんのデータが連携する、非常に大規模で複雑な構成となっています。が、それら複雑に見えるデータベースも、分解していくと住所録のような単純なデータベースの集まりです。
住所録は単純であるがゆえに、データベースを理解する上で最も適した素材であり、あらゆるデータベースの基本とも言える存在です。
- コンピュータで扱うデータベース -
さて、今「住所録はデータベースである」と受け取れる表現をしました。これは間違いではありませんが、誤解を招く表現でもあります。データベースを扱う前に、データベースについて簡単に整理しておきましょう。
たくさんの情報を書式化し、同一の書式によって効率的に管理できる形としたものを一般にデータベースと呼びます。しかしコンピュータの場合、単に名前や住所などの情報を書式化して集めただけでは、データベースとは呼びません。これは「テーブル」と呼ばれます。
データベースとは、1個以上のテーブルと、それを管理し操作するための手段をひとまとめにしたファイル、またはファイル群のことを指します。Accessのmdbファイルで説明すると分かりやすいでしょう。mdbファイルはデータベース・ファイルです。その中には、1個のテーブルだけではなく、クエリーと呼ばれるテーブルを操作するための機能が含まれています。また、テーブルやクエリーに関する管理情報も含まれています。これらの総体がデータベースとなります。
Accessのmdbファイルには、このほかに画面表示用のフォームや自動処理用のマクロなども含まれますが、これらはデータベースを扱いやすくするための機能であり、データベース本来の構成要素ではありません。
- テーブルとレコード -
VBでデータベースを扱う場合、その対象はテーブルとクエリーになります。クエリーというのはAccessでの名称で、一般的なデータベースではビューと呼ばれる機能に等しいと捉えられます。テーブルに記録された情報の中から必要な情報だけを、任意の形式で提示するための機能です。
あまり理屈ばかり追いかけても面白くないので、データベースに関しては回を追って詳しく説明することにしましょう。ここでは、なじみ深いAccessのmdbファイルを扱うことにします。従って、データベース関係の名称もAccessでの名称を使います。
ここまでの説明で、今から作ろうとするアプリケーションで扱う基本のデータが、データベースに含まれている「テーブル」であることが分かりました。テーブルには複数のレコードが存在します。
レコードとは、書式の統一された1件の情報です。住所録の場合なら
氏名 住所 電話番号...
などの要素が集まって1人の情報を表現したものがレコードとなります。つまり、1件のレコードで1人分の情報を記録するということです。
- レコードとフィールド -
1件のレコードは、複数のフィールドで構成されています。住所録の場合なら、上述の
氏名
などひとつひとつの要素がフィールドです。同じ書式のレコードが集まって1つのテーブルを構成し、1件のレコードは異なる種類のフィールドによって構成されている――ということになります。
この構造は、COBOLのレコードに対する考え方とまったく同じです。COBOLで
S-CODE PIC 999999
SIMEI PIC XXXXXXXXXXXX
S-YOMI PIC XXXXXXXXXXXX
:
などと定義するのと同じように、テーブルのレコードも
フィールド名:氏名
データ型:文字列
フィールドサイズ:20文字
といった形でフィールドを定義できます。データ型とは格納するデータの種類で、考え方としてはVBのデータ型と同じです。フィールドサイズは、データを格納する領域のサイズです。実際の定義方法は、データベースアプリケーションによって異なります。
また、データベースを統一的に扱うためのSQLという命令体系があり、これを使うとデータベースの操作が柔軟かつ詳細に記述できます。SQLについても、回を追って紹介することにします。
VBで作るアプリケーションの中から、テーブルを含むデータベースを作ることもできますが、ここでは先にAccessでデータベースを作り、それをVBで利用することにします。この方が簡単で、間違いも少なくなります。
- サンプルの住所録データを使う -
ここで、今回例として用いる住所録のテーブル構造を見ておきましょう。データベースのファイル名は"Addr01.mdb"で、その中に「T_住所録」というテーブルがあります。表1が、「T_住所録」テーブルのデザインです。Accessをお持ちの方は、これを参考に作ってみてください。作るのが面倒な方は、サンプルをダウンロードして利用してください。
サンプルのmdbファイルはAccess 97用です。Access 97またはVBのビジュアル・データマネージャというツールからオープンできます。ビジュアル・データマネージャは、VBのインストール時にデータアクセスツールやアドインが正しく組み込まれていれば、「アドイン(A)」→「ビジュアルデータマネージャ(V)」で実行できます。ここでは、Accessで操作することにします。
Accessのデータベースウィンドウから「T_住所録」を選択して[デザイン]ボタンをクリックすれば、テーブルの構造が把握できます。[開く]ボタンをクリックすれば、画面1のような住所データが表示されます。このデータはサンプルとして提供するもので、住所も氏名もすべて架空のものです。レコードは108件収録されています。
- 住所録テーブルの構造 -
本来なら、ここでAccessのデータベースの操作やテーブルの作り方などを紹介するべきなのですが、今の段階ではそういった面倒なことを省略し、とにかくこのデータベースをVBで利用することを考えましょう。
テーブルの作り方、データ型やフィールドのプロパティなどAccessとデータベースに関する知識は、VBによるデータベース・アプリケーション作成の基礎段階が終わってから、別途説明することにします。
ここでは「このような住所録のテーブルを、VBで利用するのだ」ということだけを理解しておいてください。
表1:Addr01.mdbに入っているテーブル「T_住所録」のデザイン
フィールド名 |
データ型 |
主なプロパティ |
ID |
オート
ナンバー |
インデックス:はい
(重複なし) |
氏名 |
テキスト |
フィールド
サイズ:20 |
読み |
テキスト |
フィールド
サイズ:30 |
性別 |
テキスト |
フィールド
サイズ:4 |
生年月日 |
日付/時刻 |
|
電話番号 |
テキスト |
フィールド
サイズ:20 |
郵便番号 |
テキスト |
フィールド
サイズ:10 |
住所1 |
テキスト |
フィールド
サイズ:40 |
住所2 |
テキスト |
フィールド
サイズ:40 |
年賀 |
Yes/No |
既定値:No |
画面1:テーブル「T_住所録」に記録されている住所データ
VBを起動し、アプリケーションを作っていきましょう。これまで同様、フォームにコントロールを貼り付けてプロパティを設定する、という手順です。コードの入力はほとんどありません。
- データベースの保存 -
これ以降の実践ではVBでデータベースを扱えることが大前提となります。特にAccessのmdbファイルをアクセスするJetデータベース・エンジンは必須です※。
作成に先立って、アプリケーションからアクセスされるデータベースファイル"Addr01.mdb"を、ハードディスクの適当なフォルダに保存しておきます。ここでは"C:\Db"フォルダに保存することにします。
|
|
データベースファイルを、これから作成するVBのプロジェクトと同じフォルダに保存する必要はありません。設定によって他のフォルダにあるデータベースファイルをアクセスできるようになります。
※Professional
EditionとEnterprise Editionには、mdbファイルをアクセスするJetデータベースエンジンが含まれているので、正しくインストールすればAccessがなくてもmdbファイルを操作できます。この機能は、Learning
EditionとStandard Editionには備わっていません。
- データコントロールの設定 -
「標準EXE」のプロジェクトを新規作成し、以下のように操作していきます。
(1) |
フォームにデータコントロール(Data:画面2)を貼り付ける場所は、フォームの左下付近にしておきましょう。画面3のようになります。 |
|
(2) |
データコントロールを選択し、プロパティウィンドウでプロパティを設定する
表2のように設定します。まずオブジェクト名とCaptionを設定し、次にDatabaseNameの欄で[...]をクリックしてファイル選択のダイアログボックスを開き、先に保存したデータベース・ファイル"Addr01.mdb"を指定しましょう。DatabaseNameの欄には、"C:\Db\Addr01.mdb"のように、フルパス(ドライブ名とフォルダ名をつなげた表記法)で表示されます。
次に、RecordSourceプロパティを設定します。DatabaseNameを設定したあとでRecordSourceの[▼]ボタンをクリックすると、DatabaseNameで指定したデータベースファイル内のテーブルがリストに表示されます。ここでは"T_住所録"テーブルしか入っていないので、これだけしか表示されません。
残るDefaultType、Enabled、RecordsetType、Visibleについては、標準で表2に示す設定となっているはずです。確認するだけで構いません。 |
画面2:ツールボックス上のデータコントロール(Data)
画面3:フォームにデータコントロールを貼り付ける
表2:データコントロールのプロパティ設定
プロパティ |
設定 |
オブジェクト名 |
dbAddress |
Caption |
住所録 |
DatabaseName |
C:\Db\Addr01.mdb |
DefaultType |
2 - Jet |
Enabled |
True |
RecordsetType |
1 - ダイナセット |
RecordSource |
T_住所録 |
Visible |
True |
- その他のコントロールの設定 -
これでデータコントロールの設定が終わり、データベース・ファイル"addr01.mdb"のテーブル「T_住所録」がアクセスできるようになりました。しかしフォームの上では、大きな変化はありません。最初の状態から変わった点といえば、Captionを設定したので、データコントロールの中間に"住所録"と表示されるようになったことくらいです。
ここで、今デザインしているフォームのCaptionプロパティも変更しておきましょう。"住所録(1)"としておきます。オブジェクト名は"Form1"のままで構いません。
(3) |
フォームに、以下のコントロールを貼り付ける
テキストボックス 4個
ラベル 4個
コマンドボタン 1個 |
|
(4) |
ラベルのプロパティを、表3のように設定する |
表3:ラベルのプロパティ設定
オブジェクト名 |
プロパティ |
設定 |
Label1 |
Caption |
ID: |
Alignment |
1 -
右揃え |
Label2 |
Caption |
氏名
: |
Alignment |
1 -
右揃え |
Label3 |
Caption |
読み: |
Alignment |
1 -
右揃え |
Label4 |
Caption |
電話番号: |
Alignment |
1 -
右揃え |
(5) |
コマンドボタンのプロパティを、表4のように設定する
BackColorの設定では、[▼]をクリックしてオープンしたカラーパレットで薄い灰色を指定します。 |
表4:コマンドボタンのプロパティ設定
オブジェクト名 |
プロパティ |
設定 |
cmdClose |
Caption
BackColor |
閉じる
&H80000004&
(薄い灰色) |
(6) |
テキストボックスのプロパティを、表5のように設定する |
表5:テキストボックスのプロパティ設定
オブジェクト名 |
プロパティ |
設定 |
txtID |
DataSource
DataField
Locked |
dbAddress
ID
True |
txtName |
DataSource
DataField |
dbAddress
氏名 |
txtKana |
DataSource
DataField |
dbAddress
読み |
txtPhoneNum |
DataSource
DataField |
dbAddress
電話番号 |
(7) |
コマンドボタン"cmdColose"に、以下のソースコードを入力する
コマンドボタンをダブルクリックしてコードウィンドウを開き、表示された
Private
Sub cmdClose_Click() |
と
の間に"End"と記述します。既に説明したように、これはアプリケーションを終了させるステートメントです。 |
これで、フォームは画面4のようになります。データコントロールに"住所録"と表示された以外、目立った変化はありません。が、実はもう、データベースをアクセスできるようになっているのです。
画面4:デザインを終えたフォーム
- 実行してみる -
アプリケーションを実行してみましょう。メニューから「実行(R)」→「開始(S)」を選択します。画面5のようなウィンドウがオープンし、テーブル「T_住所」のレコードが表示されます。
もしテーブルの内容が正しく表示されなかったときは、データコントロールのDatabaseNameプロパティとRecordSourceプロパティ、各テキストボックスのDataSourceプロパティとDataFieldプロパティの設定を確かめてください。
また、データコントロールのDatabaseNameで指定したフォルダに、Addr01.mdbというデータベース・ファイルが存在しているかも確かめましょう。
画面5:アプリケーションの実行画面
- プロパティ設定だけで実現できる -
ウィンドウ左下のデータコントロールで[>]をクリックすると次のレコード、[<]をクリックすると1つ前のレコードに表示が切り替わります。[|<]は先頭、[>|]は最後尾のレコードです。
"ID"以外の、氏名・読み・電話番号の各項目は、書き換えることもできます。ただし今回の仕様では、レコードの追加と削除はできません。
このように、フォームにデータコントロールとテキストボックスを貼り付け、いくつかのプロパティを設定するだけで、mdbファイルのテーブルを表示し、編集できるアプリケーションが作れます。
ソースコードとして入力したのは、[閉じる]ボタンの“End”だけでした。データベースを操作するための仕掛けは、すべて各コントロールのプロパティにあります。次回は、データコントロールとテキストボックスのプロパティによる連携、[追加]や[削除]ボタンの利用などについて解説します。
今回のサンプルは、Vb08Ex.lzhという圧縮ファイルとしてダウンロードできるようになっています。ハードディスクの適当なフォルダに解凍してください。Project1.vbp、Form1.frmなどのVBプロジェクトファイルとコンパイルされたEx08.exe、データベース・ファイルAddr.mdbなどが入っています。
サンプルを試す前に、必ずデータベース・ファイルAddr.mdbを、ハードディスクのC:\Dbフォルダにコピーしてください。
VBプロジェクトファイルのダウンロード(23.8KB) |