VB .Net y Access, Ordenar columnas de tabla.

Iniciado por 1mpuls0, 21 Marzo 2014, 20:32 PM

0 Miembros y 1 Visitante están viendo este tema.

1mpuls0

Hola.
He estado pidiendo ayuda más de lo normal xD

Bueno tengo el siguiente problema.

Necesito obtener los nombres de los campos de unas tablas que tengo en un archivo de access (mdb).
El problema no es obtener los campos, sino que el resultado lo ordena de manera alfabética y los requiero como se encuentra en la tabla.

Estuve leyendo pero no logro conseguirlo.

Por ejemplo de esta tabla en access
Código (sql) [Seleccionar]

CREATE TABLE Users
(
   [ID] AUTOINCREMENT,
   [Name] TEXT(50),
   [LastName] TEXT(50),
   [DateCreate] DATETIME
);


El resultado obtenido es DataCreate, ID, LastName, Name y lo necesito en el orden en como se encuentra en la tabla (ID, Name, LastName, DateCreate)

Intenté de esta forma. (un ejemplo pequeño)

*Supongamos que mi archivo se llama "Users.mdb" y además se encuentra en el directorio del proyecto por ejemplo "C:\Users\1mpuls0\Documents\Visual Studio 2010\Projects\ApplicationUsers\ApplicationUsers\bin\Debug\Users.mdb"


Código (vbnet) [Seleccionar]

Imports System.Data.OleDb

Public Class Users

   Dim fileName As String = "Users.mdb"
   Dim stringConnection As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & fileName

   Private Sub Users_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Dim connectionFields As New System.Data.OleDb.OleDbConnection(stringConnection)
       connectionFields.Open()
       Dim dataTable As DataTable = connectionFields.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, "Users", Nothing})
       dataTable.DefaultView.Sort = "ORDINAL_POSITION"

       Dim columns(dataTable.Rows.Count - 1) As String

       For fieldNumber As Integer = 0 To dataTable.Rows.Count - 1
           columns(fieldNumber) = dataTable.Rows(fieldNumber)(3)
           MessageBox.Show(columns(fieldNumber))
       Next
   End Sub
End Class


También lo he intentado de esta forma. Pero obtengo el mismo resultado :'/

Código (vbnet) [Seleccionar]

Imports System.Data.OleDb

Public Class Users

   Dim fileName As String = "Users.mdb"
   Dim stringConnection As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & fileName

   Private Sub Users_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Dim connectionFields As New System.Data.OleDb.OleDbConnection(stringConnection)
       Dim str2$(0)
       connectionFields.Open()
       Dim dataTable As DataTable = connectionFields.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, "Users", Nothing})

       Dim columns(dataTable.Rows.Count - 1) As String

       For fieldNumber As Integer = 0 To dataTable.Rows.Count - 1
           ReDim Preserve str2(fieldNumber)
           str2(fieldNumber) = dataTable.Rows(fieldNumber)!COLUMN_NAME.ToString
           MessageBox.Show(str2(fieldNumber))
       Next
   End Sub
End Class


Alguien sabe como puedo hacerlo?.



Solución:

Código (vbnet) [Seleccionar]

Imports System.Data.OleDb

Public Class Users

   Dim fileName As String = "Users.mdb"
   Dim stringConnection As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & fileName

   Private Sub Users_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Dim connectionFields As New System.Data.OleDb.OleDbConnection(stringConnection)
       connectionFields.Open()
       Dim dataTable As DataTable = connectionFields.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, "Users", Nothing})

       Dim DataRowArray() As DataRow = dataTable.Select(Nothing, "ORDINAL_POSITION", DataViewRowState.CurrentRows)

       For Each dr As DataRow In DataRowArray
           MsgBox(dr.Item("COLUMN_NAME"))
       Next
   End Sub
End Class


Llevaba algunos días con este tema. Me costó 2 y la mitad del otro xD

Gracias
abc