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
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
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
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
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