PRB: Columnas se ordenan alfabéticamente cuando utiliza ADOX para recuperar las columnas de tabla de Access

Seleccione idioma Seleccione idioma
Id. de artículo: 299484 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Si utiliza la colección de catálogos ADOX y el proveedor OLE DB para Jet para recuperar las columnas de una tabla de Microsoft Access, las columnas se ordenan alfabéticamente.

Causa

4.0 De proveedor de OLE DB para Jet recupera columnas en orden alfabético en lugar de en el orden de la posición ordinal de columna.

Solución

Para evitar este problema, utilice el controlador de ODBC para Microsoft Access junto con el proveedor OLE DB para ODBC. Otros proveedores OLE DB, como el proveedor OLE DB para SQL Server, no suponen este problema.

Si debe utilizar el proveedor OLE DB para Jet, utilice el método OpenSchema del objeto de conexión de ADODB y ordenar el conjunto de registros resultante en el campo ORDINAL_POSITION.

Más información

Pasos para reproducir este comportamiento

  1. Crear un nuevo proyecto EXE estándar en Visual Basic. Se creará Form1 de manera predeterminada.
  2. En el menú proyecto , haga clic en referencias y, a continuación, haga clic en Microsoft ActiveX Data Objects 2.1 y Microsoft ADO Ext. 2.1 for DDL and Security .
  3. Agregue tres controles CommandButton a Form1.
  4. Pegar el código siguiente en la sección Declarations de 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 los extractos cnn.Open para apuntar a un archivo de base de datos de Microsoft Access válido.
  6. Ejecute el proyecto y haga clic en Command1 . Tenga en cuenta que los nombres de campo se ordenan alfabéticamente cuando utiliza el proveedor OLE DB.
  7. Haga clic en Command2 . Tenga en cuenta que los nombres de campo aparecen en su posición ordinal al utilizar el controlador ODBC.
  8. Haga clic en Command3 . Tenga en cuenta que los nombres de campo aparecen en su posición ordinal al utilizar el proveedor OLE DB con el método OpenSchema .

Referencias

Para obtener más información, consulte los siguientes artículos de MSDN:
Método OpenSchema
http://msdn.microsoft.com/en-us/library/ms676705.aspx

objeto Table ADOX
http://msdn.microsoft.com/en-us/library/ms677529.aspx

Propiedades

Id. de artículo: 299484 - Última revisión: lunes, 24 de febrero de 2014 - Versión: 3.2
La información de este artículo se refiere 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
Palabras clave: 
kbnosurvey kbarchive kbmt kbjet kbprb KB299484 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 299484

Enviar comentarios

 

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