Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/11/2008, 09:15
Avellaneda
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 17 años
Puntos: 37
Respuesta: Agregar elementos de diseño por código Visual Studio 2005

Cita:
Iniciado por Arekuzu Ver Mensaje
Hola, ¿qué tal?

Espero me puedan ayudar, estoy trabajando en un proyecto en Visual Studio 2005 (VB Windows Application) y hay varias cosas que no sé cómo hacer y nada más no las hallo en el MSDN:

Es un manejador de tablas de Access, el usuario elige una base de datos (archivo .mdb), y después elige una tabla, y los campos con los datos salen desplegados en un DataGridView. Después el usuario puede modificar todos los datos, y con unos botones puede guardar, borrar, etc.

Lo que no sé hacer es:

1. Obtener la lista de tablas de una base de datos (los nombres, para que el usuario pueda elegir una)
2. Obtener la lista de columnas de la tabla elegida, para el DataGridView.
3. Añadir TextBox's y Label's a partir de cuántas columnas tiene la tabla. Como es un número variable, supongo que se tiene que hacer a base de código.


Gracias de antemano, un saludo muy grande!
Hola, lo de añadir controles, veo que ya lo has solucionado así que me remito a la primera y segunda pregunta.

En cuanto a la segunda, entiendo que quieres mostrar en el DataGridView solamente las columnas seleccionadas en el List.

A ver si te vale este ejemplo comentado.
Código:
Imports System.Data.OleDb

Public Class Form8
    Dim db As New ADODB.Connection

    Private Sub Form8_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' creamos y abrimos la conexión a la base de datos
        Dim sql As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurDir() & "\Northwind.mdb"
        db.Open(sql)
        ' creamos un objeto recordset ADO tipo Schema
        Dim rsSchema As ADODB.Recordset = db.OpenSchema(ADODB.SchemaEnum.adSchemaTables)
        ' recorremos el recordset y cargamos en el combo cada una de las tablas de la BD
        While Not rsSchema.EOF
            If rsSchema.Fields("TABLE_TYPE").Value = "TABLE" Then
                ComboBox1.Items.Add(rsSchema.Fields("TABLE_NAME").Value)
            End If
            rsSchema.MoveNext()
        End While
        rsSchema.Close()

    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        ' listamos en el CheckedListBox todos los campos de la tabla seleccionada en el ComboBox
        Dim rs As New ADODB.Recordset
        rs.Open("SELECT * FROM " & ComboBox1.Text, db)
        CheckedListBox1.Items.Clear()
        For i As Integer = 0 To rs.Fields.Count - 1
            CheckedListBox1.Items.Add(rs.Fields(i).Name)
        Next
        rs.Close()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim sql As String = "SELECT "
        Try
            For i As Integer = 0 To CheckedListBox1.CheckedItems.Count - 1
                ' incluimos en la cadena los items seleccionados
                sql = sql & CheckedListBox1.CheckedItems(i) & ","
            Next
            ' eliminamos la última coma de la cadena
            sql = Microsoft.VisualBasic.Left(sql, Len(sql) - 1)
            ' y completamos la sentencia
            sql = sql & " FROM " & ComboBox1.Text
            ' abrimos un recordset ADO con la sentencia anterior
            Dim rs As New ADODB.Recordset
            rs.Open(sql, db)
            ' definimos un DataAdapter y un DataSet
            Dim oDa As OleDbDataAdapter = New OleDbDataAdapter
            Dim oDs As New DataSet
            ' cargamos el DataSet
            oDa.Fill(oDs, rs, ComboBox1.Text)
            ' y lo mostramos en el DataGridView
            DataGridView1.DataSource = oDs.Tables(0)
        Catch Err As Exception
            ' occurrió algún error, lo mostramos
            MessageBox.Show(Err.Message)
        End Try
    End Sub
End Class
El resultado sería algo como esto: