VBScript按数据顺序获取Access列

时间:2014-03-18 22:06:16

标签: ms-access vbscript adodb

我尝试按照数据中出现的顺序列出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.

任何人都可以对此有所了解吗?

2 个答案:

答案 0 :(得分:3)

来自adSchemaColumns的记录集为您提供了COLUMN_NAMEORDINAL_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'