我尝试按照数据中出现的顺序列出Access表中的列,而不是按字母顺序列出。
这是我尝试的第一种方法。它按字母顺序获取列。
Public Const adSchemaColumns = 4
Public Const adSchemaTables = 20
Dim oConn, oRecs
Set oConn = CreateObject("ADODB.Connection")
Set oRecs = CreateObject("ADODB.Recordset")
oConn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source='C:\whatever.mdb'"
Set oRecs = oConn.OpenSchema(adSchemaTables)
Do Until oRecs.EOF
sTableName = oRecs("TABLE_NAME")
If UCase(oRecs("TABLE_TYPE")) = "TABLE" Then
Dim oTable
Set oTable = oConn.OpenSchema(adSchemaColumns, Array(Null, Null, sTableName))
Do Until oTable.EOF
WScript.Echo oTable("COLUMN_NAME")
oTable.MoveNext
Loop
Set oTable = Nothing
End If
oRecs.MoveNext
Loop
oRecs.Close
oConn.Close
Set oRecs = Nothing
Set oConn = Nothing
我也尝试过使用ADOX目录,表格和列,但这也按字母顺序排列。因此,如果一个名为Table1的表按顺序列出了B,A,C,那么我尝试过的两种方法都会打印出A B C而不是B A C.
任何人都可以对此有所了解吗?
答案 0 :(得分:3)
来自adSchemaColumns
的记录集为您提供了COLUMN_NAME
和ORDINAL_POSITION
字段。因此,您可以将这些字段值加载到Scripting.Dictionary
中,然后再按ORDINAL_POSITION
顺序和.Echo COLUMN_NAME
遍历字典。
以下是一个表中列的VBScript示例。
Option Explicit
Public Const adSchemaColumns = 4
Dim cn, rs, dct, i
Set dct = CreateObject("Scripting.Dictionary")
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source='C:\share\Access\database1.mdb'"
Set rs = cn.OpenSchema(adSchemaColumns, _
Array(Null, Null, "tblFoo"))
With rs
Do While Not .EOF
dct.Add .Fields("ORDINAL_POSITION").Value, _
.Fields("COLUMN_NAME").Value
.MoveNext
Loop
.Close
End With
For i = 1 To dct.Count
WScript.Echo dct(i)
Next
Set dct = Nothing
Set rs = Nothing
cn.Close
Set cn = Nothing
答案 1 :(得分:0)
这有点老了,但是对于那些像我这样的人(尽管在Delphi中仍然使用ADO / Access,但仍在使用ADO / Access)进行清理的情况下,另一种方法是对记录集使用 Sort 方法。因此,根据先前的答案,知道该字段是“ ORDINAL_POSITION”,这可以用Delphi或任何ADO兼容语言进行:
rs.Sort = 'ORDINAL_POSITION'