指定されたオブジェクトのレコード ソースを表す ADO Recordset または DAO Recordset オブジェクトを返すか設定します。 オブジェクトの読み取り/書き込み。
構文
式。レコードセット
式: Report オブジェクトを表す変数。
解説
Recordset プロパティは、フォーム、レポート、リスト ボックス コントロール、またはコンボ ボックス コントロールで参照されるデータを提供する Recordset オブジェクトを返します。 たとえば、クエリに基づくフォームで Recordset プロパティを使って参照を行うことと、同じクエリを使って Recordset オブジェクトの複製を作成することは同じです。 ただし、 RecordsetClone プロパティと異なり、フォームの Recordset プロパティによって返されるレコードセットでどのレコードがカレントかを変更すると、フォームのカレント レコードにも反映されます。
注:
レポートを ADO レコードセットにバインドすることはできません。 DAO を使用するか、一時テーブルに ADO レコードセットをダンプしてから、その一時テーブルをレポートにバインドします。
Recordset プロパティの値の取得と設定が可能かどうかは、このプロパティで定義されるレコードセットの種類 (ADO または DAO) とデータの種類 (Access または SQL) によって決まります。
| レコードセットの種類 | SQL データに基づく | Access データベース エンジンによって保存されたデータに基づく |
|---|---|---|
| ADO | 読み取り/書き込み | 読み取り/書き込み |
| DAO | 該当なし | 読み取り/書き込み |
次の使用例では、フォームとレコードセットを開き、フォームの Recordset プロパティを新しく作成した Recordset オブジェクトに設定して、フォームをレコードセットに連結します。
Global rstSuppliers As ADODB.Recordset
Sub MakeRW()
DoCmd.OpenForm "Suppliers"
Set rstSuppliers = New ADODB.Recordset
rstSuppliers.CursorLocation = adUseClient
rstSuppliers.Open "Select * From Suppliers", _
CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Set Forms("Suppliers").Recordset = rstSuppliers
End Sub
Recordset プロパティを使用して、以下の操作を行います。
フォームで直接サポートされていないメソッドを Recordset オブジェクトで使用します。 たとえば、 Recordset プロパティと ADO の Find メソッドまたは DAO の Find メソッドをカスタム ダイアログで使って、レコードを検索できます。
トランザクション (ロールバック可能) を複数のフォームに影響を与える一連の編集でラップします。
フォームの Recordset プロパティを変更すると、" RecordSource /レコードソース"、" RecordsetType /レコードセット"、および " RecordLocks /レコードロック" の各プロパティも変更されます。 また、" Filter /フィルター"、" FilterOn /フィルター適用"、" OrderBy /並べ替え"、および " OrderByOn /並べ替え適用" などのデータ関連プロパティは無効になります。
フォームのレコードセットの Requery メソッドを呼び出す (
Forms(0).Recordset.Requery) と、フォームが非連結になります。 レコードセットにバインドされたフォームのデータを更新するには、フォームの RecordSource プロパティ自体をForms(0).RecordSource = Forms(0).RecordSourceに設定します。複数のフォームを共通のデータ セットにバインドする。 これにより複数のフォームと同期をとることができます。 例:
Set Me.Recordset = Forms!Form1.Recordset
注:
フォームがレコードセットに連結されているときに、[ フォームでフィルター ] コマンドを使用するとエラーが発生する。
例
次の使用例では、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
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。