Fields 集合

适用于:Access 2013、Office 2013

Fields 集合是 ADO 的固有集合之一。 集合是一组按顺序排列的、可以作为单元引用的项。

Fields 集合包含与 Recordset 中的每个字段(列)对应的 Field 对象。 像所有 ADO 集合一样,它有 CountItem 属性,还有 AppendRefresh 方法。 它还有 CancelUpdateDeleteResyncUpdate 方法(这些方法对其他 ADO 集合不可用)。

检查 Fields 集合

以本章引入的示例 RecordsetFields 集合为例。 示例 Recordset 是从以下 SQL 语句派生的:

 
SELECT ProductID, ProductName, UnitPrice FROM Products WHERE CategoryID = 7 

因此,应发现 RecordsetFields 集合包含三个字段。

 
'BeginWalkFields 
 Dim objFields As ADODB.Fields 
 
 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 属性的值。 可以使用更多 Field 属性来获得有关字段的信息。 有关查询 Field 的详细信息,请参阅 Field 对象

对列计数

您可能已经想到,Count 属性返回 Fields 集合中 Field 对象的实际个数。 由于集合成员的计数从零开始,因此循环代码应当始终从零成员开始,并以值 Count 属性减 1 结束。 如果使用 Microsoft Visual Basic,并且想要在不检查 Count 属性的情况下循环访问集合的成员,请使用 ForEach...下一个 命令。

如果 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 的顺序必须是已知的,如果顺序更改,则在发生更改的地方对 Field 索引的引用也必须更改。 尽管速度稍微慢点,但使用 Field 名称更灵活,因为它不依赖于 Fields 在集合中的顺序。

使用 Refresh 方法

与某些其他 ADO 集合不同,使用 Fields 集合的 Refresh 方法没有可见的效果。 若要从基础数据库结构检索更改,必须使用 Requery 方法,或如果 Recordset 对象不支持书签,则使用 MoveFirst 方法,而这将导致再次对提供程序执行命令。

向记录集添加字段

Append 方法用来向 Recordset 添加字段。

可以使用 Append 方法通过编程来构造 Recordset ,而不用打开与数据源的连接。 如果对打开的 RecordsetFields 集合或已设置 ActiveConnection 属性的 Recordset 调用 Append 方法,将发生运行时错误。 可以将字段只追加到没有打开并且尚未连接到数据源的 Recordset。 但是,若要为新追加的 Fields 指定值,必须首先打开 Recordset

开发人员通常需要一个位置来临时存储某些数据,或者希望某些数据像来自服务器一样运行,以便它可以参与用户界面中的数据绑定。 ADO (与适用于 OLE DB) 的 Microsoft 游标服务结合使用,开发人员可以通过指定列信息和调用 Open 来生成空 Recordset 对象。 在以下示例中,三个新字段追加到新的 Recordset 对象。 然后打开 Recordset ,添加两个新记录,并将 Recordset 保存到文件中。 (有关 Recordset 持久性的详细信息,请参阅 第 5 章:更新和持久化 Data.)

 
 'BeginFabricate 
 Dim objRs As 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 

FieldsAppend 方法的用法因 Recordset 对象和 Record 对象而异。 有关 Record 对象的详细信息,请参阅第 10 章:记录和流