buscar tabla en access

17/01/2006 - 20:10 por Jose Chavez | Informe spam
amigos, como busco una tabla en access usando Vb. net?

Saludos,

Ing. Jose Chavez
TI Grupo Rodríguez
(053) 483228 Anexo 268
Costanera Sur Km 4.5
Ilo - Moquegua

Preguntas similare

Leer las respuestas

#1 SoftJaén
18/01/2006 - 12:23 | Informe spam
"Jose Chavez" preguntó:

como busco una tabla en access usando Vb. net?




Hola, José:

Siempre y cuando tengas los permisos adecuados para leer la tabla de sistema
«MSysObjects», puedes ejecutar la consulta SQL que te indico más abajo. Pero
te advierto de dos cosas: deberás incluir en la cadena de conexión la ruta
de un archivo de información de grupos de trabajo válido, y procurar que el
nombre de las tablas de usuario no comiencen por «MSys».

Una vez que hayas importado el espacio de nombres «System.Data.OleDb»,
ejecuta lo siguiente:

Dim cnn As New OleDbConnection

' Abrimos la conexión
cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Bd1.mdb;" & _
"Jet OLEDB:System Database=C:\Windows\System32\System.mdw"

Try
cnn.Open()

Dim cmd As New OleDbCommand
Dim dr As OleDbDataReader

With cmd
.Connection = cnn
.CommandType = CommandType.Text
.CommandText = "SELECT MSysObjects.Name " & _
"FROM MSysObjects " & _
"WHERE Type=1 AND Name NOT LIKE 'MSys%'"

' Ejecutamos el comando
dr = .ExecuteReader

' Leemos el nombre de las tablas
Do While dr.Read
MessageBox.Show(CStr(dr.Item("Name")))
Loop

' Cerramos los objetos
dr.Close()
dr = Nothing
cmd = Nothing

End With

Catch ex As OleDbException
MessageBox.Show(ex.Errors(0).Message)

Catch ex As Exception
MessageBox.Show(ex.Message)

Finally
cnn.Close()
cnn = Nothing

End Try

Otra opción que tienes es utilizar la biblioteca de ADO mediante COM Interop
para obtener el nombre de las tablas de la base de datos.

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#2 Leonardo Azpurua [mvp vb]
19/01/2006 - 05:33 | Informe spam
"SoftJaén" escribió en el mensaje
news:
"Jose Chavez" preguntó:

como busco una tabla en access usando Vb. net?




Hola, José:

Siempre y cuando tengas los permisos adecuados para leer la tabla de
sistema
«MSysObjects», puedes ejecutar la consulta SQL que te indico más abajo.
Pero
te advierto de dos cosas: deberás incluir en la cadena de conexión la ruta
de un archivo de información de grupos de trabajo válido, y procurar que
el
nombre de las tablas de usuario no comiencen por «MSys».

Una vez que hayas importado el espacio de nombres «System.Data.OleDb»,
ejecuta lo siguiente:

Dim cnn As New OleDbConnection

' Abrimos la conexión
cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Bd1.mdb;" & _
"Jet OLEDB:System Database=C:\Windows\System32\System.mdw"

Try
cnn.Open()

Dim cmd As New OleDbCommand
Dim dr As OleDbDataReader

With cmd
.Connection = cnn
.CommandType = CommandType.Text
.CommandText = "SELECT MSysObjects.Name " & _
"FROM MSysObjects " & _
"WHERE Type=1 AND Name NOT LIKE 'MSys%'"

' Ejecutamos el comando
dr = .ExecuteReader

' Leemos el nombre de las tablas
Do While dr.Read
MessageBox.Show(CStr(dr.Item("Name")))
Loop

' Cerramos los objetos
dr.Close()
dr = Nothing
cmd = Nothing

End With

Catch ex As OleDbException
MessageBox.Show(ex.Errors(0).Message)

Catch ex As Exception
MessageBox.Show(ex.Message)

Finally
cnn.Close()
cnn = Nothing

End Try

Otra opción que tienes es utilizar la biblioteca de ADO mediante COM
Interop
para obtener el nombre de las tablas de la base de datos.




Hola, Enriquillo!

La "nueva manera" ADO.NET:

Imports System.Data.OleDb

Dim cString As String = ""
Dim cn As New System.Data.OleDb.OleDbConnection()
cn.Open()
Dim dt As DataTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
New Object() {Nothing, Nothing, "PapaFrita",
Nothing})
If dt.Rows.Count <> 0 Then
For Each col As DataColumn In dt.Columns
Debug.WriteLine(col.ColumnName & " = " &
dt.Rows(0).Item(col.ColumnName))
Next
Else
MsgBox("La tabla no esta")
End If
cn.Close()

Es muy parecido al InformationSchema de ADO. Tiene la ventaja de que no
requiere interoperar con codigo no administrado y de que es portable a
cualquier proveedor.

Salud!
Respuesta Responder a este mensaje
#3 SoftJaén
19/01/2006 - 09:11 | Informe spam
"Leonardo Azpurua [mvp vb]" escribió:

La "nueva manera" ADO.NET:

Dim dt As DataTable = cn.GetOleDbSchemaTable



Hola, Leonardo:

