Recordset 对象

Recordset 对象可实现对数据库记录的查询、增加、更新、删除。

Set recordset = Server.CreateObject("ADODB.Recordset")
属性 意义
AbsolutePosition 返回当前记录的位置号,或转到某记录,从 1 起或:
AdPosUnknown=-1:记录集为空
AdPosBOF    =-2:已到最前指
AdPosEOF    =-3:已到最后
AbsolutePage 返回当前记录所在页码,或转到某页的第一条记录
从 1 起,其余同上
ActiveConnection 设为连接字符串,或 Connection 对象
BOF 标记已超出首记录
Bookmark 当前记录书签
CacheSize 缓存记录数
CursorLocation 游标服务的位置
CursorType 游标类型
EditMode 当前记录的编辑状态
EOF 标记已超出最后记录
Index 索引名,字符串类型
Filter 筛选条件
LockType 锁定类型
MarshalOptions 指示要被调度返回服务器的记录
MaxRecords 指示最多需返回的记录数
PageCount 记录所占的页数
PageSize 每页的记录数,一般为10
RecordCount 记录数,只在游标为键集或静态时有效
Sort 排序记录,如
"name asc,age desc,sex"
Source 指示数据的来源,有(Command 对象,SQL,表名,存储过程名)
Fields Field 对象集合,代表字段,默认属性
State 执行异步方法时的当前状态
Status 指示有关批更新或其他大量操作的当前记录的状态
方法 意义
AddNew(...) 增加记录
CursorType 游标类型
CursorLocation 锁定类型
Cancel() 取消执行挂起的异步 Open 方法
CancelBatch(AffectRecords) 取消执行挂起的批更新,AffectRecords:
AdAffectCurrent=1:取消当前记录的批更新
AdAffectGroup  =2:取消满足 Filter 的更新
AdAffectAll    =3:取消所有记录的批更新
CancelUpdate() 取消对当前记录所作的更改,或取消新增记录
Clone(LockType) 复制当前对象的副本,LockType 为
AdLockUnspecified = -1 :锁定类型相同
AdLockReadOnly    =  1 :副本为只读
Delete(AffectRecords) 删除记录
Move(NumRecords,Start) 移动记录指针 NumRecords 个位置,Start:
AdBookmarkCurrent=0:从当前记录移动
AdBookmarkFirst  =1:从首记录移动
AdBookmarkLast   =2:从尾记录移动
MoveFirst() 指向最前一条记录
MoveLast() 指向最后一条记录
MoveNext() 指向上一条记录
MovePrevious() 指向下一条记录
NextRecordset(RecordsAffected) 返回下一条查询的记录集 RedordSet 对象,无则返回 nothing
参数用于返回受影响的记录数,不是返回的记录数
Open(...) 执行查询,可包含多条查询语句,返回记录
Requery() 再次执行查询,返回最新的数据集
Resync(...) 重新从数据库中读取已查询记录的最新值
Save(FileName, PersistFormat) 保存记录到文件,并且指针回到首行
PersistFormat 指示文件格式
常量 说明
adPersistADTG (默认)使用专用的“Advanced Data Tablegram”格式保存。
adPersistXML 使用 XML 格式保存。
Seek(KeyValues,SeekOption) 搜索记录并定位
Find(Criteria,SkipRecords,SearchDirection,Start) 按条件、方向等查询记录并定位,示例:
cond := 'typeid=' + IntToStr(pow.TypeId);
pm := 0;
rec.Find(cond, 0, 1, pm);
Supports(CursorOptions) 返回是否支持指定功能
Update() 更新当前记录
UpdateBench() 更新所有记录

Recordset.Open 执行查询

recordset.Open Source, ActiveConnection, CursorType, LockType, Options
参数 意义
Source 可为 Command 对象,查询字符串,表名等

查询字符串可包含多个查询,用分号隔开,参见 NextReocrdset 方法

ActiveConnection 可为数据库连接,数据库连接字符串
CursorType 游标类型和锁定类型。组合:
0,1 默认,只读,不支持 RecordCount
1,1 只读,支持 RecordCount
1,3 可写,常用,支持 RecordCount
LockType
Options 参见 CommandType

Resync 方法

重新读取当前记录集的值。(从数据库刷新)

