Шаг 27 - Метод Refresh

Описание
Обновляет объекты в семействе в соответствии с текущими изменениями в схеме базы данных.

семейство.Refresh

Замечания
Не допускается вызов метода Refresh для семейств, не являющихся постоянными, таких как Connections, Databases, Recordsets, Workspaces или семейство QueryDefs объекта Connection.
Для определения положения, которое ядро базы данных Microsoft Jet присваивает объектам Field в семействе Fields объекта QueryDef, Recordset или TableDef, следует использовать свойство OrdinalPosition каждого объекта Field. Изменение значение свойства OrdinalPosition объекта Field может не отразиться на положении объекта Field в семействе, пока не будет вызван метод Refresh.
Метод Refresh используют при работе в сети, в которой другие пользователи могут вносить изменения в базу данных. Кроме того, может потребоваться применить этот метод к семействам, на которые косвенно влияют изменения, вносимые в базу данных. Например, при изменении семейства Users может возникнуть необходимость обновить семейство Groups перед его использованием.
Семейство заполняется объектами при первом обращении к нему. Состав семейства не будет в дальнейшем автоматически отражать изменения, внесенные в него другими пользователями. Если существует возможность того, что семейство изменено другим пользователем, то рекомендуется применить метод Refresh к семейству непосредственно перед выполнением любого действия, предполагающего присутствие или отсутствие конкретного объекта в семействе. Это позволит всегда работать с последней версией семейства. С другой стороны, следует помнить, что лишние вызовы метода Refresh могут замедлить работу приложения.

Пример
Следующая программа использует метод Refresh для обновления семейства Fields таблицы "Типы" на основании изменения значения свойства OrdinalPosition. Порядок полей в семействе Fields изменяется только после вызова метода 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("Борей.mdb")
	Set tdfEmployees = dbsNorthwind.TableDefs("Типы")

	With tdfEmployees
		' Отображает исходные значения свойства OrdinalPosition 
		' и сохраняет их в массиве.
		Debug.Print "Исходные значения OrdinalPosition в объекте 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

		' Изменяет значения свойства OrdinalPosition.
		For Each fldLoop In .Fields
			fldLoop.OrdinalPosition = 100 - fldLoop.OrdinalPosition
		Next fldLoop
		Set fldLoop = Nothing

		' Печатает новые данные.
		Debug.Print "Новые значения OrdinalPosition до вызова Refresh."
		For Each fldLoop In .Fields
			Debug.Print , fldLoop.OrdinalPosition, fldLoop.Name
		Next fldLoop

		.Fields.Refresh

		' Печатает новые данные, демонстрирующие изменение 
		' порядка полей.
		Debug.Print "Новые значения OrdinalPosition после вызова Refresh."

		For Each fldLoop In .Fields
			Debug.Print , fldLoop.OrdinalPosition, fldLoop.Name
		Next fldLoop

		' Восстанавливает исходные значения свойства OrdinalPosition.
		For intTemp = 0 To .Fields.Count - 1
			.Fields(astrFieldName(intTemp)).OrdinalPosition = aintPosition(intTemp)
		Next intTemp
	End With
	dbsNorthwind.Close

End Sub

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.