Fields 字段集合
Fields 集合是 ADO 的内部集合之一。 集合是可称为单位的有序项集。 有关 ADO 集合的详细信息,请参阅 ADO 对象模型。
Fields 集合包含 Recordset中每个字段(列)的 Field 对象。 与所有 ADO 集合一样,它具有 计数 和 项 属性,以及 追加 和 刷新 方法。 它还 CancelUpdate、Delete、Resync和 Update 方法,这些方法不适用于其他 ADO 集合。
检查字段集合
请考虑本节介绍的示例 Recordset 中的 Fields 集合。 示例 Recordset 派生自 SQL 语句
SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = 7
因此,应发现 记录集字段 集合包含三个字段。
'BeginWalkFields
Dim objFields As ADODB.Fields
Dim intLoop As Integer
objRs.Open strSQL, strConnStr, adOpenForwardOnly, adLockReadOnly, adCmdText
Set objFields = objRs.Fields
For intLoop = 0 To (objFields.Count - 1)
Debug.Print objFields.Item(intLoop).Name
Next
'EndWalkFields
此代码仅使用 Count 属性确定 Fields 集合中的 Field 对象数,并循环遍历集合,返回每个 Field 对象的 Name 属性的值。 可以使用更多 字段 属性来获取有关字段的信息。 有关查询 字段的详细信息,请参阅 字段对象。
对列进行计数
如预期的那样,Count 属性返回 Fields 集合中 Field 对象的实际数目。 由于集合成员的编号以零开头,因此应始终以零成员开头的代码循环,以 Count 属性减 1 的值结束。 如果使用 Microsoft Visual Basic,并且想要在不检查 Count 属性的情况下遍历集合的成员,请使用 For Each...Next 命令。
如果 Count 属性为零,则集合中没有对象。
前往场地
与任何 ADO 集合一样,Item 属性是集合的默认属性。 它返回由传递给它的名称或索引指定的单个 Field 对象。 因此,以下语句等效于示例 Recordset:
objField = objRecordset.Fields.Item("ProductID")
objField = objRecordset.Fields("ProductID")
objField = objRecordset.Fields.Item(0)
objField = objRecordset.Fields(0)
如果这些方法等效,最好是哪一种方法? 这取决于。 使用索引从集合中检索 字段 速度更快,因为它可以直接访问 Field,而无需执行字符串查找。 另一方面,集合中 字段 的顺序必须已知,如果顺序发生更改,则必须更改对 字段 索引的引用。 虽然稍微慢一些,但使用 Field 的名称更灵活,因为它不依赖于集合中 Fields 的顺序。
使用“Refresh”方法
与其他一些 ADO 集合不同,对 Fields 集合使用 Refresh 方法没有可见效果。 若要从基础数据库结构检索更改,必须使用 Requery 方法,或者当 Recordset 对象不支持书签时,则使用 MoveFirst 方法,这将导致命令再次针对提供程序执行。
将字段添加到记录集
Append 方法用于在 Recordset中添加字段。
可以使用 Append 方法以编程方式构建 Recordset,而无需与数据源建立连接。 如果在打开的 Recordset 的 Fields 集合或设置了 ActiveConnection 属性的 Recordset 上调用 Append 方法,则会发生运行时错误。 只能将字段追加到尚未打开且尚未连接到数据源的 Recordset。 但是,若要为新追加 字段指定值,必须先打开 Recordset。
开发人员通常需要一个临时存储某些数据的位置,或者希望某些数据像来自服务器一样操作,以便它可以参与用户界面中的数据绑定。 ADO(与适用于 OLE DB 的Microsoft Cursor Service 结合使用),开发人员可以通过指定列信息和调用 Open来生成空的 Recordset 对象。 在以下示例中,三个新字段追加到新的 Recordset 对象。 然后打开该 Recordset,添加了两个新记录,并将 Recordset 保存到文件中。 (有关 Recordset 持久性的详细信息,请参阅 更新和保存数据。)
'BeginFabricate
Dim objRs As ADODB.Recordset
Set objRs = New ADODB.Recordset
With objRs.Fields
.Append "StudentID", adChar, 11, adFldUpdatable
.Append "FullName", adVarChar, 50, adFldUpdatable
.Append "PhoneNmbr", adVarChar, 20, adFldUpdatable
End With
With objRs
.Open
.AddNew
.Fields(0) = "123-45-6789"
.Fields(1) = "John Doe"
.Fields(2) = "(425) 555-5555"
.Update
.AddNew
.Fields(0) = "123-45-6780"
.Fields(1) = "Jane Doe"
.Fields(2) = "(615) 555-1212"
.Update
End With
objRs.Save App.Path & "FabriTest.adtg", adPersistADTG
objRs.Close
'EndFabricate
Fields Append 方法在 Recordset 对象与 Record 对象之间的用法有所不同。 有关 Record 对象的详细信息,请参阅 记录和流。