ADODB.Recordset
是 ActiveX Data Objects (ADO)
中用于操作数据库结果集的对象。它通常用来从数据库查询数据并在客户端应用程序中进行处理。Recordset
对象支持对数据库中的数据进行各种操作,如读取、修改、插入、删除等。
常用属性和方法
常用属性
RecordCount
- 说明:返回
Recordset
中的记录数。该属性在某些数据源中可能返回 -1(例如,对于某些只读连接的数据库)。 - 类型:整数
MsgBox rs.RecordCount
- 说明:返回
EOF
(End Of File)- 说明:如果
Recordset
的当前指针位于文件的末尾,则返回True
,否则返回False
。 - 类型:布尔值
If rs.EOF Then MsgBox "End of File" End If
- 说明:如果
BOF
(Beginning Of File)- 说明:如果
Recordset
的当前指针位于文件的开始,则返回True
,否则返回False
。 - 类型:布尔值
If rs.BOF Then MsgBox "Beginning of File" End If
- 说明:如果
Fields
- 说明:返回
Recordset
中列的集合。可以通过此属性访问单个列的值或元数据。 - 类型:
Fields
集合
MsgBox rs.Fields("ColumnName").Value
- 说明:返回
ActiveConnection
- 说明:返回或设置与
Recordset
关联的连接对象。可以用来设置连接的数据库,或重新打开与另一个数据库的连接。 - 类型:连接对象
Set rs.ActiveConnection = conn
- 说明:返回或设置与
Sort
- 说明:设置
Recordset
的排序顺序。可以按字段对记录进行排序。 - 类型:字符串
rs.Sort = "ColumnName DESC"
- 说明:设置
State
- 说明:返回
Recordset
当前的状态,指示它是否处于打开状态(1 = 开放,0 = 关闭)。 - 类型:整数
If rs.State = 1 Then MsgBox "Recordset is open" End If
- 说明:返回
CursorType
- 说明:返回或设置
Recordset
的光标类型。常见的值有:adOpenForwardOnly
:只前进光标(默认)adOpenKeyset
:支持更新和删除adOpenDynamic
:支持即时修改adOpenStatic
:静态光标
- 类型:整数
rs.CursorType = adOpenKeyset
- 说明:返回或设置
LockType
- 说明:返回或设置
Recordset
的锁定类型。常见值有:adLockReadOnly
:只读锁adLockPessimistic
:悲观锁adLockOptimistic
:乐观锁adLockBatchOptimistic
:批量乐观锁
- 类型:整数
rs.LockType = adLockOptimistic
- 说明:返回或设置
Filter
- 说明:为
Recordset
设置筛选条件,可以限制返回的记录。 - 类型:字符串
rs.Filter = "ColumnName = 'Value'"
- 说明:为
AbsolutePosition
- 说明:返回或设置当前记录的绝对位置。它是指记录集中的当前位置,从 1 开始计数。
- 类型:整数
MsgBox rs.AbsolutePosition
PageSize
- 说明:返回或设置
Recordset
中每一页的记录数。当Recordset
分页时使用此属性。 - 类型:整数
rs.PageSize = 20
- 说明:返回或设置
常用方法
Open
- 说明:打开一个
Recordset
,并通过指定的 SQL 查询、表格或存储过程填充数据。 - 语法:
rs.Open Source, ActiveConnection, CursorType, LockType, Options
Source
:数据源,可以是 SQL 查询、表名或存储过程。ActiveConnection
:连接对象。CursorType
:光标类型(如adOpenStatic
)。LockType
:锁定类型。Options
:其他选项(如adCmdText
)。
rs.Open "SELECT * FROM Employees", conn, adOpenStatic, adLockReadOnly
- 说明:打开一个
Close
- 说明:关闭
Recordset
,释放资源。 - 语法:
rs.Close
rs.Close
- 说明:关闭
AddNew
- 说明:向
Recordset
添加一条新的记录,允许你指定各个字段的值。 - 语法:
rs.AddNew
- 然后使用
Fields
属性设置字段的值。
rs.AddNew rs.Fields("Name").Value = "John Doe" rs.Fields("Age").Value = 30 rs.Update
- 说明:向
Update
- 说明:保存对当前记录的更改。
- 语法:
rs.Update
Delete
- 说明:删除当前记录。
- 语法:
rs.Delete
MoveNext
- 说明:将当前记录指针移动到下一条记录。
- 语法:
rs.MoveNext
MovePrevious
- 说明:将当前记录指针移动到前一条记录。
- 语法:
rs.MovePrevious
MoveFirst
- 说明:将当前记录指针移动到第一条记录。
- 语法:
rs.MoveFirst
MoveLast
- 说明:将当前记录指针移动到最后一条记录。
- 语法:
rs.MoveLast
Find
- 说明:根据给定的条件查找记录,并将记录指针移动到找到的位置。
- 语法:
rs.Find "FieldName = 'Value'"
rs.Find "Age > 30"
Clone
- 说明:复制
Recordset
对象,返回一个新的Recordset
,包括当前的所有记录。 - 语法:
Set rsCopy = rs.Clone
- 说明:复制
Save
- 说明:将
Recordset
中的记录保存到文件。 - 语法:
rs.Save "FileName", adPersistXML
- 说明:将
常见的 Recordset
使用场景
- 读取数据:
使用Open
方法打开一个查询,读取数据并处理。rs.Open "SELECT * FROM Employees", conn While Not rs.EOF MsgBox rs.Fields("Name").Value rs.MoveNext Wend
- 插入数据:
使用AddNew
和Update
方法插入新记录。rs.AddNew rs.Fields("Name").Value = "John Doe" rs.Fields("Age").Value = 30 rs.Update
- 更新数据:
查找并更新某条记录。rs.Find "Name = 'John Doe'" If Not rs.EOF Then rs.Fields("Age").Value = 31 rs.Update End If
- 删除数据:
删除当前记录。rs.Delete
总结
ADODB.Recordset
是 ADO 中用于处理数据库查询结果的核心对象,提供了丰富的属性和方法,用于读取、更新、插入、删除数据以及处理结果集。通过合理使用 Recordset
对象,开发者能够高效地操作数据库中的数据,并进行各种数据处理任务。
发表回复