データの抽出

データベースの利用の多くは、データを検索し取得することだと思います。 ここでは SELECT で抽出したデータを VB プログラムに取り込む方法を説明します。


データの抽出結果を VB プログラムに取り込む方法

データベースからデータを抽出する SQL は SELECT 文です。 「SELECT * FROM kojin;」 を実行すると、テーブル 'kojin' のすべてのデータが抽出されます。

SELECT 文で抽出したデータを VB プログラムで処理するために Recordset オブジェクトを使います。

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 の変数と同等に扱うことができます。

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!