Cita:
Iniciado por Arekuzu
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:
