Recordset オブジェクト (ADO)

適用先: Access 2013、Office 2013

基になるテーブルのレコードセット全体、またはコマンドの実行によって返された結果を表します。 Recordset オブジェクトでは、常にレコードセット内の 1 つのレコードのみをカレント レコードとして参照します。

注釈

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

ADODB.Recordset は、 Recordset オブジェクトの作成時に使用する ProgID です。 古くなった ADOR.Recordset ProgID を参照する既存のアプリケーションは、再コンパイルせずそのまま使用できますが、新たに開発するアプリケーションは、ADODB.Recordset を参照する必要があります。

ADO では、次の 4 種類のカーソルが定義されています。

  • 動的カーソル: 他のユーザーによる追加、変更、および削除を表示でき、ブックマークに依存しない Recordset 内でのすべての種類の移動が可能で、プロバイダーがブックマークをサポートしている場合にブックマークを許可します。

  • キーセット カーソル: 他のユーザーが追加したレコードを表示できない点と、他のユーザーが削除したレコードにアクセスできない点を除けば、動的カーソルと同様に動作します。 他のユーザーが変更したデータは表示できます。 常にブックマークをサポートするため、 Recordset 内でのすべての種類の移動が可能です。

  • 静的カーソル - データの検索やレポートの生成に使用するレコードのセットの静的コピーを提供します。は常にブックマークを許可するため、Recordset を介してのすべての種類の移動を許可 します。 他のユーザーによる追加、変更、または削除は表示されません。 これは、クライアント側の Recordset オブジェクトを開くときに許可される唯一の種類のカーソルです。

  • 前方スクロール カーソル: Recordset 内で前方向のスクロールのみ許可します。 他のユーザーによる追加、変更、または削除は表示されません。 Recordset のスクロールが 1 回だけで十分な場合は、これによってパフォーマンスを向上できます。

Recordset を開く前に CursorType プロパティを設定してカーソルの種類を選択するか、Open メソッドを使用して引数 CursorType を渡します。 プロバイダーによっては、カーソルのすべての種類をサポートしていないものもあります。 プロバイダーのマニュアルを確認してください。 カーソルの種類を指定しない場合、ADO では既定で前方スクロール カーソルが開かれます。

Recordset を開くために CursorLocation プロパティが adUseClient に設定されている場合、返された Recordset オブジェクトでは Field オブジェクトの UnderlyingValue プロパティを使用できません。 一部のプロバイダー (Microsoft ODBC Provider for OLE DB と Microsoft SQL Server の組み合わせなど) で使用する場合は、Open メソッドで接続文字列を渡すことで、以前に定義した Connection オブジェクトとは別に Recordset オブジェクトを作成できます。 ADO では引き続き Connection オブジェクトが作成されますが、そのオブジェクトはオブジェクト変数に割り当てられません。 ただし、同じ接続を介して複数の Recordset オブジェクトを開く場合は、 Connection オブジェクトを明示的に作成して開く必要があります。これにより、 Connection オブジェクトがオブジェクト変数に割り当てられます。 Recordset オブジェクトを開くときにこのオブジェクト変数を使用しない場合、ADO では、同じ接続文字列を渡した場合でも、新しい Recordset ごとに新しい Connection オブジェクトが作成されます。

Recordset オブジェクトは必要な数だけ作成できます。

Recordset を開くと、カレント レコードは最初のレコード (ある場合) の位置に置かれ、 BOF プロパティと EOF プロパティは False に設定されます。 レコードがない場合、 BOF プロパティと EOF プロパティの設定値は True になります。

MoveFirstMoveLastMoveNextMovePrevious の各メソッド、 Move メソッド、および AbsolutePositionAbsolutePageFilter の各プロパティを使用すると、プロバイダーが関連する機能をサポートしているものとして、カレント レコードの位置を変更できます。 前方スクロール タイプの Recordset オブジェクトは、MoveNext メソッドのみをサポートします。 Move メソッドを使用して各レコードに移動 (または Recordset を列挙) する場合、BOF プロパティと EOF プロパティを使用すると、Recordset の範囲を超えたかどうかを確認できます。

Recordset オブジェクトは、イミディエイト更新とバッチ更新の 2 種類の更新をサポートできます。 イミディエイト更新では、 Update メソッドを呼び出すと、データに対するすべての変更が直ちに基になるデータ ソースに書き込まれます。 また、 AddNew メソッドと Update メソッドを使用して、値の配列をパラメーターとして渡し、レコード内の複数のフィールドを同時に更新することもできます。

プロバイダーがバッチ更新をサポートしている場合は、プロバイダーによって複数のレコードに対する変更をキャッシュしてから、UpdateBatch メソッドを使用して、データベースを一度呼び出すだけで変更内容をまとめて転送できます。 この操作は、 AddNewUpdate 、および Delete の各メソッドを使用して変更を行った場合に適用されます。 UpdateBatch メソッドの呼び出し後、 Status プロパティを使用すると、データの競合があるかどうかを確認して解決できます。

注:

[!メモ] Command オブジェクトを使用せずにクエリを実行するには、クエリ文字列を Recordset オブジェクトの Open メソッドに渡します。 ただし、コマンド テキストを永続化して再実行するか、クエリ パラメーターを使用する場合は、 Command オブジェクトが必要となります。

Mode プロパティは、アクセス権限を制御します。

Fields コレクションは Recordset オブジェクトの既定のメンバーです。 結果として、次の 2 つのコード ステートメントは同じになります。

    Debug.Print objRs.Fields.Item(0)  ' Both statements print 
    Debug.Print objRs(0)              '  the Value of Item(0).