Database.OpenRecordset メソッド (DAO)

適用先: Access 2013 | Office 2013

新しい Recordset オブジェクトを作成し、Recordsets コレクションに追加します。

構文

.OpenRecordset (NameTypeOptionsLockEdit)

Database オブジェクトを表す変数です。

パラメーター

名前

必須かどうか

データ型

説明

名前

必須

String

新しい Recordset のレコードの取得元です。テーブル名、クエリ名、またはレコードを返す SQL ステートメントを指定できます。Microsoft Office Access データベース エンジンのデータベースに含まれるテーブル タイプの Recordset オブジェクトの場合は、テーブル名でのみ指定できます。

Type

省略可能

Variant

開く Recordset の型を示す RecordsetTypeEnum 定数。

: Microsoft Access ワークスペースで Recordset を開くときに、型を指定しない場合、OpenRecordset は、テーブル タイプの Recordset を作成します (可能な場合)。リンクされたテーブルまたはクエリを指定した場合、OpenRecordset は、ダイナセット タイプの Recordset を作成します。

オプション

省略可能

Variant

新しい Recordset の特性を指定する RecordsetOptionEnum 定数の組み合わせ。

: 定数 dbConsistentdbInconsistent は互いに排他的なので、この 2 つを同時に使用するとエラーになります。Options で dbReadOnly 定数を使用する場合に Lockedits 引数を指定してもエラーになります。

LockEdit

省略可能

Variant

Recordset のロックを決定する LockTypeEnum 定数。

: dbReadOnly を Options 引数または LockedEdit 引数のどちらか一方で使用することはできますが、両方で使用することはできません。両方の引数で使用した場合、実行時エラーが発生します。

戻り値

Recordset

注釈

通常、ユーザーがレコードを更新中にこのエラーが発生した場合は、フィールドの内容を更新して、新たに変更された値を取得するコードを記述します。レコードを削除中にこのエラーが発生した場合は、新しいレコード データと、そのデータが最近変更されたことを示すメッセージをユーザーに表示するという方法もあります。この時点で、レコードを削除するかどうかの確認をユーザーに求めることができます。

IDENTITY 列を持つ Microsoft SQL Server 6.0 以降のテーブルに対して Microsoft Access データベース エンジンが接続された ODBC ワークスペースの Recordset を開く場合は、dbSeeChanges 定数も使用する必要があり、使用しないとエラーが生じます。

ODBC データ ソースで複数の Recordset を開こうとすると、OpenRecordset に対する前の呼び出しで接続がビジー状態となるため、失敗する場合があります。これを回避する方法の 1 つは、Recordset を開いた直後に、MoveLast メソッドを使用して Recordset の末尾までデータを読み込むことです。

Close メソッドを使用して Recordset を閉じると、そのレコードセットは自動的に Recordsets コレクションから削除されます。

注意

ソース が文字列と非整数値を連結したもので構成される SQL ステートメントを示し、かつシステム パラメーターでコンマなどのピリオド以外の小数点の記号が使用されている場合 (たとえば、strSQL = "PRICE > " & lngPrice で lngPrice = 125,50)、Recordset を開こうとするとエラーが発生します。これは、連結の際に、数値はシステムのデフォルトの 10 進文字を使って文字列に変換され、SQL は米国内の 10 進文字しか受け付けないからです。

リンクの提供元:UtterAccess コミュニティ。 UtterAccess は非常に優れた Microsoft Access wiki およびヘルプ フォーラムです。

次の例は、パラメーター クエリに基づく Recordset を開く方法を示しています。

サンプル コードの提供元: Microsoft Access 2010 プログラマー用リファレンス

    Dim dbs As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset
    
    Set dbs = CurrentDb
    
    'Get the parameter query
    Set qdf = dbs.QueryDefs("qryMyParameterQuery")
    
    'Supply the parameter value
    qdf.Parameters("EnterStartDate") = Date
    qdf.Parameters("EnterEndDate") = Date + 7
    
    'Open a Recordset based on the parameter query
    Set rst = qdf.OpenRecordset()

次の例は、テーブルまたはクエリに基づいて Recordset を開く方法を示しています。

    Dim dbs As DAO.Database
    Dim rsTable As DAO.Recordset
    Dim rsQuery As DAO.Recordset
    
    Set dbs = CurrentDb
    
    'Open a table-type Recordset
    Set rsTable = dbs.OpenRecordset("Table1", dbOpenTable)
    
    'Open a dynaset-type Recordset using a saved query
    Set rsQuery = dbs.OpenRecordset("qryMyQuery", dbOpenDynaset)

次の例は、構造化照会言語 (SQL) ステートメントに基づいて Recordset を開く方法を示しています。

    Dim dbs As DAO.Database
    Dim rsSQL As DAO.Recordset
    Dim strSQL As String
    
    Set dbs = CurrentDb
    
    'Open a snapshot-type Recordset based on an SQL statement
    strSQL = "SELECT * FROM Table1 WHERE Field2 = 33"
    Set rsSQL = dbs.OpenRecordset(strSQL, dbOpenSnapshot)

次の例は、Filter プロパティを使用して、以降に開かれる Recordset に含めるレコードを決定する方法を示しています。

    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim rstFiltered As DAO.Recordset
    Dim strCity As String
    
    Set dbs = CurrentDb
    
    'Create the first filtered Recordset, returning customer records
    'for those visited between 30-60 days ago.
    Set rst = dbs.OpenRecordset(_ 
        "SELECT * FROM Customers WHERE LastVisitDate BETWEEN Date()-60 " & _
        "AND Date()-30 ORDER BY LastVisitDate DESC")
    
    'Begin row processing
    Do While Not rst.EOF
        
        'Retrieve the name of the first city in the selected rows
        strCity = rst!City
    
        'Now filter the Recordset to return only the customers from that city
        rst.Filter = "City = '" & strCity & "'"
        Set rstFiltered = rst.OpenRecordset
    
        'Process the rows
        Do While Not rstFiltered.EOF
            rstFiltered.Edit
            rstFiltered!ToBeVisited = True
            rstFiltered.Update
            rstFiltered.MoveNext
        Loop
    
        'We've done what was needed. Now exit
        Exit Do
        rst.MoveNext
       
    Loop
    
    'Cleanup
    rstFiltered.Close
    rst.Close
    
    Set rstFiltered = Nothing
    Set rst = Nothing