PROBLEMA: Colunas estão classificadas em ordem alfabética ao usar ADOX para recuperar colunas da tabela do Access

Traduções deste artigo Traduções deste artigo
ID do artigo: 299484 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Se você usar a coleção ADOX catálogos e o Microsoft OLE DB Provider for Jet para recuperar as colunas de uma tabela do Microsoft Access, as colunas são classificadas em ordem alfabética.

Causa

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

Resolução

Para contornar esse problema, use o driver de ODBC para o Microsoft Access em conjunto com o provedor OLE DB para ODBC. Outros provedores do OLE, como o provedor OLE DB para SQL Server, DB não representem esse problema.

Se você deve usar OLE DB Provider for Jet, use o método OpenSchema do objeto ADODB conexão e classificar o conjunto de registros resultante no campo ORDINAL_POSITION.

Mais Informações

Etapas para reproduzir o problema

  1. Crie um novo projeto Standard EXE no Visual Basic. O Form1 é criado por padrão.
  2. A partir do menu Project , clique em referências 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 controles CommandButton ao Form1.
  4. Cole o seguinte código para a seçã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 instruções cnn.Open para apontar para um arquivo de banco de dados válido do Microsoft Access.
  6. Execute o projeto e clique em Command1 . Observe que os nomes de campo são classificados em ordem alfabética quando você usa o provedor OLE DB.
  7. Clique em Command2 . Observe que os nomes dos campos aparecem na sua posição ordinal quando você usa o driver ODBC.
  8. Clique em Command3 . Observe que os nomes dos campos aparecem na sua posição ordinal ao usar o provedor OLE DB com o método OpenSchema .

Referências

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

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

Propriedades

ID do artigo: 299484 - Última revisão: segunda-feira, 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 299484

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