金宏 和實(かねひろ かずみ)

 富山県高岡市 株式会社イーザー副社長。阪神タイガースが10連勝して首位に立ったときは,天にも昇るような心持ちでしたが,その後は8連敗でズルズルと。でも,上園,渡辺投手や桜井,狩野,赤松選手など若い選手の台頭を目にすることができたおもしろいシーズンでした。来季に期待が持てます。おっと,CSもがんばれ!

 今回から数回にわたり,この連載の5~7回で作成してきたライントレース競技会の結果を記録するプログラムを,データベースを利用するアプリケーションに変更していきたいと思います。

 本記事を読んでいただいている皆さんに,データベースを利用する意義や目的をあらためて説明する必要はないと思います。Visual Studio 2005では,データベースを利用するアプリケーションをいかに手早く作成できるかという点を中心に解説したいと思います。

 ここで利用するデータベース管理ソフトは,Visual Basic(VB)2005から使いやすく,無償で利用できるSQL Server 2005 Express Edition(以下,SQL Server)です。SQL Serverのインストールについては,拙稿『こうしろうのMindStorms日記』の253話などを参考にしてください。

テーブルの作成

 データベースを作成するところから始めましょう。VB 2005の「表示(V)」メニューから「サーバーエクスプローラ(V)」を開き,「新しいSQL Serverデータベースの作成(N)」でデータベースを作成します(図1)。ここでは「RaceDB」という名前でデータベースを作成することにします。

図1●「新しいSQL Serverデータベースの作成」画面で,データベース名を入力
図1●「新しいSQL Serverデータベースの作成」画面で,データベース名を入力

 さらに,「新しいテーブルの追加(T)」で,レースチームを登録するテーブルを作成していきます(図2)。

図2●作成されたデータベースにテーブルを追加する
図2●作成されたデータベースにテーブルを追加する

図3●アプリケーションのフォームから,テーブルに必要なフィールドを検討する
図3●アプリケーションのフォームから,テーブルに必要なフィールドを検討する

 テーブルに必要なフィールドは,図3のフォームを見ればわかるでしょう。NO,チーム名,代表者,電話番号,E-Mail,備考,一回目の出走順,タイム,ペナルティ,二回目の出走順,タイム,ペナルティをそれぞれフィールドとして作成します。

 作成したいフィールドを決めたら,次に各フィールドのデータ型を決めなければいけません(表1)。SQL Serverで利用できるデータ型は,表1の通りです。

表1●SQL Server 2005 Express Editionで利用できるデータ型
真数型 bigint 8バイトの整数型
int 4バイトの整数型
smallint 2バイトの整数型
tinyint 1バイトの整数型
bit 1または0と,NULL値をとる整数型
decimal 固定長の有効桁数と小数点以下桁数を持つ数値
numeric型も同様
money 8バイトで通貨の値を表す金額データ型
smallmoney 4バイトで通貨の値を表す金額データ型
概数型 float 浮動小数点数値データ型。桁数を指定できるが概数なのですべての値を正確に表現できるわけではない
real 4バイトの浮動小数点数値データ型
日付時刻型 datetime 日付と時刻を表すデータ型。3.33ミリ秒の精度
smalldatetime 日付と時刻を表すデータ型。1分の精度
文字列型 char 固定長の文字型。桁数を指定する
varchar 可変長の文字型。桁数を指定する
Unicode
文字列
nchar 固定長のUnicode文字列型
nvarchar 可変長のUnicode文字列型

Public Class RaceTeam
Private mintNo As Integer
Public Property NO() As Integer
Get
Return mintNo
End Get
Set(ByVal value As Integer)
mintNo = value
End Set
End Property
        ・
        ・
        ・
リスト1●データ型を決めるより所となるクラス定義

 リスト1のクラス定義では,NO(mintNo)と出走順(Order1)はIntegerなので,int型でいいでしょう。String型のチーム名(TeamName),代表者名(Represent),E-Mail,備考(Note)は,Unicode可変長文字列型のnvarcharにします。電話番号(Telno)は,同じくUnicodeの固定長文字列型のncharにします。

 固定長文字列型の場合,Telno nchar(13)と定義した場合,13文字ぶんの領域を必ず使用します。仮に7文字しか電話番号を入力しないときでも,固定的に13文字ぶんの領域を使います。

 一方,可変長文字列型の場合は,Email nvarchar(50)と定義しても,10文字しか入力しなければ,10文字ぶんの記憶に必要な領域しか使用しません。固定長に比べて,無駄がありませんね。

 しかし,固定長文字列型のほうが処理速度に優れていますので,長さにバラつきの少ないものは固定長文字列型に,大きく差があるものは可変長文字列型にすると良いでしょう。結果として,チーム・テーブル(テーブル名Teams)は,表2のように定義しました。

表2●チーム・テーブル(Teams)の定義
名前 列名 データ型 NULLを許容
NO(主キー) TeamNo int -
チーム名 TeamName nvarchar(20) -
代表者 Represent nvarchar(10) -
電話番号 Telno nchar(13)
E-Mail Email nvarchar(50)
備考 Note nvarchar(30)
出走順1 Order1 int -
タイム1 Time1 decimal(6,2) -
ペナルティ1 Penalty1 decimal(6,2) -
出走順2 Order2 int -
タイム2 Time2 decimal(6,2) -
ペナルティ2 Penalty2 decimal(6,2) -

 タイムとペナルティには,小数点以下2桁までの実数を記憶させたいので,decimal型を使います。decimal(6,2)とは,全体の桁数が6桁以内で,小数以下の値が2桁まで入力できることを示します。

 なお,レコードとしてのチームを一意に識別する主キーは,TeamNoです(図4)。

図4●TeamTnoを主キーとする
図4●TeamTnoを主キーとする
[画像のクリックで拡大表示]

 これらのテーブル定義は,Visual Studioから簡単に作成することができます。主キーを設定するには,行を選んで右クリックして「主キーの設定(Y)」を実行します。電話番号,E-Mail,備考は,入力を省略できるように「Nullを許容に」チェックを入れます。また,出走順からペナルティまでは何も入力しないと0が入るように,既定値に0を指定しました(図5)。

図5●何も入力しないと0が入るように,既定値を指定する
図5●何も入力しないと0が入るように,既定値を指定する

 この後,一覧表示の処理を作成するので,データを数件入力しておきましょう。サーバーエクスプローラから,テーブル名を右クリックして「テーブルデータの表示(S)」を選びデータを入力します(図6)。

図6●サーバーエクスプローラでテーブルを選択して,データを入力する
図6●サーバーエクスプローラでテーブルを選択して,データを入力する