ADO:Fields 集合
说明
Recordset 对象包含一个由 Field 对象组成的 Fields 集合。每个 Field 对象对应于 Recordset 中的一列。打开 Recordset 之前可以调用 Fields 集合的 Refresh 方法来预置该集合。
注意 有关如何使用 Field 对象的详细说明,请参阅 Field 对象主题。
Fields 集合包含 Append 方法和 Update 方法,Append 方法在集合中临时创建和添加 Field 对象,而 Update 方法完成所有的添加和删除。
Record 对象包含两个可以用 FieldEnum 常量进行索引的特殊字段。一个常量访问包含 Record 的默认流的字段,另一个常量访问包含 Record 的绝对 URL 字符串的字段。
某些提供者(例如,Microsoft OLE DB Provider for Internet Publishing)可能会用 Record 或 Recordset 的可用字段的子集来预置 Fields 集合。其他字段只能在按名称引用或按代码索引以后才添加到集合中。
如果试图按名称引用不存在的字段,则新的 Field 对象将通过 adFieldPendingInsert 的 Status 追加到 Fields 集合中。当调用 Update 时,如果提供者允许,ADO 将在数据源中创建一个新字段。
Refresh 方法
更新集合中的对象以反映提供者提供的和特有的对象。
语法
collection.Refresh
说明
Refresh 方法可以完成各种不同的任务,这取决于您从哪个集合调用它。
Parameters
使用 Command 对象的 Parameters 集合的 Refresh 方法检索存储过程的提供者参数信息,或者检索 Command 对象中指定的参数化查询。对于不支持存储过程调用或参数化查询的提供者,该集合将为空。
在调用 Refresh 方法之前,应先将 Command 对象的 ActiveConnection 属性设置为有效的 Connection 对象,将 CommandText 属性设置为有效的命令,并将 CommandType 属性设置为 adCmdStoredProc。
如果在调用 Refresh 方法之前访问 Parameters 集合,ADO 将自动为您调用该方法并预置集合。
注意 如果使用 Refresh 方法从提供者获取参数信息,而且返回一个或多个变长数据类型的 Parameter 对象,ADO 可能会根据参数最大可能的大小为其分配内存,这样一来,在执行中可能会发生错误。要避免错误,在调用 Execute 方法之前应显式地设置这些参数的 Size 属性。
Fields
使用 Fields 集合的 Refresh 方法将没有可视效果。要从基本数据库结构中检索更改,必须使用 Requery 方法;如果 Recordset 对象不支持书签,则必须使用 MoveFirst 方法。
Properties
使用某些对象的 Properties 集合的 Refresh 方法预置该集合,其动态属性由提供者显露。这些属性提供有关提供者特有的功能信息,ADO 支持的内置属性除外。
Append 方法
向集合中追加对象。如果集合是 Fields,可先创建新的 Field 对象,再将其追加到集合中。
语法
collection.Append object
fields.Append Name, Type, DefinedSize, Attrib, FieldValue
参数
collection 集合对象。
fields Fields 集合。
object 对象变量,表示要追加的对象。
Name String 值,包含新 Field 对象的名称,该名称不能与 fields 中其他任何对象名称相同。
Type DataTypeEnum 值,指定新字段的数据类型,其默认值为 adEmpty。ADO 不支持下列数据类型,向 Recordset 追加新字段时不能使用它们:adIDispatch、adIUnknown 和 adVariant。
DefinedSize 可选。Long 值,表示新字段的定义大小(以字符或字节为单位)。此参数的默认值源于 Type。DefinedSize 超过 255 字节的 Fields 被视为变长列。(未指定默认的 DefinedSize。)
Attrib 可选。FieldAttributeEnum 值,指定新字段的属性,其默认值为 adFldDefault。如果未指定此值,字段将包含源于 Type 的属性。
FieldValue 可选。Variant,表示新字段的值。如果未指定,将把 Null 值追加到字段中。
说明
Parameters 集合
在将 Parameter 对象追加到 Parameters 集合前,必须设置其 Type 属性。如果选择变长数据类型,还必须将 Size 属性设置为大于零的值。
用户对参数作出说明,可以最大程度地减少对提供者的调用,进而在使用存储过程或参数化查询时提高性能。但是,用户必须了解与要调用的存储过程或参数化查询相关联的参数属性。
用 CreateParameter 方法创建具有适当属性设置的 Parameter 对象,并用 Append 方法将其添加到 Parameters 集合。这使用户可以设置和返回参数值,而不必调用提供者来获得参数信息。如果要写入不提供参数信息的提供者,必须使用此方法手动预置 Parameters 集合才能使用这些参数。
Fields 集合
FieldValue 参数只在向 Record 对象而非 Recordset 对象添加 Field 对象时有效。对于 Record 对象,可以同时追加字段并提供值。对于 Recordset 对象,必须在 Recordset 关闭时创建字段,然后打开 Recordset 给这些字段赋值。
注意 对于追加到 Record 对象的 Fields 集合的新 Field 对象,必须在指定任何其他 Field 属性之前设置 Value 属性。首先必须给 Value 属性分配特定的值,并且调用 Fields 集合的 Update。然后可以访问其他属性(如 Type 或 Attributes)。
下列数据类型 (DataTypeEnum) 的 Field 对象不能被追加到 Fields 集合,否则将发生错误:adArray、adChapter、adEmpty、adPropVariant 和 adUserDefined。ADO 也不支持下列数据类型:adIDispatch、adIUnknown 和 adIVariant。追加这些类型时将不会发生错误,但使用它们将产生不可预料的结果,包括内存溢出。
Recordset
如果在调用 Append 方法前未设置 CursorLocation 属性,则 CursorLocation 将在调用 Recordset 对象的 Open 方法时自动设置为 adUseClient(CursorLocationEnum 值)。
如果在打开的 Recordset 的 Fields 集合上或设置了 ActiveConnection 属性的 Recordset 上调用 Append 方法,将发生运行时错误。只能将字段追加到未打开且未连接到数据源的 Recordset。在以 CreateRecordset 方法虚构 Recordset 对象或分配给对象变量时通常就是这种情况。
Record
如果在打开的 Record 的 Fields 集合上调用 Append 方法,将发生运行时错误。新字段将被添加到 Record 对象的 Fields 集合。如果 Record 源于 Recordset,那么新字段将不会显示在 Recordset 对象的 Fields 集合中。
给非现有字段对象赋值,即假定其存在于集合中,就可创建该字段并将其追加到 Fields 集合。赋值将触发 Field 对象的自动创建和追加,然后完成赋值。
将 Field 追加到 Record 对象的 Fields 集合后,调用 Fields 集合的 Update 方法以保存更改。
FieldEnum
指定在 Record 对象的 Fields 集合中引用的特殊字段。
说明
这些常量提供了访问与 Record 相关联的特殊字段的“快捷方式”。从 Fields 集合中检索 Field 对象,然后用 Field 对象的 Value 属性获取其内容。
| 常量 | 值 | 说明 |
| adDefaultStream
|
-1 |
引用包含与 Record 相关联的默认 Stream 对象的字段。 |
| adRecordURL
|
-2 |
引用包含当前 Record 绝对 URL 字符串的字段。 |
|