Свойство Field.OrdinalPosition (DAO)
Область применения: Access 2013, Office 2013
Задает или возвращает относительную позицию объекта Field в коллекции Fields . .
Синтаксис
expression . OrdinalPosition
выражение: переменная, представляющая объект Field.
Примечания
Для объекта, еще не добавленного в коллекцию Fields , это свойство является чтением и записью.
По умолчанию используется значение 0.
Доступность свойства OrdinalPosition зависит от объекта, содержащего коллекцию Fields , как показано в следующей таблице.
Если коллекция Fields принадлежит к |
Тогда OrdinalPosition имеет значение |
---|---|
Объект Index |
Не поддерживается |
Объект QueryDef |
Только для чтения |
Объект Recordset |
Только для чтения |
Объект Relation |
Не поддерживается |
Объект TableDef |
Чтение и запись |
Как правило, порядковый номер объекта, добавляемого в коллекцию, зависит от порядка добавления объекта. Первый добавленный объект находится в первой позиции (0), второй добавленный объект находится во второй позиции (1) и т. д. Последний добавленный объект находится в порядковом номере — 1, где count — это количество объектов в коллекции, заданное параметром свойства Count .
Свойство OrdinalPosition можно использовать для указания порядкового положения для новых объектов Field , отличающихся от порядка добавления этих объектов в коллекцию. Это позволяет указать порядок полей для таблиц, запросов и наборов записей при их использовании в приложении. Например, порядок, в котором поля возвращаются в запросе SELECT*, определяется текущими значениями свойств OrdinalPosition .
Вы можете окончательно сбросить порядок, в котором поля возвращаются в наборах записей, задав для свойства OrdinalPosition любое положительное целое число.
Два или более объектов Field в одной коллекции могут иметь одно и то же значение свойства OrdinalPosition , и в этом случае они будут упорядочены в алфавитном порядке. Например, если для поля с именем Age задано значение 4, а для второго поля с именем Weight задано значение 4, вес возвращается после возраста.
Можно указать число, большее, чем число полей минус 1. Поле будет возвращено в порядке относительно наибольшего числа. Например, если для свойства OrdinalPosition поля задано значение 20 (а есть только 5 полей), а для свойства OrdinalPosition для двух других полей задано значение 10 и 30 соответственно, между полями 10 и 30 возвращается значение 20.
Примечание.
Даже если коллекция Fieldsобъекта TableDef не была обновлена, порядок полей в наборе записей , открытых из TableDef , будет отражать данные OrdinalPosition объекта TableDef . Набор записей табличного типа будет содержать те же данные OrdinalPosition , что и базовая таблица, но любой другой тип Recordset будет содержать новые данные OrdinalPosition (начиная с 0), которые соответствуют порядку, определенному данными OrdinalPositionобъекта TableDef.
Пример
В этом примере изменяются значения свойств OrdinalPosition в employees TableDef , чтобы управлять порядком поля в результирующем наборе записей. Установив для параметра OrdinalPosition для всех полей значение 1, любой результирующий набор записей упорядочит поля в алфавитном порядке. Обратите внимание, что значения OrdinalPosition в наборе записей не соответствуют значениям в 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("Northwind.mdb")
Set tdfEmployees = dbsNorthwind.TableDefs("Employees")
With tdfEmployees
' Display and store original OrdinalPosition data.
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 fldTemp In .Fields
fldTemp.OrdinalPosition = 1
Next fldTemp
' Open new Recordset object to show how the
' OrdinalPosition data has affected the record order.
Debug.Print _
"OrdinalPosition data from resulting Recordset."
Set rstEmployees = dbsNorthwind.OpenRecordset( _
"SELECT * FROM Employees")
For Each fldTemp In rstEmployees.Fields
Debug.Print , fldTemp.OrdinalPosition, fldTemp.Name
Next fldTemp
rstEmployees.Close
' Restore original OrdinalPosition data because this is
' a demonstration.
For intTemp = 0 To .Fields.Count - 1
.Fields(astrFieldName(intTemp)).OrdinalPosition = _
aintPosition(intTemp)
Next intTemp
End With
dbsNorthwind.Close
End Sub