Recordset プロパティ

適用先
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

適用対象

ComboBox オブジェクト
Form オブジェクト
ListBox オブジェクト
Report オブジェクト

指定されたフォーム、レポート、リスト ボックス コントロール、またはコンボ ボックス コントロールのレコード ソースを表す ADO Recordset または DAO Recordset オブジェクトを返すか設定します。 読み取り/書き込み。

expression.Recordset

必須。 [適用対象] リストのいずれかのオブジェクトを返す式。

解説

Recordset プロパティは、フォーム、レポート、リスト ボックス コントロール、コンボ ボックス コントロールで閲覧されているデータを提供するレコードセット オブジェクトを返します。 フォームがたとえばクエリに基づく場合、Recordset プロパティを参照することは、同じクエリを利用して Recordset オブジェクトを複製することと等しくなります。 ただし、RecordsetClone プロパティの使用とは異なり、フォームの Recordset プロパティによって返されるレコードセットで現行のレコードを変更すると、フォームの現行レコードも設定されます。

このプロパティは、Visual Basic for Applications (VBA) コードを使用する場合にのみ利用できます。

Recordset プロパティの読み取り/書き込み動作は、レコードセットの種類 (ADO または DAO) とプロパティによって特定されるレコードセットに含まれるデータの種類 (Access または SQL) によって決定されます。

Recordset 種類 SQL データに基づく Access データに基づく
ADO 読み取り/書き込み 読み取り/書き込み
DAO 該当なし 読み取り/書き込み

次の例では、フォームの Recordset プロパティを新しく作成された Recordset オブジェクトに設定することで、フォームが開き、レコードセットが開き、レコードセットにフォームがバインドされます。

Global rstSuppliers As ADODB.RecordsetSub MakeRW()DoCmd.OpenForm "Suppliers"Set rstSuppliers = New ADODB.RecordsetrstSuppliers.CursorLocation = adUseClientrstSuppliers.Open "Select * From Suppliers", _CurrentProject.Connection, adOpenKeyset, adLockOptimisticSet Forms("Suppliers").Recordset = rstSuppliersEnd Sub

次の場合に、Recordset プロパティを使用します。

  • 一般的なデータ セットに複数のフォームをバインドする。 これにより、複数のフォームを同期できます。 次に例を示します。
    Set Me.Recordset = Forms!Form1.Recordset
  • フォームで直接サポートされない Recordset オブジェクトでメソッドを使用する。 たとえば、レコードを見つけるためのカスタム ダイアログで、ADO Find メソッドまたは DAO Find メソッドと共に Recordset プロパティを使用できます。
  • 複数のフォームに影響を与える編集セットをトランザクション (ロールバック可能) でラップする。

フォームの Recordset プロパティを変更すると、RecordSourceRecordsetTypeRecordLocks プロパティも変更されることがあります。 また、FilterFilterOnOrderByOrderByOn プロパティなど、一部のデータ関連プロパティがオーバーライドされることがあります。

フォームのレコードセット (Forms(0).Recordset.Requery など) の Requery メソッドを呼び出すと、フォームのバインドが解除される可能性があります。 レコードセットにバインドされたフォームのデータを更新するには、フォームの RecordSource プロパティをそれ自体 (Forms(0).RecordSource = Forms(0).RecordSource) に設定します。

フォームがレコードセットにバインドされているとき、Filter by Form コマンドを使用するとエラーが発生します。

次の例では、Recordset プロパティを使用して現在のフォームから Recordset オブジェクトの新しいコピーを作成し、[デバッグ] ウィンドウにフィールドの名前を出力します。

Sub Print_Field_Names()
    Dim rst As DAO.Recordset, intI As Integer
    Dim fld As Field
    Set rst = Me.Recordset
    For Each fld in rst.Fields
        ' Print field names.
        Debug.Print fld.Name
    Next
End Sub

次の例では、 Recordset プロパティと Recordset オブジェクトを使用して、レコードセットをフォームの現在のレコードと同期します。 コンボ ボックスから会社名を選択すると、 FindFirst メソッドを使用してその会社のレコードが検索され、見つかったレコードがフォームに表示されます。

Sub SupplierID_AfterUpdate()
    Dim rst As DAO.Recordset
    Dim strSearchName As String
    Set rst = Me.Recordset
    strSearchName = CStr(Me!SupplierID)
    rst.FindFirst "SupplierID = " & strSearchName
    If rst.NoMatch Then
        MsgBox "Record not found"
    End If
    rst.Close
End Sub

次のコードは、さまざまな条件下で Recordset プロパティが返すレコードセットの種類を決定するのに役立ちます。

Sub CheckRSType()
    Dim rs as Object
    Set rs=Forms(0).Recordset
    If TypeOf rs Is DAO.Recordset Then
        MsgBox "DAO Recordset"
    ElseIf TypeOf rs is ADODB.Recordset Then
        MsgBox "ADO Recordset"
    End If
End Sub