Propriedade Field.OrdinalPosition (DAO)
Aplica-se ao: Access 2013, Office 2013
Define ou retorna a posição relativa de um objeto Field dentro de uma coleção Fields . .
Sintaxe
expressão . OrdinalPosition
expressão Uma variável que representa um objeto de Campo.
Comentários
Para um objeto ainda não acrescentado à coleção Fields, essa propriedade é de leitura/gravação.
O padrão é 0.
A disponibilidade da propriedade OrdinalPosition depende do objeto que contém a coleção Fields, conforme mostrado na tabela a seguir.
Se a coleção Fields pertencer a um |
OrdinalPosition será |
---|---|
Objeto Index |
Sem suporte |
Objeto QueryDef |
Somente leitura |
Objeto Recordset |
Somente leitura |
Objeto Relation |
Sem suporte |
Objeto TableDef |
Leitura/gravação |
Em geral, a posição ordinal de um objeto que você acrescenta a uma coleção depende da ordem na qual ele é acrescentado. O primeiro objeto acrescentado está na primeira posição (0), o segundo está na segunda posição (1) e assim por diante. O último objeto acrescentado está na contagem de posições ordinais – 1, em que a contagem é o número de objetos na coleção, conforme especificado pela configuração da propriedade Count .
Use a propriedade OrdinalPosition para especificar a posição ordinal dos novos objetos Field que é diferente da ordem na qual foram acrescentados à uma coleção. Isso permite especificar a ordem dos campos para tabelas, consultas e recordsets quando você usá-los em um aplicativo. Por exemplo, a ordem na qual os campos são retornados em uma consulta SELECT * é determinada pelos valores atuais da propriedade OrdinalPosition.
Redefina, de forma permanente, a ordem na qual os campos são retornados nos recordsets pela definição da propriedade OrdinalPosition para qualquer número inteiro positivo.
Dois ou mais objetos Field na mesma coleção podem ter o mesmo valor da propriedade OrdinalPosition e, nesse caso, serão colocados em ordem alfabética. Por exemplo, se você tem um campo denominado Idade definido como 4 e definir um segundo campo denominado Peso como 4, Peso será retornado depois de Idade.
É possível especificar um número maior que o número de campos menos 1. O campo será retornado em uma ordem relativa ao maior número. Por exemplo, se você definir a propriedade OrdinalPosition de um campo como 20 (e se houver apenas 5 campos) e definir a propriedade OrdinalPosition de dois outros campos como 10 e 30 respectivamente, o campo definido como 20 será retornado entre os campos definidos como 10 e 30.
Observação
[!OBSERVAçãO] Mesmo se a coleção Fields de um TableDef não tiver sido atualizado, a ordem do campo em um Recordset aberto a partir de TableDef refletirá os dados de OrdinalPosition do objeto TableDef. Um Recordset tipo tabela terá os mesmos dados de OrdinalPosition que a tabela base, mas nenhum outro tipo de Recordset terá novos dados OrdinalPosition (começando com 0) que seguirão a ordem determinada pelos dados OrdinalPosition de TableDef.
Exemplo
Este exemplo altera os valores da propriedade OrdinalPosition no TableDef Funcionários para controlar a ordem Field em um Recordset resultante. Pela definição de OrdinalPosition de todos os Fields como 1, qualquer Recordset resultante colocará os Fields em ordem alfabética. Observe que os valores de OrdinalPosition no Recordset não correspondem aos valores na TableDef, mas simplesmente refletem o resultado final das alterações 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 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