Fields.Refresh 方法 (DAO)

适用于:Access 2013、Office 2013

更新指定集合中的对象,以反映数据库的当前架构。

语法

表达式 。刷新

表达式 表示 Fields 对象的变量。

备注

要确定 Microsoft Access 数据库引擎在 QueryDefRecordsetTableDef 对象的 Fields 集合中为 Field 对象使用的位置,请使用每个 Field 对象的 OrdinalPosition 属性。 在使用 Refresh 方法之前,更改 Field 对象的 OrdinalPosition 属性不会更改集合中的 Field 对象的顺序。

在其他用户可以更改数据库的多用户环境中使用 Refresh 方法。 对于间接地受数据库更改影响的任何集合,可能也需要使用此方法。 例如,如果更改了 Users 集合,则在使用 Groups 集合之前,可能需要刷新 Groups 集合。

首次引用一个集合时,将使用对象填充此集合,并且此集合不会自动反映其他用户所做的后续更改。 如果另一个用户有可能更改了某个集合,请立即对此集合使用 Refresh 方法,然后在应用程序中执行假定集合中存在或缺少特定对象的任务。 这可以确保集合尽可能地处于最新状态。 但另一方面,使用 Refresh 可能减慢性能,这是您不想看到的。

示例

此示例使用 Refresh 方法,基于 OrdinalPosition 数据的更改来更新 Categories 表的 Fields 集合。 仅在使用 Refresh 方法后,才会更改集合中 Fields 的顺序。

    Sub RefreshX() 
     
     Dim dbsNorthwind As Database 
     Dim tdfEmployees As TableDef 
     Dim aintPosition() As Integer 
     Dim astrFieldName() As String 
     Dim intTemp As Integer 
     Dim fldLoop As Field 
     
     Set dbsNorthwind = OpenDatabase("Northwind.mdb") 
     Set tdfEmployees = dbsNorthwind.TableDefs("Categories") 
     
     With tdfEmployees 
     ' Display original OrdinalPosition data and store it 
     ' in an array. 
     Debug.Print _ 
     "Original OrdinalPosition data in TableDef." 
     ReDim aintPosition(0 To .Fields.Count - 1) As Integer 
     ReDim astrFieldName(0 To .Fields.Count - 1) As String 
     For intTemp = 0 To .Fields.Count - 1 
     aintPosition(intTemp) = _ 
     .Fields(intTemp).OrdinalPosition 
     astrFieldName(intTemp) = .Fields(intTemp).Name 
     Debug.Print , aintPosition(intTemp), _ 
     astrFieldName(intTemp) 
     Next intTemp 
     
     ' Change OrdinalPosition data. 
     For Each fldLoop In .Fields 
     fldLoop.OrdinalPosition = _ 
     100 - fldLoop.OrdinalPosition 
     Next fldLoop 
     Set fldLoop = Nothing 
     
     ' Print new data. 
     Debug.Print "New OrdinalPosition data before Refresh." 
     For Each fldLoop In .Fields 
     Debug.Print , fldLoop.OrdinalPosition, fldLoop.Name 
     Next fldLoop 
     
     .Fields.Refresh 
     
     ' Print new data, showing how the field order has been 
     ' changed. 
     Debug.Print "New OrdinalPosition data after Refresh." 
     For Each fldLoop In .Fields 
     Debug.Print , fldLoop.OrdinalPosition, fldLoop.Name 
     Next fldLoop 
     
     ' Restore original OrdinalPosition data. 
     For intTemp = 0 To .Fields.Count - 1 
     .Fields(astrFieldName(intTemp)).OrdinalPosition = _ 
     aintPosition(intTemp) 
     Next intTemp 
     End With 
     
     dbsNorthwind.Close 
     
    End Sub