Метод Fields.Refresh (DAO)
Область применения: Access 2013, Office 2013
Обновления объекты в указанной сортировке, чтобы отразить текущую схему базы данных.
Синтаксис
expression . Обновить
выражение: переменная, представляющая объект Fields.
Замечания
Чтобы определить положение, используемое ядром СУБД Microsoft Access для объектов Field в коллекции Fields объекта QueryDef, Recordset или TableDef , используйте свойство OrdinalPosition каждого объекта Field . Изменение свойства OrdinalPosition объекта Field не может изменить порядок объектов Field в коллекции, пока не будет использоваться метод Refresh .
Используйте метод Refresh в многопользовательских средах, в которых другие пользователи могут изменять базу данных. Его также может потребоваться использовать во всех коллекциях, на которые косвенно влияют изменения базы данных. Например, при изменении коллекции Users может потребоваться обновить коллекцию Groups перед использованием коллекции Groups .
Коллекция заполняется объектами при первом обращении к ней и не будет автоматически отражать последующие изменения, внесенные другими пользователями. Если другой пользователь, скорее всего, изменил коллекцию, используйте метод Refresh в коллекции непосредственно перед выполнением какой-либо задачи в приложении, предполагающей наличие или отсутствие определенного объекта в коллекции. Это обеспечит максимально актуальную коллекцию. С другой стороны, использование обновления может неоправданно снизить производительность.
Пример
В этом примере метод Refresh используется для обновления коллекции Fields таблицы Categories на основе изменений данных OrdinalPosition . Порядок полей в коллекции изменяется только после использования метода Refresh .
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