|
今回から数回にわたり,この連載の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データベースの作成」画面で,データベース名を入力 |
さらに,「新しいテーブルの追加(T)」で,レースチームを登録するテーブルを作成していきます(図2)。
図2●作成されたデータベースにテーブルを追加する |
図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) | ○ |
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を主キーとする [画像のクリックで拡大表示] |
これらのテーブル定義は,Visual Studioから簡単に作成することができます。主キーを設定するには,行を選んで右クリックして「主キーの設定(Y)」を実行します。電話番号,E-Mail,備考は,入力を省略できるように「Nullを許容に」チェックを入れます。また,出走順からペナルティまでは何も入力しないと0が入るように,既定値に0を指定しました(図5)。
図5●何も入力しないと0が入るように,既定値を指定する |
この後,一覧表示の処理を作成するので,データを数件入力しておきましょう。サーバーエクスプローラから,テーブル名を右クリックして「テーブルデータの表示(S)」を選びデータを入力します(図6)。
図6●サーバーエクスプローラでテーブルを選択して,データを入力する |