RecordsetClone プロパティ
Microsoft Access Visual Basic のリファレンス |
RecordsetClone プロパティ
フォームの "RecordSource/レコードソース" プロパティに設定されている、そのフォームの Recordset オブジェクトを参照します。値の取得のみ可能です。
expression.RecordsetClone
expression 必ず指定します。このトピックの [対象] をクリックして表示される Access オブジェクトのうちの 1 つを返すオブジェクト式を指定します。
解説
設定値は、フォームの "RecordSource/レコードソース" プロパティに設定されたテーブルまたはクエリのコピーです。たとえば、クエリを基にして作成したフォームの場合、RecordsetClone プロパティを参照することは、そのクエリを使って Recordset オブジェクトを複製することと同じになります。そのフォームにフィルタを実行すると、作成される Recordset オブジェクトにもそのフィルタの実行結果が反映されます。
このプロパティは、Visual Basic でのみ使用可能で、すべてのビューで値の取得が可能です。
RecordsetClone プロパティは、フォームのレコードをフォームとは別に移動したり操作したりするときに使います。たとえば、フォームと共に使うことができない DAO の Find メソッドなどを使うときに RecordsetClone プロパティを利用できます。
新規の Recordset オブジェクトが開かれるときは、先頭のレコードがカレント レコードです。Find 系のメソッドや Move 系のメソッドを使って Recordset オブジェクト内の他のレコードをカレント レコードにする場合は、DAO の Bookmark プロパティの値をフォームの Bookmark プロパティに代入して、Recordset オブジェクトのカレント レコードを、フォームのカレント レコードと同期させる必要があります。
RecordCount プロパティを使って、Recordset オブジェクト内のレコード数を数えることができます。次の使用例では、RecordCount プロパティと RecordsetClone プロパティを組み合わせて、フォームにあるレコード数を数える方法を示します。
Forms!受注.RecordsetClone.MoveLast
MsgBox "このフォームのレコード数は、" _
& Forms!受注.RecordsetClone.RecordCount _
& "です。", vbInformation, "レコード数"
メモ フォームを閉じたり、フォームの "RecordSource/レコード ソース" プロパティを変更すると、Recordset オブジェクトは無効になります。その後に、Recordset オブジェクトを参照したり、前に保存したフォームや Recordset オブジェクトのブックマークを参照すると、エラーが発生します。
使用例
次の使用例では、RecordsetClone プロパティを使ってフォームから Recordset オブジェクトの新規コピーを作成し、フィールドの名前を [イミディエイト] ウィンドウに出力します。
Sub Print_Field_Names()
Dim rst As Recordset, intI As Integer
Dim fld As Field
Set rst = Me.RecordsetClone
For Each fld in rst.Fields
' フィールド名を表示します。
Debug.Print fld.Name
Next
End Sub
次の使用例では、RecordsetClone プロパティと Recordset オブジェクトを使って、レコードセットのレコードとフォームのカレント レコードを同期させます。コンボ ボックスから会社名を選択すると、Find メソッドはその会社のレコードを検索し、Recordset オブジェクトの DAO の Bookmark プロパティがフォームの Bookmark プロパティに代入され、検索したレコードがフォームに表示されます。
Sub 仕入先コード_AfterUpdate()
Dim rst As Recordset
Dim strSearchName As String
Set rst = Me.RecordsetClone
strSearchName = Str(Me!仕入先コード)
rst.FindFirst "仕入先コード = " & strSearchName
If rst.NoMatch Then
MsgBox "レコードが見つかりません。"
Else
Me.Bookmark = rst.Bookmark
End If
rst.Close
End Sub