Share via


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