PRB: 資料行排序依字母順序當您使用 ADOX 擷取 Access 資料表的資料行

文章翻譯 文章翻譯
文章編號: 299484 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

在此頁中

徵狀

如果您使用 ADOX] 類別目錄 集合及 Microsoft OLE DB 提供者的 Jet 擷取 Microsoft Access 資料表的資料行,欄依照字母順序排序。

發生的原因

OLE DB 提供者 4.0 的 Jet 擷取在依字母順序排列的順序而不是在資料行的序數位置順序中的資料行。

解決方案

如果要解決這個問題,ODBC 驅動程式對於 Microsoft Access 搭配使用 OLE DB 提供者的 ODBC。其他 OLE DB 提供者,例如 OLE DB 提供者為 SQL Server 並不會造成這個問題。

如果您必須使用 OLE DB 提供者的 Jet,使用 ADODB 連線] 物件的 OpenSchema 方法,並排序結果的資料錄集 ORDINAL_POSITION 欄位上。

其他相關資訊

重製行為的步驟

  1. 建立新的標準 EXE 專案在 Visual Basic 中時。預設會建立 Form1。
  2. 從 [專案] 功能表按一下 [引用項目,然後按一下 [Microsoft ActiveX 資料物件 2.1Microsoft ADO 滅火器 2.1 DDL 和安全性]。
  3. 將三個 命令按鈕 控制項加入至 Form1。
  4. 將下列程式碼貼到 Form1 的 [宣告] 區段:
    Option Explicit
    
    Dim cnn As ADODB.Connection
    Dim cat As ADOX.Catalog
    Dim tbl As ADOX.Table
    Dim col As ADOX.Column
    
    
    Private Sub Command1_Click()
       Set cnn = New ADODB.Connection
       With cnn
          .Provider = "Microsoft.Jet.OLEDB.4.0;"
          .Open "Data Source=D:\Nwind.mdb;"
       End With
       Set cat = New ADOX.Catalog
       cat.ActiveConnection = cnn
       Set tbl = cat.Tables("Products")
       Debug.Print "Results using the OLEDB Provider and ADOX"
       For Each col In tbl.Columns
          Debug.Print col.Name
       Next
    End Sub
    
    Private Sub Command2_Click()
       Set cnn = New ADODB.Connection
       With cnn
          .Provider = "MSDASQL.1;"
          .Open "Driver={Microsoft Access Driver (*.mdb)};" & _
           "DBQ=D:\Nwind.mdb;"
       End With
       Set cat = New ADOX.Catalog
       cat.ActiveConnection = cnn
       Set tbl = cat.Tables("Products")
       Debug.Print "Results using the ODBC Driver and ADOX"
       For Each col In tbl.Columns
          Debug.Print col.Name
       Next
    End Sub
    
    
    Private Sub Command3_Click()
       Dim rsSchema As ADODB.Recordset
       Dim fld As ADODB.Field
       Dim rCriteria As Variant
    
       Set cnn = New ADODB.Connection
       With cnn
          .CursorLocation = adUseClient
          .Provider = "Microsoft.Jet.OLEDB.4.0;"
          .Open "Data Source=D:\Nwind.mdb;"
       
       End With
    
       Set rsSchema = cnn.OpenSchema(adSchemaColumns, _
            Array(Empty, Empty, "Products"))
       rsSchema.Sort = "ORDINAL_POSITION"
       Debug.Print "Results using the OpenSchema method"
       While Not rsSchema.EOF
          Debug.Print rsSchema!COLUMN_NAME
          rsSchema.MoveNext
       Wend
    End Sub
    					
  5. 修改 cnn.Open 陳述式,以指向有效的 Microsoft Access 資料庫檔案。
  6. 執行該專案,然後按一下 Command1。注意當您使用 OLE DB 提供者欄位名稱會依字母順序排序。
  7. 按一下 Command2。請注意當您使用 ODBC 驅動程式時欄位名稱出現在其序數位置。
  8. 按一下 Command3。請注意當您使用 OLE DB 提供者時 OpenSchema 方法他們序數位置中會出現欄位名稱。

?考

如需詳細資訊請參閱下列 MSDN 文件:
OpenSchema 方法
http://msdn.microsoft.com/en-us/library/ms676705.aspx

ADOX 資料表物件
http://msdn.microsoft.com/en-us/library/ms677529.aspx

屬性

文章編號: 299484 - 上次校閱: 2014年2月24日 - 版次: 3.2
這篇文章中的資訊適用於:
  • Microsoft Data Access Components 2.0
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.1 Service Pack 1
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.6
關鍵字:?
kbnosurvey kbarchive kbmt kbjet kbprb KB299484 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:299484
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com