Resync(AffectRecords, ResyncValues)
参数 意义
AffectRecords 重取数据的范围
常量 说明
AdAffectCurrent 只刷新当前记录。
AdAffectGroup 刷新满足当前 Filter 属性设置的记录。只有将 Filter 属性设置为有效预定义常量之一才能使用该选项。
AdAffectAll 默认值。刷新 Recordset 对象中的所有记录,包括由于当前 Filter 属性设置而隐藏的记录。
adAffectAllChapters 刷新所有子集记录。
ResyncValues

是否覆盖基本值

常量 说明
AdResyncAllValues 默认值。覆盖数据,取消挂起的更新。
AdResyncUnderlyingValues 不覆盖数据,不取消挂起的更新。

AddNew 语法

rec.AddNew

// 新增记录成为当前记录,通过 Update 更新。

rec.AddNew 字段数组,值数组

// 记录已被插入,批更新时通过 UpdateBench 更新。

Delete 方法 AffectRecords 参数

参数 意义
1 AdAffectCurrent 仅删除当前记录。(默认)
2 AdAffectGroup 删除满足当前 Filter 属性设置的记录。要使用该选项,必须将 Filter 属性设置为有效的预定义常量之一。
3 adAffectAll 删除所有记录。
4 adAffectAllChapters 删除所有子集记录。

CursorType 游标类型

游标类型 1 和 3 支持 RecordCount 属性。

类型 常量 意义
0 仅向前游标 AdOpenForwardOnly 除仅允许在记录中向前滚动之外,其行为类似静态游标。这样,当需要在 Recordset 中单程移动时就可提高性能。
(默认)
1 键集游标 AdOpenKeyset 其行为类似动态游标,不同的只是禁止查看其他用户添加的记录,并禁止访问其他用户删除的记录,其他用户所作的数据更改将依然可见。它始终支持书签,因此允许 Recordset 中各种类型的移动。
2 动态游标 AdOpenDynamic 用于查看其他用户所作的添加、更改和删除,并用于不依赖书签的 Recordset 中各种类型的移动。如果提供者支持,可使用书签。
3 静态游标 AdOpenStatic 提供记录集合的静态副本以查找数据或生成报告。它始终支持书签,因此允许 Recordset 中各种类型的移动。其他用户所作的添加、更改或删除将不可见。这是打开客户端 (ADOR) Recordset 对象时唯一允许使用的游标类型。

LockType 锁定类型

类型 意义
1 AdLockReadOnly 只读(默认)
不能改变数据
2 AdLockPessimistic 保守式锁定(逐个)
提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录
3 AdLockOptimistic 开放式锁定(逐个)
提供者使用开放式锁定,只在调用Update 方法时才锁定记录
4 AdLockBatchOptimistic 开放式批更新
用于批更新模式(与立即更新模式相对)

Fields 对象

属性/方法 意义
Count 字段数
Append(Field)  
Delete(Field)  
Item(index) 通过下标或字段名返回 Field 对象默认
Refresh()  

Field 对象

属性/方法 意义
Name 字段名
Value 字段值,可更改后,更新到数据库,默认
Type
Precision
NumericScale
数据类型,只读
数字精度,最大位数,只读
小数位数,只读
DefinedSize 字段定义尺寸
ActualSize 数据尺寸
Attributes
Properties
Attributes 复合属性 
AppendChunk(data) 输入二进制数据,后面的自动与前面的接上

如果对其他字段进行了操作,则重新输入

GetChunk(size) 取出二进制数据,可分次取部分数据

如果对其他字段进行了操作,则重新从头取

OriginalValue 字段原来的值,刚执行查询时的值
UnderlyingValue 字段现在的值,数据库中的值

Attributes 复合属性

常量 说明
adFldMayDefer = 2 指示延迟该字段,即不使用整个记录从数据源检索该字段值,只有在显式访问这些字段时才能对其进行检索。
adFldUpdatable = 4 指示可以写入该字段。
adFldUnknownUpdatable = 8 指示提供者无法确定是否可以写入该字段。
adFldFixed = 16 指示该字段包含定长数据。
adFldIsNullable = 32 指示该字段接受 Null 值。
adFldMayBeNull = 64 指示可以从该字段读取 Null 值。
adFldLong = 128 指示该字段为长二进制字段
adFldRowID = 256 指示该字段含有无法写入的持久行标识符,且该字段除了对行进行标识(如记录号、唯一标识符等)外不存在有意义的值。
adFldRowVersion = 512 指示该字段包含用来跟踪更新的某种时间或日期标记。
adFldCacheDeferred=4096 指示提供者缓存了字段值,并已完成随后对缓存的读取。

