Visual Basic データベース講座 |
データベースプログラムを行う前提となる知識とこの講座に関しての説明を行います。具体的なプログラム例はまだ登場しません。
概要 ・ データベースとは「読み書きすることを前提にデータをためておく場所」のことであり、単なるテキストファイルもデータベースということができる。 ・現在では「リレーショナルデータベース」という種類のデータベースが主流となっている。 ・データベースを読み書きするためにはデータベースエンジンと呼ばれる種類のソフトウェアを使用する。 ・よく使用されるデータベースエンジンはAccess, SQL Server, Oracleである。
・データベース製品を購入するとたいていの 場合管理用のソフトウェアが付属している。初心者はよくこの管理用のソフトウェア=データベースと考えてしまうが、これは大きな間違い。 |
この講座ではVBを使ってデータベースを操作する方法を中心にデータベースに関する話題を体系的に説明していく予定です。データベースの初歩的な知識からはじめますのでデータベースに関してまったく何も知らない方でも学習を進められるように配慮します。
ただし、VBについてはある程度の知識があることを前提としています。少なくとも初級講座に一通り目を通した方が望ましいですが、時間がないのであれば初級講座と並行して読んでも良いでしょう。
この講座で紹介するサンプルの実行に必要なものはVBだけです。VBのバージョンはVB2005以上が望ましいです。無料で利用できるVB2005 Express Editionでも構いません。
VB.NET(2002), VB.NET2003でもだいたいの説明はあてはまるはずですが、一部VB2005から導入された機能を使用する予定ですので具合が悪いです。そのため、この講座では対象のVBのバージョンをVB2005に限定します。
とはいってもデータベースプログラミングの領域ではVBのバージョンに少しくらいの違いがあっても実際のコードや手法がそう異なるものでもありませんから、ある程度技術力に自信があるのならばバージョンが違うVBを使用している方も積極的にこの講座を活用して下さい。
前置きが長くなっても仕方ありませんから、そろそろ本題に入ります。みなさんが楽しいデータベースプログラミングを満喫することを望みます。
いきなりプログラミングを開始したいと言う気持ちもわかりますが、ここは我慢してじっくりと初歩的なことがらを理解して下さい。データベースプログラミングの世界には独特の文化や思想があってこれらを理解しなくてはいきなりプログラム例を紹介してもチンプンカンプンになってしまいます。
データベースに関しては世間ではいろいろと複雑なことを言う人もいますが、要は「データを貯めておく場所」のことです。もちろん貯めておくだけで読み込めなくては意味がありませんから、「データを読み書きすることを前提にデータを貯めておく場所」と言った方が正確です。
データを書き込む機能は必須ではありませんが、ほとんどの場合は書き込み機能が要求されますので「読み書き」と表現してしまって良いでしょう。
こう考えると普通のテキストファイルはデータベースとしての用件を満たしています。実際にテキストファイルに書き込んだり、書き込んだ内容を読み込んだりしてデータベースを構築することは可能です。
たとえば、1行が1つのデータとして初めの20バイトが人物名、次の4バイトが生まれた年とするとこのデータベースは次のようなテキストファイルになります。
勝海舟
1823 岩倉具視 1825 西郷隆盛 1828 大久保利通 1830 木戸孝允 1833 |
後はプログラムでこれらのデータを読み書きするようにすれば立派な生年データベースアプリケーションの完成です。
しかし、実際に作ってみるとわかるのですがテキストファイルにデータを書いたり、読んだりするプログラムを作るのは意外と手間がかかる上にデータの件数が増えるとどんどんスピードが遅くなっていきます。
さらに、もう1つ重要な問題があります。生年だけではものたりないので、人物の所属もデータに追加するとしましょう。生年を表す4バイトの次の20バイトが所属を表すものとしてテキストファイルを次のように書き換えます。
勝海舟
1823幕府 岩倉具視 1825公家 西郷隆盛 1828薩摩 大久保利通 1830薩摩藩 木戸孝允 1833長州 |
西郷隆盛と大久保利通は同じ「薩摩藩」なのですが、人間が書くことですので「薩摩」と書いたり、「薩摩藩」と書いたりするぶれが発生することは十分に考えられます。
さて、プログラムでは所属別の人物の一覧を表示する機能を追加したとします。すると「薩摩藩」に所属する人物の一覧には大久保利通は表示されても西郷隆盛が表示されないと言う結果が発生します。
このような人間の「手書き」に依存していてはこのような現象を排除することはできません。したがってこの方法によるデータベースには限界があると言うことが容易にわかります。
同様のことはExcelファイルなどによるデータベースでもありえます。Excelできれいに表を作って、それをVBから読み書きできればなかなか見栄えもよく、編集もしやすいデータベースシステムが作れそうですが、やはり「薩摩藩」と「薩摩」と言ったような基本的なデータ自体の信頼性についてはテキストファイルと場合と事情は同じです。
では、どうすればデータの信頼性が保てるかと言うと実はどんなアプリケーションやツールを使っても人間が手で「薩摩」どの「薩摩藩」だのと書いている限りはこの問題の回避は不可能です。データベースにデータを書き込む根本的な方法から見直していかなければならないのです。
この回答は1970年にコッド博士が発表したリレーショナルデータベース理論にあります。この理論に従うと上述のデータベースは次のように2つのファイルに分けて記述すべきことになります。
001幕府 002公家 003薩摩藩 004長州藩 005土佐藩 |
■ファイル1
勝海舟
1823001 岩倉具視 1825002 西郷隆盛 1828003 大久保利通 1830003 木戸孝允 1833004 |
■ファイル2
ファイル1には所属の一覧だけを記載します。またこの一覧には所属先を区別するために"001"から"005"の番号をつけておきます。そしてファイル2の方では所属を文字で入力するのではなくこの番号で記述します。
これでいくと西郷隆盛も大久保利通も所属は「003」であって、これは「薩摩藩」ということになります。
この構造では人間の入力によるぶれは一切排除できます。もちろん「003」とすべきところをまちがって「004」としてしまうなどのミスは防げませんがこれはまた別のはなしです。
このように複数のファイルにデータを分割して保存するのが先ほど登場した「リレーショナルデータベース理論」の肝です。もちろん、コッド博士の研究内容にはもっと重要なほかの性質についてのものもありますが、今はこのファイルを分割すると言うところを押させておきましょう。
この仕組みによってデータの信頼性が高まるばかりか、やっぱり「薩摩藩」ではなく「薩摩」で登録しようと思った場合には1つ目のファイルの「薩摩藩」のところを「薩摩」に直すだけで済むなど強力なメリットがあります。
しかしプログラムは複雑になります。今まで1つのファイルだけを相手にしていればよかったものが2つになってしまいました。それにこれからもっといろいろなデータを追加していくと、それに応じてファイルも増えていってしまうことになります。
このような複雑な要求に対応するプログラムをゼロから自作するのはかなり困難です。そこで、このような要求に応えて世間ではデータベースを専門に扱う製品がいくつか存在し、通常データベースプログラミングと言うとこれらの製品を使ったプログラムを指すことになるのです。
リレーショナルデータベースに基づいた代表的な製品は次のようなものがあります。
製品名 | 読み方 |
SQL Server | エスキューエルサーバー |
Oracle | オラクル |
Access | アクセス |
MySQL | マイエスキューエル |
PostgreSQL | ポストグレエスキューエル |
■表1:リレーショナルデータベースを扱う主な製品
非リレーショナルデータベースである製品も存在しますが、現在はリレーショナルデータベースが圧倒的に優勢です。
勘違いして欲しくないのは、これらの製品はファイルがたくさんあって大変なデータベースの読み書きを単純な命令で実行してくれるものに過ぎず、実際のデータベースアプリケーションではないということです。これらの製品のことをデータベースエンジンと呼びます。アプリケーションの画面や操作・機能などはすべてこれらの製品とは無関係で、自分でプログラムする必要があります。
この辺の事情をちゃんと理解して欲しくて長々と説明を書いたといってもいいくらいです。
これだけを書くと、データベース製品はごく単純なことだけを実行しているように思われてしまうかもしれませんので補足します。 データベース製品はデータベースエンジンを精密に制御するためのかなり高等な処理を実行しています。たとえば、単純にデータを書き込むという場合だけを考えても、2人のユーザーが同時に同じデータを編集しようとした場合どのような処理をすべきかは難しい問題です。さらに、機密情報を保護するためにセキュリティの管理も必要ですし、事故や災害に備えてデータを保護する仕組みも考えなければいけません。データベース製品はこういった難しい問題に対する解決策を提示して、指定された方法で適切な制御を行います。 |
とは言え、自分でプログラムしないとデータの読み書きがまったくできないというのも不便な話ですのでこれらの製品にはインストールした直後からとりあえずデータを読み書きでいるようなアプリケーションが付属している場合が多いです。
よくある勘違いは、この付属アプリケーションこそが「データベース」なんだなというものです。ここまで説明すればわかっていただいていると思いますがこれは明らかに違います。このような付属のアプリケーション は各メーカーや団体が使用者の便宜のために開発したソフトウェアであって、これがなくてもデータベースの機能にはまったく影響はありません。ただし管理するのには不便です。これらのソフトウェアを使用しない場合はコマンドプロンプトだけでWindowsを制御するようなイメージになります。このようなソフトウェアの例としては、SQL Server 2005に付属しているSQL Server Management Studioなどが挙げられます。
■画像1:データベースアプリケーションの位置づけ
言葉だけではわかりにくいので図にまとめてみました。この図を見るとわかるようにアプリケーションはデータベースに直接アクセスするのではなく、データベースエンジンを経由してアクセスします。また、この図ではSQL Server Management Studioのような付属のソフトは「アプリケーション」の部分に該当し、データベースとは明確な違いがあることもわかります。
それから、言葉について1つ注意しておきます。ここでの説明では「ファイル」という言葉を使いましたが、データベースを扱うときにはこのようなファイルのことを「テーブル」と呼びます。
初めの例ではテキストファイルをデータベースとして扱う話をしていましたので、テーブルはそのままWindowsであつかう「ファイル」に一致しますが、ほとんどのデータベースエンジンでは効率性の観点からテーブルがそのままWindowsであつかう「ファイル」に一致するわけではありません。たとえば、Accessの場合には拡張子がmdbであるWindowsの1つのファイルの中に複数のテーブルを含んでいます。
テーブルの中にあるデータを見るにはプログラムを介してデータベースエンジンに命令するか、SQL Server Management Studioのような付属のソフトなどのデータベースにアクセスできる製品を利用することになります。
メモ -
「テーブル」と「ファイル」 慣用的に「テーブル」のことを「ファイル」と呼ぶ場合もあります。この場合「ファイル」と言ってもWindows上のファイルのことではないので慣れないうちはかなり紛らわしいです。Visual Basic 中学校では「テーブル」と「ファイル」という言葉は厳密に分けて使用します。今後「ファイル」と言う場合はWindows上のファイルだけを指すものとしますので注意して下さい。 なお、テーブルも役割に応じてさまざまに呼称されます。「マスタ」、「ジャーナル」、「ワーク」などは多くの場合テーブルの別名です。これらについては機会があればその都度説明します。 |
この講座ではデータベースエンジンとしてAccessを使用します。と言ってもAccessを購入する必要はありません。
Accessの仕組みについて補足しておきましょう。
まず、「Access」というのは本来はデータベースを利用した開発ツールの名前であって、必ずしもデータベースエンジンを指しているわけでありません。このあたりの事情がAccessの理解を複雑なものにしています。
Accessが使用しているデータベースエンジンの名前は「Jet」(読み方:Jet = ジェット)です。
Jetをコアに、初心者でも簡単にデータベースアプリケーションを構築できるように配慮された類まれな製品が「Access」なのです。また現在ではJetはWindowsにも組み込まれており、使用している人がそうとは知らなくても既にJetは使用可能になっています。従ってAccessを購入しなくてもJetさえ動いてくれればデータベースとしては使用可能で、この機能に関しては無料でいますぐにでも使えるということになります。
メモ -
Jetが使用可能になっていることを調べる 実際に目的のパソコンでJetが使用可能であるか調べてみましょう。VBではOLEDBという仕組みを使ってデータベースにアクセスします。このOLEDBで使用可能なデータベースの一覧を見るには、スタートメニュー でアクセサリのシステムツールからシステム情報を起動して、OfficeアプリケーションのOLE DBプロバイダを見ます。
■画像2:ODBCドライバ ここで一覧の中にMicrosoft Jet X.X OLE DB ProviderというものがあればOKです。VBが使用可能な環境ならば必ず使用可能になっているはずです。 |
本来「Access」という言葉と「Jet」という言葉は分けて使ったほうが正確なのですが、世間一般ではこれらをひとくくりにして「Access」と呼んでおり、この講座でもこのような広い意味で「Access」と言う言葉を使用します。
Accessを対象にプログラムを勉強すると、SQL ServerやOracleなどのほかの製品を扱うときにはまた勉強しなおさなくてはならないのでしょうか?いいえ。そんなことはありません。
すべてのリレーショナルデータベースエンジンは本来の指向が同じものですから1つの製品について十分な知識があれば他の製品にかんしてもある程度使用することが可能です。特に基本的なデータアクセスの部分については国際的な共通仕様が定められておりまったく同じ手順で扱うことができます。
各製品はこの共通仕様に独自の仕様を追加したり、性能を向上させることによって差別化を図っています。
今回は説明ばかりで具体的な話が登場しませんでした。 私も早く具体的なプログラム例を紹介して、実践的な内容に移りたいのですが、データベース初心者の方を対象としているためにそうさくさくとは進めません。
次回は実際にVBの開発環境を使ってデータベースの中を見たり、編集する方法を説明する予定です。またその過程でいくつかの専門用語についても説明します。
具体的なプログラム例はその次くらいの回になると思います。