SSブログ

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オブジェクトのプロパティへ続く。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
※URL(リンク)は記述できません。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。