Propiedad Field2.OrdinalPosition (DAO)
Se aplica a: Access 2013, Office 2013
Establece o devuelve la posición relativa de un objeto Field2 dentro de una colección Fields . .
Sintaxis
expresión . OrdinalPosition
expression Variable que representa un objeto Field2.
Comentarios
Para un objeto que todavía no está anexado a la colección Fields, esta propiedad es de lectura y escritura.
El valor predeterminado es 0.
La disponibilidad de la propiedad OrdinalPosition depende del objeto que contiene la colección Fields, como se muestra en la siguiente tabla.
Si la colección Fields pertenece a un |
Entonces OrdinalPosition |
---|---|
Objeto Index |
No está admitido |
Objeto QueryDef |
Solo lectura |
Objeto Recordset |
Solo lectura |
Objeto Relation |
No admitido |
Objeto TableDef |
Lectura y escritura |
Generalmente, la posición ordinal de un objeto anexado a una colección depende del orden en el que se anexe el objeto. El primer objeto anexado estará en la primera posición (0), el segundo estará en la segunda posición (1) y así sucesivamente. El último objeto anexado está en el recuento de posiciones ordinales: 1, donde count es el número de objetos de la colección especificado por el valor de la propiedad Count .
Puede utilizar la propiedad OrdinalPosition para especificar una posición ordinal para los nuevos objetos Field2 que difiera del orden en el que ha anexado esos objetos a una colección. Esto permite especificar un orden de campo para sus tablas, consultas y conjuntos de registros cuando los utiliza en una aplicación. Por ejemplo, el orden en el que los campos se devuelven en una consulta SELECT * está determinado por los valores actuales de la propiedad OrdinalPosition.
Puede restablecer permanentemente el orden en el que los campos se devuelven en los conjuntos de registros estableciendo la propiedad OrdinalPosition en cualquier entero positivo.
Dos o más objetos Field2 en la misma colección pueden tener el mismo valor que la propiedad OrdinalPosition, en cuyo caso se ordenarán alfabéticamente. Por ejemplo, si tiene un campo denominado Edad establecido en 4 y establece un segundo campo denominado Peso en 4, Peso se devuelve después de Edad.
Puede especificar un número que sea mayor que el número de campos menos 1. El campo se devolverá siguiendo un orden respecto al número más grande. Por ejemplo, si establece una propiedad de campo OrdinalPosition en 20 (y sólo hay 5 campos) y ha establecido la propiedad OrdinalPosition para dos campos más en 10 y en 30, respectivamente, el campo establecido en 20 se devolverá entre los campos establecidos en 10 y en 30.
Nota:
Incluso si no se ha actualizado la colección Fields de un objeto TableDef , el orden de los campos de un objeto Recordset abierto desde TableDef reflejará los datos ordinalPosition del objeto TableDef . Un tipo de tabla Recordset tendrá los mismos datos OrdinalPosition que la tabla base, pero cualquier otro tipo de Recordset tendrá nuevos datos OrdinalPosition (comenzando por 0) que sigue el orden determinado por los datos de OrdinalPosition del objeto TableDef.
Ejemplo
En este ejemplo se cambian los valores de la propiedad OrdinalPosition para Employees TableDef de forma que se controla el orden de Field2 en un resultado Recordset. Al establecer la OrdinalPosition de todos los Fields en 1, cualquier Recordset resultante ordenará los Fields alfabéticamente. Observe que los valores OrdinalPosition en Recordset no coinciden con los valores de TableDef, pero solo reflejan el resultado final de los cambios de 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 Field2
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