Recordset オブジェクト

Recordset オブジェクトは、ベース テーブルからのレコード、またはコマンドの実行の結果得られたレコードの集合全体を表すオブジェクトです。Recordset オブジェクトは、レコードセット内部の単一のレコードだけをカレント レコードとして常に参照します。



コレクション

Fieldsプロパティ

プロパティ

AbsolutePageAbsolutePositionActiveConnectionBOFBookmarkCacheSizeCursorTypeEditModeEOFFilterLockTypeMaxRecordsPageCountPageSizeRecordCountSourceStatus

メソッド

AddNewCancelBatchCancelUpdateCloneCloseDeleteGetRowsMoveMoveFirstMoveLastMoveNextMovePreviousNextRecordsetOpenRequeryResyncSupportsUpdateUpdateBatch

解説

Recordset オブジェクトは、Open メソッドを使って接続文字列を渡すことで、以前に定義された Connection オブジェクトとは別に作成できます。この場合でも ADO は Connection オブジェクトを作成しますが、それをオブジェクト変数に割り当てることはありません。ただし、複数の Recordset オブジェクトを同じ接続で開く場合は、Connection オブジェクトを明示的に作成して開いてください。これにより Connection オブジェクトがオブジェクト変数に割り当てられます。このオブジェクト変数を使わずに Recordset オブジェクトを開くと、同じ接続文字列を渡す場合でも、ADO は Recordset オブジェクトを作成するごとに新しい Connection オブジェクトを作成します。

Recordset オブジェクトは、プロバイダからのデータをレコード単位で操作する場合に使います。ADO を利用するときは、ほとんど Recordset だけを使ってデータを操作します。Recordset オブジェクトはすべてレコード (行) とフィールド (列) によって構成されます。プロバイダから提供される機能によっては、Recordset オブジェクトのコレクションやメソッド、またはプロパティの一部が使用できないことがあります。

Recordset オブジェクトを開くときは、次の 4 種類のカーソル タイプのうちのいずれかを使うことができます。

· 動的カーソル ほかのユーザーによる追加、変更、および削除の操作を見ることができます。ブックマークを利用する以外のすべての操作が Recordset を介して可能ですが、プロバイダがブックマークをサポートしていればそれを利用できます。

· キーセット カーソル 動的カーソルに似ていますが、ほかのユーザーによるレコードの追加操作を見ることはできません。また、ほかのユーザーが自分のレコードセットからレコードを削除しているときはそのレコードにアクセスすることができません。ブックマークは常に利用できるため、すべての操作が Recordset を介して可能です。ほかのユーザーによるデータの変更操作も見ることができます。

· 静的カーソル データの検索やレポートの生成のために使用する、レコード集合の静的なコピーが提供されます。ブックマークは常に利用できるため、すべての操作が Recordset を介して可能です。ほかのユーザーによるデータの追加、変更、または削除の操作を見ることはできません。

· 前方スクロール カーソル レコードの前方スクロールだけが可能であること以外は静的カーソルとまったく同じです。レコードセットを 1 回の操作で渡す必要がある場合にこの前方スクロール カーソルを使うと、パフォーマンスが向上します。

Recordset オブジェクトのカーソル タイプを選ぶために CursorType プロパティを設定する場合は、Recordset オブジェクトを開く前に設定してください。また、Open メソッドを使って引数 CursorType を渡すこともできます。

カーソル タイプを指定しない場合、ADO はデフォルトで前方スクロール カーソルを開きます。

Recordset オブジェクトは必要な数だけ作成できます。また、複数の異なる Recordset オブジェクトが競合せずに同じテーブルやフィールドにアクセスすることができます。

Recordset オブジェクトを作成するとき、1 番目のレコードがあればそこがカレント レコードとなり、BOF プロパティおよび EOF プロパティは False に設定されます。レコードがまったくなければ、RecordCount プロパティは 0 に設定され、BOF プロパティと EOF プロパティは True に設定されます。

カレント レコードの位置設定には、Move メソッドのほか、MoveFirstMoveLastMoveNextMovePrevious の各メソッドが使えます。また、AbsolutePositionAbsolutePage、および Filter の各プロパティを使ってもカレント レコードの位置を設定できます。前方スクロール Recordset オブジェクトでは、MoveNext メソッドだけが利用できます。Move メソッドを使って個々のレコードを参照するときは、BOF プロパティおよび EOF プロパティを使って、Recordset オブジェクトの先頭または終端を超えて移動していないかどうかを確かめることができます。

Recordset オブジェクトでは、"即時" および "バッチ" の 2 種類の更新をサポートしている場合があります。即時更新では、データ変更後に Update メソッドを呼び出すと、すべての変更データが直ちにデータ元のデータ ソースに書き込まれます。AddNew メソッドおよび Update メソッドを使って値の配列をパラメータとして渡せば、レコード内の複数のフィールドを同時に更新することもできます。

プロバイダがバッチ更新をサポートしている場合には、複数のレコードに対する変更をプロバイダにキャッシュさせておき、後で UpdateBatch メソッドによる 1 回のデータベース呼び出しによってそれらの変更データを転送することができます。このバッチ更新は、AddNewUpdate、および Delete の各メソッドによるデータ変更の場合に適用されます。UpdateBatch メソッドを呼び出した後に Status プロパティを使えば、データの競合がないかどうかをチェックし、それらを解決することができます。

注意 バッチ更新は、キーセット カーソルおよび静的カーソル以外のカーソルでは実行しないでください。

関連項目

Connection