データベースの利用の多くは、データを検索し取得することだと思います。 ここでは SELECT で抽出したデータを VB プログラムに取り込む方法を説明します。
データベースからデータを抽出する SQL は SELECT 文です。 「SELECT * FROM kojin;」 を実行すると、テーブル 'kojin' のすべてのデータが抽出されます。
SELECT 文で抽出したデータを VB プログラムで処理するために Recordset オブジェクトを使います。
Recordset オブジェクトは SELECT 文を実行した結果の作業テーブルを表すオブジェクトです。
Recordset オブジェクトは、OpenRecordset メソッドで作られます。 OpenRecordset メソッドは引数の SELECT 文を実行した結果として抽出されるデータを表す Recordset オブジェクトを新たに作り、その参照を返します。
次の例は、データベース db に対して「select * from kojin;」を実行した結果を表すオブジェクト rs を作ります。
Dim rs As Recordset
Set rs = db.OpenRecordset("select * from kojin;")
カレントレコードは Recordset オブジェクトの中のレコードで、値を見たり書き込んだりすることができるレコードです。 カレントレコードは、一つの Recordset オブジェクトの中に、一つだけ指定することができます。 プログラムは、このカレントレコードを順番に移動して処理を行います。
カレントレコードは次のメソッドで移動します(他にも条件を指定できる FindFirst メソッドなどがある)。
| Move | 位置を指定し移動します |
| MoveFirst | 先頭のレコードに移動します |
| MoveLast | 末尾のレコードに移動します |
| MoveNext | 次のレコードに移動します |
| MovePrevious | 前のレコードに移動します |
次の例は、最初に MoveFirst メソッドでカレントレコードを先頭のレコードとします。 ループの中の MoveNext メソッドでカレントレコードを後ろに移動します。 ループは末尾のレコードがなくなったら終了します。
カレントレコードの項目の値を見たり書き込んだりするときには、「rs!id」、「rs!Name」、「rs!Data」のように、列名を指定します。
rs.MoveFirst
Do While Not rs.EOF
Print #1, rs!id & vbTab & rs!Name & vbTab & rs!Data
rs.MoveNext
Loop
次のプログラムはデータベース 'db.mdb' に接続し、「ファイル出力」ボタンをクリックすると 'kojin' テーブル内のすべてのデータをテキストファイル 'kojin.txt' に出力します。

以下はソースプログラムです。
Option Explicit
Private db As Database
Private Sub cmdList_Click()
Dim statement As String
statement = "select id, name, data from kojin;"
On Error GoTo errorhandle2
Open "kojin.txt" For Output As #1
On Error GoTo errorhandle1
Dim rs As Recordset
Set rs = db.OpenRecordset(statement)
rs.MoveFirst
Do While Not rs.EOF
Print #1, rs!id & vbTab & rs!Name & vbTab & rs!Data
rs.MoveNext
Loop
rs.Close
Close #1
Exit Sub
errorhandle1:
Close #1
errorhandle2:
MsgBox Err.Description & vbCrLf & "SQL文:" & statement, _
vbExclamation, "ファイル出力"
Exit Sub
End Sub
Private Sub cmdQuit_Click()
db.Close
End
End Sub
Private Sub Form_Load()
On Error GoTo errorhandle
Set db = DBEngine.Workspaces(0).OpenDatabase("db.mdb")
Exit Sub
errorhandle:
MsgBox Err.Description, vbCritical, "DB接続"
End
End Sub
実行した結果はテキストファイルなので、メモ帳などで確認できます。
SELECT 文は WHERE 句で条件にあったレコードを取り出すことができます。 いろいろ試して下さい。
取り出したデータは計算などの処理が可能です。 VB の変数と同等に扱うことができます。