How to get the order of a field?

message from Özden Irmak on 13 May 2004
Hi,

Is there any method/property in ADO or ADOX to get the order of a field in a
table?

Thanks,

Özden
 
Brendan Reynolds replied to Özden Irmak on 13 May 2004
Public Function GetOrdinal(ByVal strTableName As String, ByVal strFieldName
As String) As Long

Dim rst As ADODB.Recordset
Dim lngLoop As Long
Dim lngResult As Long

'A result of -1 will indicate that no field with the
'specified name was found in the specified table.
lngResult = -1

Set rst = New ADODB.Recordset
With rst
.ActiveConnection = CurrentProject.Connection
.Source = strTableName
.Open
For lngLoop = 0 To .Fields.Count - 1
If .Fields(lngLoop).Name = strFieldName Then
lngResult = lngLoop
Exit For
End If
Next lngLoop
.Close
End With

GetOrdinal = lngResult

End Function
 
Özden Irmak replied to Brendan Reynolds on 13 May 2004
Hello,

I've miss pointed something I guess..

I can loop thorugh the fields collection to get fields but the order I get
the fileds are not the same seen on Access table design window, it seems
that they're ordered as alphabetically in the fields collection...

I want to get the fields in the same order as they are in the Access table
design window...

Kind Regards,

Özden

"Brendan Reynolds" <brenreyn at indigo dot ie> wrote in message
news:eDFxRbNOEHA.3452@TK2MSFTNGP10.phx.gbl...
 
Brendan Reynolds replied to Özden Irmak on 13 May 2004
I can't reproduce that. When I modify the code as below, the list I get in
the Immediate window is in the same order as defined in the table. Note that
I'm opening the recordset directly on the table. If you used a SQL statement
or a saved query, I would expect the fields to be returned in the order in
which they appear in the SQL statement or query.

BTW: In theory, the order of the columns should be irrelevant (in relational
theory, both the columns and rows of a relation are unordered) and usually
is in Access, where you can almost always refer to a field by its name
rather than by its ordinal number.

For lngLoop = 0 To .Fields.Count - 1
If .Fields(lngLoop).Name = strFieldName Then
lngResult = lngLoop
'Exit For
End If
Debug.Print .Fields(lngLoop).Name
Next lngLoop
 
John Vinson replied to Özden Irmak on 12 May 2004
Since tables have no order, no, there is not.

John W. Vinson[MVP]
Come for live chats every Tuesday and Thursday
http://go.compuserve.com/msdevapps?loc=us&access=public
 

Archived message: How to get the order of a field? (MS Access)