como selecciono la tabla que yo quiera con OleDbDataAdapter?

Iniciado por Belial & Grimoire, 9 Junio 2009, 18:44 PM

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

Belial & Grimoire

hola

tengo un problema... miren, estoy haciendo un progama para revisar archivos de Access pero no se como abrir la tabla que yo quiero, ya que siempre tengo que cambiar el nombre al codigo, pero quisiera hacerlo desde el mismo programa, por ejemplo...

tengo un archivo access con dos tablas "dir1 y dir2"... y tengo que hacer esto


dim dba as OleDbDataAdapter
dim dbc as OleDbConnection

y luego

dba = new OleDbDataAdapter ("select * from dir1", dbc)



y con esto ya puedo visualizar la tabla dir1, pero para ver la tabla dir2, tengo que hacer esto desde el codigo


dba = new OleDbDataAdapter("select * from dir2", dbc)


pero me gustaria colocar una caja de texto en donde al escribir dir1 o dir2 y al oprimir un boton pueda ver la tabla que yo quiera

hay forma de encontrar las tablas y colocarlas en un listbox, para despues escribir en un textbox la tabla que quiero ver?

P.D. estoy usando Visual Studio 2008

salu2  ;D
.                                 

raul338

Hola.

Es simple la respuesta... lo resuelves con una sentencia IF dentro del control
Código (vbnet) [Seleccionar]
If text1.Text = "dir1" Then
    dba = new OleDbDataAdapter("select * from dir1", dbc)
    ' actualizaElse
    dba = new OleDbDataAdapter("select * from dir2", dbc)
End If
' Aca debes poner el codigo que usas para mostrar la tabla



espero que te sirva!!!

Belial & Grimoire

hola

gracias raul338 por la respuesta, pero lo que busco es que al abrir un archivo de access pueda colocar en un listbox las tablas que tenga, ya que por ejemplo, si nose los nombres, lo que tendria que hacer es abrir el codigo y colocar en los if el nombre de todas las tablas, etc...

y como menciono anteriormente, me gustaria abrir el archivo access y que el programa tome el nombre de las tablas y me las coloque en un listbox para saber despues cual tabla quiero abrir, pero nose de que manera hacer que el programa me encuentre los nombres de las tablas... hay alguna funcion para eso?

.                                 

raul338

Utiliza esta consulta para obtener todas las tablas

Código (sql) [Seleccionar]
SELECT Name FROM MSysObjects WHERE ParentId = (SELECT Id FROM MSysObjects WHERE Name = "Tables")

Obtienes todas las tablas de la base de datos. Es una tabla oculta, para verla ve al menu Herramientas -> Opciones -> Ver objetos del sistema.

Espero que te sirva!!!

Belial & Grimoire

hola

mira te dejo la parte del codigo que uso para cargar el archivo de access, y no se si me podrias ayudar diciendome donde o como coloco el codigo que me diste, es que estoy un poco mas acostumbado a VB6 y ahorita que intente con VB.net lo que me mencionaste, me aparecion algunos errores... y aunque parece un vbs, me dice algo de end select y si le agrego end select, me aparece otro error en FROM, etc

bdc = New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" & Form1.odf.FileName)
        bdc.Open()
        bda = New OleDbDataAdapter("select * from" & " " & TextBox1.Text, bdc)
        ds = New DataSet
        bda.Fill(ds, TextBox1.Text)
        Form1.dg.DataSource = ds
        Form1.dg.DataMember = TextBox1.Text
        bdc.Close()


si ves, tengo que decirle con un textbox que tabla quiero abrir, y me gustaria que el programa me dijera que tablas hay y al selecionarla colocarla en Fill y poder visualizar los datos

salu2 y gracias por la ayuda  ;D
.                                 

raul338

#5
Cambie un poco las declaraciones, use estas
Código (vbnet) [Seleccionar]
Dim bdc As OleDbConnection
Dim bdcm As OleDbCommand
Dim bdr As OleDbDataReader
Dim bda As OleDbDataAdapter
Dim ds As DataSet


En el boton que abre la conexion a la base de datos pon lo siguente
Código (vbnet) [Seleccionar]
' Abre la conexion
bdc = New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" & txtBase.Text)
bdc.Open()

' Consulta para devolver las tablas
bdcm = New OleDbCommand("SELECT Name FROM MSysObjects WHERE ParentId = (SELECT Id FROM MSysObjects WHERE Name = 'Tables')", bdc)
bdr = bdcm.ExecuteReader()


' Lee las tablas
While bdr.Read()
   ' Se usa el Select Case para saltear las tablas del sistema y solo mostrar las creadas por un usuario
   Select Case bdr("Name").ToString()
       Case "MSysAccessObjects"
       Case "MSysAccessXML"
       Case "MSysACEs"
       Case "MSysObjects"
       Case "MSysQueries"
       Case "MSysRelationships"
       Case Else
           lstTablas.Items.Add(bdr("Name").ToString())
   End Select
End While


y el evento DoubleClick de la Lista use:
Código (vbnet) [Seleccionar]
' Tiene que haber al menos uno seleccionado, sino tira error
If lstTablas.SelectedItems.Count > 0 Then
   bda = New OleDbDataAdapter("SELECT * FROM " & lstTablas.SelectedItem.ToString(), bdc)
   ds = New DataSet()
   bda.Fill(ds, lstTablas.SelectedItem.ToString())
   dg.DataSource = ds
   dg.DataMember = lstTablas.SelectedItem.ToString()
End If


tengo la aplicacion de ejemplo si despues la quieres...te la paso

EDIT: 1) Los ".ToString()" no son necesarios (yo tengo option strict on)
2) Para leer de la tabla MSysObjects debes ponerles los permisos de lectura de la base de datos, sino no funcionara. Para hacerlo en Access vas al menu Herramientas -> Seguridad -> Permisos de usuario y grupo.

Seleccionas el usuario (o dejalo en adminstrador) y en "Nombre del objeto" buscas "MSysObjects" y en la sección de "Permisos" activas "Leer datos"

ahora si....Espero que te sirva!!! ;)

Belial & Grimoire

hola

voy a provar el codigo que me diste, solo que tuve que desinstalar un momento VStudio 2008... pero ahorita que lo vuelva a instalar lo voy a intentar, ok... y gracias por el codigo, aunque tendre que estudiar un poco mas ya que no conocia "OleDbDataReader", ni "ExecuteReader", jeje

salu2  ;D

.