每个 Field 对象通常对应于数据库表中的列。 但是,字段 还可以表示指向另一 Recordset的指针,称为章节。 本指南将在稍后部分介绍例外情况,例如章节列。
使用 Field 对象的 Value 属性设置或返回当前记录的数据。 根据提供程序公开的功能,Field 对象的某些集合、方法或属性可能不可用。
使用 Field 对象的集合、方法和属性,可以执行以下操作:
使用 Name 属性返回字段的名称。
使用 Value 属性查看或更改字段中的数据。 Value 是 Field 对象的默认属性。
通过使用 类型、精度和 NumericScale 属性返回字段的基本特征。
使用 DefinedSize 属性返回字段的声明大小。
通过使用 ActualSize 属性返回给定字段中数据的实际大小。
通过使用 属性 属性和 属性 集合来确定给定字段支持的功能类型。
使用 AppendChunk 和 GetChunk 方法操作包含长二进制或长字符数据的字段的值。
如果提供程序支持批处理更新,则通过使用 OriginalValue 和 UnderlyingValue 属性解决批处理更新期间字段值的差异。
描述字段
以下主题将讨论 Field 对象的属性,这些对象表示描述 Field 对象本身的信息,即有关字段的元数据。 此信息可用于确定 记录集的架构。 这些属性包括 类型、DefinedSize 和 ActualSize、Name,以及 NumericScale 和 Precision。
发现数据类型
Type 属性指示字段的数据类型。 ADO 支持的数据类型枚举常量在 ADO 程序员参考的 dataTypeEnum 中介绍。
对于浮点数值类型(如 adNumeric),可以获取更多信息。 NumericScale 属性指示小数点右侧的位数将用于表示 字段的值。 Precision 属性指定用于表示 字段值的最大位数。
确定字段大小
使用 DefinedSize 属性来确定 Field 对象的数据容量。
使用 ActualSize 属性可返回 Field 对象值的实际长度。 对于所有字段,ActualSize 属性为只读。 如果 ADO 无法确定 Field 对象的值的长度,则 ActualSize 属性返回 adUnknown 。
DefinedSize,ActualSize 属性具有不同的用途。 例如,假设 Field 对象,其声明类型为 adVarChar,并且 DefinedSize 属性值为 50,包含单个字符。 它返回的 ActualSize 属性值是单个字符的长度(以字节为单位)。
确定字段内容
数据源中的列的标识符由 字段的 Name 属性表示。 Field 对象的 Value 属性返回或设置该字段的实际数据内容。 这是默认属性。
若要更改字段中的数据,请将 Value 属性设置为等于正确类型的新值。 游标类型必须支持更新才能更改字段的内容。 数据库验证不是在批处理模式下完成的,因此在这种情况下,调用 UpdateBatch 时需要检查错误。 某些提供程序还支持 ADO Field 对象的 UnderlyingValue 和 OriginalValue 属性,以帮助你解决尝试执行批处理更新时的冲突。 有关如何解决冲突的详细信息,请参阅 编辑数据。
注意
记录集字段 值在将新的 字段 追加到 记录集时无法设置。 相反,可以将新的 字段 追加到已关闭的 Recordset。 然后,必须打开 Recordset,只有这样,才能将这些 字段赋值。
获取更多字段信息
ADO 对象具有两种类型的属性:内置属性和动态属性。 至此,只讨论了 Field 对象的内置属性。
内置属性是在 ADO 中实现的这些属性,可使用 MyObject.Property 语法立即提供给任何新对象。 它们并不作为 属性 对象出现在对象的 Properties 集合中。
动态属性由基础数据提供程序定义,并显示在相应 ADO 对象的 属性 集合中。 例如,特定于提供程序的属性可能指示 Recordset 对象是否支持事务或更新。 这些附加属性将显示为 属性 对象,该 Recordset 对象的 Properties 集合中。 动态属性只能通过集合引用,使用语法 MyObject.Properties(0) 或 MyObject.Properties("Name")。
不能删除任一类型的属性。
动态 属性 对象具有其自己的四个内置属性:
Name 属性是标识属性的字符串。
Type 属性是一个指定属性数据类型的整数。
Value 属性是包含属性设置的变体。 值 是 属性 对象的默认属性。
Attributes 属性是一个 Long 值,用于指示与提供程序特定的属性相关的特征。
Field 对象的 Properties 集合包含有关该字段的其他元数据。 此集合的内容因提供方而异。 下面的代码示例检查本部分开头介绍的示例Recordset的Properties集合。 它首先查看集合的内容。 此代码使用 OLE DB Provider for SQL Server,因此 属性 集合包含与该提供程序相关的信息。
'BeginFieldProps
Dim objProp As ADODB.Property
For intLoop = 0 To (objFields.Count - 1)
Debug.Print objFields.Item(intLoop).Name
For Each objProp In objFields(intLoop).Properties
Debug.Print vbTab & objProp.Name & " = " & objProp.Value
Next objProp
Next intLoop
'EndFieldProps
处理二进制数据
对 Field 对象使用 AppendChunk 方法填充长二进制或字符数据。 在系统内存受限的情况下,可以使用 AppendChunk 方法以部分而非整体来操作大型值。
如果将 Field 对象的 Attributes 属性中的 adFldLong 位设置为 True,则可以对该字段使用 AppendChunk 方法。
第一次调用 AppendChunk 方法时,Field 对象会将数据写入字段,同时覆盖任何已有数据。 后续的 AppendChunk 调用将添加到现有数据中。 如果要将数据追加到一个字段,然后设置或读取当前记录中另一个字段的值,ADO 假定已完成将数据追加到第一个字段。 如果再次在第一个字段上调用 AppendChunk 方法,ADO 会将调用解释为新的 AppendChunk 操作并覆盖现有数据。 访问其他 Recordset 对象中字段的操作,即使这些对象不是第一个 Recordset 对象的克隆,也不会影响 AppendChunk 操作。
在 Field 对象上使用 GetChunk 方法检索其部分或全部长二进制或字符数据。 在系统内存受限的情况下,可以使用 GetChunk 方法来操作部分(而不是整个部分)中的长值。
GetChunk 调用返回的数据将分配给 变量。 如果 大小 大于剩余数据,则 GetChunk 方法仅返回剩余数据,而不用空格填充 变量。 如果该字段为空,则 GetChunk 方法返回 null 值。
每个后续 GetChunk 调用从上一 GetChunk 调用中断的位置开始检索数据。 但是,如果要从一个字段检索数据,然后设置或读取当前记录中另一个字段的值,ADO 假定你已完成从第一个字段检索数据。 如果再次在第一个字段上调用 GetChunk 方法,ADO 会将调用解释为新的 GetChunk 操作,并开始从数据开头读取。 访问其他 Recordset 对象中的字段,只要它们不是第一个 Recordset 对象的克隆,就不会中断 GetChunk 操作。
如果将 Field 对象的 Attributes 属性中的 adFldLong 位设置为 True,则可以对该字段使用 GetChunk 方法。
如果在使用 GetChunk 或 AppendChunk 方法时,Field 对象上没有当前记录,则会发生错误 3021(无当前记录)。
有关使用这些方法来操作二进制数据的示例,请参阅 ADO 程序员参考中的 AppendChunk 方法 和 GetChunk 方法 示例。