データベース千夜一夜第6回

レコードの絞り込みと並べ替え/ADOによるデータベース制御 長谷川裕行
有限会社 手國堂

ADOによるDB制御

プログラミング言語からADOを介してデータベースを制御する例を示します。ここでは言語にVisual Basic 6.0を使いますが、ADOとSQLの重要な部分はどの言語でも変わりません。


- ADOの構造と機能 -

ADOは、図3のようなオブジェクトの集合体です。各オブジェクトは表1のような機能を持っています。



表1:ADOのオブジェクトと機能
オブジェクト 機能
Connection データベースとの接続を行うオブジェクト
Command データベースに対する処理命令を保持
Recordset 操作対象となる実質的なデータの集合(レコードセット)を保持
Error 接続時のエラー情報を保持
Field Recordsetオブジェクト内のフィールドを保持
Property ADOオブジェクトの各種プロパティを保持

【開発環境について】
ここでは、Visual Basic 6.0の場合を例に、具体例を掲げておきます。

Microsoft社の最新の開発環境を考慮すれば、Visual Studio .NETとADO.NETの組み合わせの方が一般的なようにも思えますが、実のところサーバーはWindows 2000 Server、実行環境はWindows 2000やNT 4.0といった組織はまだまだ多く、そこでは依然としてVisual Basic 6.0が使われています。

本記事のテーマはデータベースとそれを制御するためのSQLであり、最新の開発テクニックを紹介することではありません。そのため、具体的な開発のためのテクニックについて触れる場合は、できるだけ現状に即した環境を前提にしようと思います。


- DB制御の概要 -

ADOを使ったデータベース制御は、以下のような順序になります。この手順は、どの言語でも同じです。

(1) Connectionオブジェクトを生成
(2) ConnectionオブジェクトのOpenメソッドを実行(データベースの接続)
(3) Recordsetオブジェクトを生成
(4) RecordsetオブジェクトのOpenメソッドを実行(SQLの実行)

(1)~(2)の段階でデータベースに接続し、(3)~(4)でSQLを発行します。発行したSQL(今回の例ではSELECT文)の処理結果(抽出したレコード群)は、(3)で生成したRecordsetオブジェクトに格納されます。


- Connectionオブジェクトの生成とOpenメソッド -
- (データベースの接続) -

まず、ConnectionとRecordsetの2つのオブジェクトを扱う変数を宣言します。

  Dim adoHanbai As ADODB.Connection
   ↑Connectionオブジェクトを扱う変数

  Dim rsItems As ADODB.Recordset
   ↑Recordsetオブジェクトを扱う変数

次に、Connectionオブジェクトを生成します。ConnectionオブジェクトのConnectionStringプロパティにRDBMSごとに指定されているOLEDBプロバイダ文字列やデータベース名などを設定し、Openメソッドを実行します。

以下は、MSDEなどをインストールしたローカルなサーバーで、SQL Serverのデータベース“db1001ya”をオープンするためのVisual Basicのソースです。

Set adoHanbai = New ADODB.Connection
adoHanbai.ConnectionString = _
"Provider=SQLOLEDB;Integrated Security=SSPI;"
_ & "Persist Security Info=False;Initial Catalog=db1001ya;" _
& "Data Source=(local)" ←ローカルサーバーに接続する場合
adoHanbai.Open


- Recordsetオブジェクトの生成とOpenメソッド -
- (SQLの実行) -

引数にSQL(文字列)とデータベース名を指定して、RecordsetオブジェクトのOpenメソッドを実行すれば、RecordsetオブジェクトにSQLの処理結果(レコードセット)が保持されます。

Set rsItems = New ADODB.Recordset ←Recordsetオブジェクトを生成
rsItems.Open _ ↓引数にSQL文を与えてOpenメソッドを実行
"SELECT 商品ID,品名,単位,仕入価格,販売価格 FROM t_商品mr", _
adoHanbai, adOpenStatic, adLockOptimistic


- レコードセットの参照 -

Recordsetオブジェクトに格納されたレコードセットを読み取るには、Recordsetオブジェクトの各プロパティを参照します。また、Visual Basicではフォームに貼り付けたコントロールのData SourceプロパティにRecordsetオブジェクト、DataFieldプロパティにRecordsetオブジェクトの保持しているレコードセットのフィールド名を設定する――という方法が使えます。

これらについてはADOやSQLというよりVisual Basicによるアプリケーション開発の話題となるため、今の段階では深く触れないことにします。ADOによるデータベース制御の詳細については、SQLの他の機能を一通り紹介した後でもう一度説明します。


トップページ
抽出結果を並べ替える
ORDER BY句の複数指定
プログラミング言語からの利用
ADOによるDB制御
ADOの構造と機能
DB制御の概要
Connectionオブジェクトの生成とOpenメソッド(データベースの接続)
Recordsetオブジェクトの生成とOpenメソッド(SQLの実行)
レコードセットの参照
ConnectionStringプロパティと接続文字列
あとがき
Copyright © MESCIUS inc. All rights reserved.