Поделиться через


Свойство 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