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
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"
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 :'/
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: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