適用対象

ComboBox オブジェクト

Form オブジェクト

ListBox オブジェクト

Report オブジェクト

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

expression.Recordset

expression 必ず指定します。 [適用先] リスト内のいずれかのオブジェクトを返す式。

解説

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    NextEnd 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.CloseEnd 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 IfEnd Sub

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。