適用対象
| 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 プロパティを変更すると、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