PROBLEMA: Colunas estão ordenadas alfabeticamente ao utilizar ADOX para obter colunas da tabela do Access

Traduções de Artigos Traduções de Artigos
Artigo: 299484 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Se utilizar a colecção de ADOX catálogos e o Microsoft OLE DB Provider for Jet para obter as colunas de uma tabela do Microsoft Access, as colunas são ordenadas alfabeticamente.

Causa

OLE DB Provider 4.0 para o Jet obtém colunas em ordem alfabética em vez de ordem de posição ordinal da coluna.

Resolução

Para contornar este problema, utilize controlador de ODBC para Microsoft Access em conjunto com OLE DB Provider para ODBC. Outros OLE DB fornecedores, tal como o fornecedor de OLE DB para SQL Server, não representar este problema.

Se tiver de utilizar OLE DB Provider for Jet, utilize o método OpenSchema do objecto ADODB ligação e ordenar o conjunto de registos resultante no campo ORDINAL_POSITION.

Mais Informação

Passos para reproduzir o comportamento

  1. Crie um novo projecto EXE padrão no Visual Basic. É criado o Form1 por predefinição.
  2. No menu Project , clique em References e, em seguida, clique em Microsoft ActiveX Data Objects 2.1 e Microsoft ADO Ext. 2.1 for DDL and Security .
  3. Adicione três controlos CommandButton ao Form1.
  4. Cole o seguinte código para a secção Declarations do 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. Modificar as declarações cnn.Open para apontar para um ficheiro de base de dados válido do Microsoft Access.
  6. Execute o projecto e clique em Command1 . Tenha em atenção que os nomes dos campos são ordenados por ordem alfabética quando utiliza o fornecedor de OLE DB.
  7. Clique em Command2 . Note que os nomes dos campos aparecem na respectiva posição ordinal quando utiliza o controlador de ODBC.
  8. Clique em Command3 . Note que os nomes dos campos aparecem na respectiva posição ordinal quando utiliza o fornecedor de OLE DB com o método OpenSchema .

Referências

Para mais informações, consulte os seguintes artigos da MSDN:
Método OpenSchema
http://msdn.microsoft.com/en-us/library/ms676705.aspx

objecto de tabela ADOX
http://msdn.microsoft.com/en-us/library/ms677529.aspx

Propriedades

Artigo: 299484 - Última revisão: 24 de fevereiro de 2014 - Revisão: 3.2
A informação contida neste artigo aplica-se a:
  • 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
Palavras-chave: 
kbnosurvey kbarchive kbmt kbjet kbprb KB299484 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 299484

Submeter comentários

 

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