State 状态

常量 说明
AdStateClosed = 0 默认,指示对象是关闭的。
AdStateOpen = 1 指示对象是打开的。
AdStateConnecting = 2 指示 Recordset 对象正在连接。
AdStateExecuting = 4 指示 Recordset 对象正在执行命令。
AdStateFetching = 8 指示 Recordset 对象的行正在被读取。

Filter 筛选条件

  1. 条件字符串,与 SQL 中的条件子句类似,如 "name='john'"。
  2. 书签数组:指向 Recordset 对象中记录的唯一书签值数组。
  3. 使用下列常数。
常数 说明
AdFilterNone = 0 删除当前筛选条件并恢复查看的所有记录。
AdFilterPendingRecords = 1 允许只查看已更改且尚未发送到服务器的记录。只能应用于批更新模式。
AdFilterAffectedRecords = 2 允许只查看上一次 Delete、Resync、UpdateBatch 或 CancelBatch 调用所影响的记录。
AdFilterFetchedRecords = 3 允许查看当前缓冲区中的记录,即上一次从数据库中检索记录的调用结果。
AdFilterConflictingRecords = 5 允许查看在上一次批更新中失败的记录。

EditMode 编辑状态

常量 说明
AdEditNone = 0 指示当前没有编辑操作。
AdEditInProgress = 1 指示当前记录中的数据已被修改但未保存。
AdEditAdd = 2 指示 AddNew 方法已被调用,
且复制缓冲区中的当前记录是尚未保存到数据库中的新记录 。
AdEditDelete = 4 指示当前记录已被删除。

Status 属性

常量 说明
AdRecOK = 0 成功地更新记录。
AdRecNew = 1 记录是新建的。
AdRecModified = 2 记录被修改。
AdRecDeleted = 4 记录被删除。
AdRecUnmodified = 8 记录没有修改。
AdRecInvalid = 16 由于书签无效,记录没有保存。
AdRecMultipleChanges = 64 由于影响多个记录,因此记录未被保存。
AdRecPendingChanges = 128 由于记录引用挂起的插入,因此未被保存。
AdRecCanceled = 256 由于操作被取消,未保存记录。
AdRecCantRelease = 1024 由于现有记录锁定,没有保存新记录。
AdRecConcurrencyViolation = 2048 由于开放式并发在使用中,记录未被保存。
AdRecIntegrityViolation = 4096 由于用户违反完整性约束,记录未被保存。
AdRecMaxChangesExceeded = 8192 由于存在过多挂起更改,记录未被保存。
AdRecObjectOpen = 16384 由于与打开的储存对象冲突,记录未被保存。
AdRecOutOfMemory = 32768 由于计算机内存不足,记录未被保存。
AdRecPermissionDenied = 65536 由于用户没有足够的权限,记录未被保存。
AdRecSchemaViolation = 131072 由于记录违反基本数据库的结构,因此未被保存。
AdRecDBDeleted = 262144 记录已经从数据源中删除。

CursorOptions

常量 说明
adAddNew = 16778240  可使用 AddNew 方法添加新记录。
adApproxPosition = 16384  可读取并设置 AbsolutePosition 和 AbsolutePage 的属性。
adBookmark = 8192  可使用 Bookmark 属性获得对特定记录的访问。
adDelete = 16779264  可以使用 Delete 方法删除记录。
AdHoldRecords = 256  可以检索多个记录或者更改下一个检索位置而不必提交所有挂起的更改。
AdMovePrevious = 512  可使用 MoveFirst 和 MovePrevious 方法,以及 Move 或 GetRows 方法将当前记录位置向后移动而不必使用书签。
AdResync = 131072  通过 Resync 方法,使用在基本的数据库中可见的数据更新游标。
AdUpdate = 16809984  可使用 Update 方法修改现有的数据。
AdUpdateBatch = 65536  可以使用批更新(UpdateBatch 和 CancelBatch 方法)将更改组传输给提供者。
AdIndex = 8388608  可以使用 Index 属性命名索引。
AdSeek = 4194304  可以使用 Seek 方法定位 Recordset 中的行。