次の方法で共有


Database.OpenRecordset メソッド (DAO)

適用先: Access 2013 | Office 2013

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

構文

.OpenRecordset (NameTypeOptionsLockEdit)

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

パラメーター

名前

必須かどうか

データ型

説明

名前

必須

文字列型 (String)

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

Type

省略可能

Variant

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

: タイプを指定せずに Recordset を Microsoft Access ワークスペースで開くと、可能な場合は OpenRecordset はテーブルタイプの Recordset を作成します。 If you specify a linked table or query, OpenRecordset creates a dynaset-type Recordset.

オプション

省略可能

Variant

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

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

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 コレクションから削除されます。

注:

source が非整数値と連結された文字列で構成される SQL ステートメントを参照し、システム パラメーターで米国以外を指定する場合。コンマなどの 10 進文字 (strSQL = "PRICE > " & lngPrice、lngPrice = 125,50 など) は、Recordset を開こうとするとエラーが発生します。 連結時に数値がシステムの既定の小数点の記号を使って文字列に変換されますが、SQL で小数点の記号として使用できるのはピリオドのみになるからです。

リンクの提供元: 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