Шаг 143 - Свойство OrdinalPosition

Описание
Задает или возвращает значение, определяющее относительное положение объекта Field в семействе Fields. Для объекта, еще не добавленного в семейство Fields, это свойство доступно для чтения/записи.

Значение
Задаваемое или возвращаемое значение является выражением типа Integer, определяющим порядковый номер поля. Значение данного свойства по умолчанию равняется 0.

Замечания
Использование свойства OrdinalPosition зависит от того, какой из объектов содержит семейство Fields, как показано в следующем списке:

Как правило, порядковый номер объекта в семействе определяется порядком, в котором объекты были добавлены в семейство. Первый добавленный объект будет являться первым объектом в семействе (с порядковым номером 0), второй добавленный объект получит порядковый номер 1 и так далее. Последний добавленный объект имеет порядковый номер числоОбъектов - 1, где числоОбъектов представляет полное число объектов в семействе, равное значению свойства Count семейства.
Свойство OrdinalPosition позволяет указать порядок расположения новых объектов Field, отличный от порядка, в котором объекты были добавлены в семейство. Данное свойство позволяет указать порядок полей для таблиц, запросов или наборов записей при их использовании в приложении. Например, порядок, в котором поля возвращаются в запросе на выборку с инструкцией SELECT * будет определяться текущими значениями свойства OrdinalPosition.
Пользователь имеет возможность изменять постоянный порядок, в котором поля возвращаются в наборах записей, задавая для свойства OrdinalPosition любые целые положительные значения.
Два или несколько объектов Field, входящих в одно семейство, могут иметь одинаковые значения свойства OrdinalPosition. В этом случае такие поля размещаются в алфавитном порядке. Например, если указать значение 4 для поля "Фамилия" и одновременно значение 4 для поля "Имя", то поле "Фамилия" будет возвращаться после поля "Имя".
Допускается указание значения данного свойства, превышающего число полей минус 1. Положение полей, в действительности, определяется относительными значениями данного свойства. Например, если имеется 5 полей, и для свойства OrdinalPosition трех полей заданы значения 10, 20 и 30, то поле с номером 20 возвращается между полями с номерами 10 и 30.
Даже если обновление семейства Fields объекта TableDef не было выполнено, порядок полей в объекте Recordset открытом для объекта TableDef будет соответствовать значениям свойства OrdinalPosition объекта TableDef. Объект Recordset получит те же значения свойства OrdinalPosition, что и в базовой таблице, а объекты Recordset получат новые значения свойства OrdinalPosition (начиная с 0), соответствующие порядку полей, который определяется свойствами OrdinalPosition полей в объекте TableDef.

Пример
Следующая программа изменяет значения свойства OrdinalPosition для таблицы "Сотрудники", чтобы контролировать порядок объектов Field в объекте Recordset. При заданном значении 1 для свойств OrdinalPosition всех объектов Fields поля в объекте Recordset будут размещаться в алфавитном порядке. Следует помнить, что значения свойства OrdinalPosition в объекте Recordset не совпадают со значениями в объекте TableDef, но отражают конечные результаты изменения объекта TableDef.

Sub OrdinalPositionX()

	Dim dbsNorthwind As Database
	Dim tdfEmployees As TableDef
	Dim aintPosition() As Integer
	Dim astrFieldName() As String
	Dim intTemp As Integer
	Dim fldTemp As Field
	Dim rstEmployees As Recordset

	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 fldTemp In .Fields
		fldTemp.OrdinalPosition = 1
		Next fldTemp

		' Открывает новый объект Recordset, чтобы показать, как 
		' значения OrdinalPosition изменяют порядок записей.
		Debug.Print "Значения OrdinalPosition в новом объекте Recordset."
		Set rstEmployees = dbsNorthwind.OpenRecordset( 	"SELECT * FROM Сотрудники")
		For Each fldTemp In rstEmployees.Fields
			Debug.Print , fldTemp.OrdinalPosition, fldTemp.Name
		Next fldTemp
		rstEmployees.Close

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

	End With
	dbsNorthwind.Close

End Sub

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