Database.OpenRecordset メソッド (DAO)
適用先: Access 2013 | Office 2013
新しい Recordset オブジェクトを作成し、Recordsets コレクションに追加します。
構文
式.OpenRecordset (Name、Type、Options、LockEdit)
式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 定数の組み合わせ。 注: 定数 dbConsistent と dbInconsistent は互いに排他的なので、この 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