ADOについて その3 Recordsetオブジェクト [ADO]
テーブルの内容をプログラムから参照したり、更新したりする時に使うのがRecordsetオブジェクトです。
Recordsetオブジェクトは、テーブルの内容や、クエリの結果を、1レコードずつ参照することができます。仕組みをざっと図解すると・・・
RecordSetオブジェクト自体に、データベースに問い合わせを行う機能はありません。データベースと会話をするのはConnectionオブジェクトの仕事なので、これを使ってどんなデータを取り出すかSQL文で指示を出します。
データベースから返された結果は、ACCESSでテーブルやクエリをデータシートビューで見ているような状態になっています。この結果のデータがRecordsetと呼ばれる物で、プログラムからRecordsetオブジェクトを参照することで、データの内容を読み取ることができます。また、レコードの追加や変更も行えます。
SQLの結果として返される内容は、図のような表の状態なのですが、Recordsetオブジェクトでは、この表を1行(ヨコの1行)ずつ読み出します。1行処理しては次の行へ進み、また処理が終わったら次の行の処理と繰り返します。
これを実際にコードにすると、以下のようになります。
Public Sub subRecTest()
Dim Cn As New ADODB.Connection
Dim recA As New ADODB.Recordset
'DB接続
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TEST.MDB;"
'レコードセットオープン
recA.Open "SELECT COMCD , COMMEI FROM TMSYOHIN ", Cn, _
adOpenForwardOnly, adLockReadOnly
Do While recA.EOF = False
Debug.Print recA!COMCD & ":" & recA!COMMEI
recA.MoveNext
Loop
'レコードセットクローズ
recA.Close
'DB切断
Cn.Close
End Sub
この例では、「TMSYOHIN」というテーブルから、全レコードの「COMCD」「COMMEI」を読み出します。
Recordsetオブジェクトの詳しい内容は、また別に説明します。
項目の値を取り出すときに、
Debug.Print recA!COMCD
という記述をしていますが、これは、
recA.Fields("COMCD").Value
を、略した書き方です。「!」について詳しく説明したいところですが、私はよくわかりません。ふ。
Recordsetを使うと、テーブルのレコードをプログラムから直接操作できるわけですが、あまり多用すると、DBのメリットが無くなりますのでご注意を。特に更新系。
ちょっと総合計がほしいからSELECTって言うのは良いのですが、複雑な更新処理だからRecordsetでプログラムからごりごりやるのは、パフォーマンスや処理の安定性が悪くなる場合があるので、避けた方が良いです。極力SQLでやって、複雑な処理が必要な場合は、まずストアドでの実装を検討した方が良いと思います。
大ざっぱですが、概要はこんなところで。
Recordsetオブジェクトのプロパティへ続く。
コメント 0