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

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
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
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 ExplicitDim cnn As ADODB.ConnectionDim cat As ADOX.CatalogDim tbl As ADOX.TableDim col As ADOX.ColumnPrivate 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   NextEnd SubPrivate 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   NextEnd SubPrivate 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   WendEnd 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:
ordenación incorrecta campos MSAccess Acc2k 3.51

Propiedades

Id. de artículo: 299484 - Última revisión: 02/24/2014 06:04:11 - Revisión: 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 KbMtes
Comentarios