Efectivamente llevas razón. Con el método «GetOleDbSchemaTable» se puede
listar las tablas de una base de datos, y como bien dices, es parecido a
utilizar el método «OpenSchema» del ADO clásico.

Tiene la ventaja de que no requiere interoperar con codigo
no administrado ...



Requiere interoperar con código no administrado si utilizas la biblioteca de
ADO o ADOX, pero el ejemplo que expuse utiliza código administrado. La única
pega que tiene es que debes de disponer de permisos para acceder a la tabla
de sistema «MSysObjects», por lo que necesariamente se debe de indicar la
ruta del archivo de información de grupos de trabajo que se encuentre
asociado a la base de datos cuya lista de tablas se desean obtener, y que
aparte, hay que procurar que ninguna tabla definida por el usuario comience
por «MSys».

... y de que es portable a cualquier proveedor.



Ahí ya no sabría lo que decirte, porque al menos, el objeto «SqlConnection»
no dispone del método «GetOleDbSchemaTable», dado que tengo entendido que
sólo es aplicable al proveedor de datos OLE DB .NET, como bien indica su
nombre: GetOleDb... ;-)

¡Salud!

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#4 Jesús López
19/01/2006 - 16:42 | Informe spam
Pues mira por donde que la nueva manera ADO.NET 2.0 de obtener información
de metadatos de una base de datos es por medio del método GetSchema de la
clase DbConnection. La clase DbConnection es clase base abstracta de todas
las clases conexión de todos los proveedores y el método GetSchema es un
método abstracto que hay que implementar obligatoriamente.

Saludos:

Jesús López
MVP


"SoftJaén" escribió en el mensaje
news:%23$%23Cx$
"Leonardo Azpurua [mvp vb]" escribió:

La "nueva manera" ADO.NET:

Dim dt As DataTable = cn.GetOleDbSchemaTable



Hola, Leonardo:

Efectivamente llevas razón. Con el método «GetOleDbSchemaTable» se puede
listar las tablas de una base de datos, y como bien dices, es parecido a
utilizar el método «OpenSchema» del ADO clásico.

Tiene la ventaja de que no requiere interoperar con codigo
no administrado ...



Requiere interoperar con código no administrado si utilizas la biblioteca
de
ADO o ADOX, pero el ejemplo que expuse utiliza código administrado. La
única
pega que tiene es que debes de disponer de permisos para acceder a la
tabla
de sistema «MSysObjects», por lo que necesariamente se debe de indicar la
ruta del archivo de información de grupos de trabajo que se encuentre
asociado a la base de datos cuya lista de tablas se desean obtener, y que
aparte, hay que procurar que ninguna tabla definida por el usuario
comience
por «MSys».

... y de que es portable a cualquier proveedor.



Ahí ya no sabría lo que decirte, porque al menos, el objeto
«SqlConnection»
no dispone del método «GetOleDbSchemaTable», dado que tengo entendido que
sólo es aplicable al proveedor de datos OLE DB .NET, como bien indica su
nombre: GetOleDb... ;-)

¡Salud!

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o
sugerido en el presente mensaje.

Respuesta Responder a este mensaje
#5 SoftJaén
19/01/2006 - 18:04 | Informe spam
"Jesús López" escribió:

Pues mira por donde que la nueva manera ADO.NET 2.0 de
obtener información de metadatos de una base de datos es
por medio del método GetSchema de la clase DbConnection.
La clase DbConnection es clase base abstracta de todas las clases conexión
de todos los proveedores y el método
GetSchema es un método abstracto que hay que implementar
obligatoriamente.




Hola, Jesús:

Si hablamos de la versión 2.0 del marco de trabajo de .NET, efectivamente
tanto el objeto SqlConnection como el objeto OleDbConnection, disponen del
nuevo método «GetSchema», que entiendo sirve para devolver la información de
esquema de un origen de datos.

Pero asimismo, también entiendo que tampoco hay que implementar la interfaz
«IDbConnection» como el método «GetSchema», porque insisto que es un nuevo
método de los objetos Connection.

Adaptando el ejemplo de Leonardo a la versión 2.0 del marco de trabajo de
.NET, podíamos obtener la información de las tablas de una base de Access de
la siguiente manera:

Dim cnnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Mis documentos\Bd1.mdb"

Dim cnn As New OleDbConnection(cnnString)
Dim dt As DataTable

Try
cnn.Open()
dt = cnn.GetSchema("TABLES")

If dt.Rows.Count <> 0 Then
Dim n As Integer
For n = 0 To dt.Rows.Count - 1
For Each col As DataColumn In dt.Columns
If Not IsDBNull(dt.Rows(n).Item(col.ColumnName)) Then
MessageBox.Show(col.ColumnName & " = " & _
CStr(dt.Rows(n).Item(col.ColumnName)))
End If
Next
Next
End If

Catch ex As Exception
MessageBox.Show(ex.Message)

Finally
cnn.Close()
cnn = Nothing

End Try

¡Hombre! El ejemplo se podía "afinar" un poquito mejor, pero bueno, creo que
sirve para mostrar como funciona el nuevo método «GetSchema» de la clase
«OleDbConnection». :-)

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida