適用対象
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 プロパティを変更すると、RecordSource、RecordsetType、RecordLocks プロパティも変更されることがあります。 また、Filter、FilterOn、OrderBy、OrderByOn プロパティなど、一部のデータ関連プロパティがオーバーライドされることがあります。
フォームのレコードセット (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