Database.OpenRecordset 方法 (DAO)
适用于: Access 2013 | Office 2013
创建一个新的 Recordset 对象,并将其追加到 Recordsets 集合。
语法
表达式.OpenRecordset (Name, Type, Options, LockEdit)
表达式 一个表示 Database 对象的变量。
参数
名称 |
必需/可选 |
数据类型 |
说明 |
---|---|---|---|
Name |
必需 |
String |
新的 Recordset 的记录源。 该源可能是表名、查询名或返回记录的 SQL 语句。 对于 Microsoft Access 数据库引擎数据库中的表类型 Recordset 对象,该源只能是表名。 |
Type |
可选 |
Variant |
RecordsetTypeEnum 常量,可指示要打开的 Recordset 的类型。 注意:如果在 Microsoft Access 工作区中打开 Recordset,并且不指定类型,OpenRecordset 会创建一个表类型 Recordset(如果可以)。 If you specify a linked table or query, OpenRecordset creates a dynaset-type Recordset. |
选项 |
可选 |
Variant |
RecordsetOptionEnum 常量的组合,可指定新 Recordset 的特性。 注意:常量 dbConsistent 和 dbInconsistent 相互排斥,同时使用两者会产生错误。 当 Options 使用 dbReadOnly 常量时提供 LockEdit 参数也会导致错误。 |
LockEdit |
可选 |
Variant |
LockTypeEnum 常量,可确定 Recordset 是否锁定。 注意:可以在 Options 参数或 LockedEdit 参数中使用 dbReadOnly,但不能同时在两个参数中使用。 如果将其同时用于这两个参数,将出现运行时错误。 |
返回值
Recordset
说明
通常,如果用户在更新记录时接收到此错误,代码应刷新字段的内容,然后检索最近修改的值。 如果在删除记录时出错,代码应向用户显示新记录数据,同时显示一则消息,指示最近更改了数据。 此时,代码可能会请求确认用户是否仍要删除记录。
如果在 Microsoft Access 数据库引擎连接的 ODBC 工作区中,对包含 IDENTITY 列的 Microsoft SQL Server 6.0(或更新版本)表打开了 Recordset,则还应该使用 dbSeeChanges 常量,否则会导致出错。
对一个 ODBC 数据源打开多个 Recordset 可能会失败,因为连接正被 OpenRecordset 调用占用。 解决此问题的一种方法是在打开 Recordset 后立即使用 MoveLast 方法,以完全填充 Recordset 。
使用 Close 方法关闭 Recordset 会自动从 Recordsets 集合中将其删除。
注意
如果 source 引用由与非整数值串联的字符串组成的 SQL 语句,并且系统参数指定非美国。十进制字符(如逗号 (例如,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