Código:
''
Imports System
Imports System.Data
Imports System.Windows.Forms
Imports MySql.Data.MySqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Private dataGridView1 As New DataGridView() 'Llamar al constructor el dataGridView
Private bindingSource1 As New BindingSource() 'Crear el enlace de origen
Private AdaptadorDeDatos As New MySqlDataAdapter 'Crear el Adaptador de datos
Private WithEvents BotonCargarDatos As New Button() 'Boton Cargar datos
Private WithEvents BotonActualizarDatos As New Button() 'Boton Actualizar (Update)
Private WithEvents BotonEliminarFila As New Button() 'Boton Eliminar fila
<STAThreadAttribute()> _
Public Shared Sub Main()
Application.Run(New Form1()) 'Ejecutar aplicacion
End Sub
''
'' Inicializar el form y controles.
''
Public Sub New()
Me.dataGridView1.Dock = DockStyle.Fill 'dock del dataGrid
Me.BotonCargarDatos.Text = "Cargar" 'Asignar texto funcion a los botones
Me.BotonActualizarDatos.Text = "Actualizar"
Me.BotonEliminarFila.Text = "Eliminar"
Dim panel As New FlowLayoutPanel() 'Crear panel
panel.Dock = DockStyle.Top 'Asignar dock
panel.AutoSize = True 'definir tamaño
'Añadir botones
panel.Controls.AddRange(New Control() {Me.BotonCargarDatos, Me.BotonActualizarDatos, Me.BotonEliminarFila})
'Anadir Datagrid a la coleccion de controles
Me.Controls.AddRange(New Control() {Me.dataGridView1, panel})
Me.Text = "Ejemplo : DataGridView/Actualizacion - BD's Access"
End Sub
''
'' Al cargar el Form
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Me.dataGridView1.DataSource = Me.bindingSource1 'Enlazar el DataGrid con el 'bindingsource
LeerDatos("SELECT EVALUACIONES.*, MATERIAS.NumeroSemestre FROM EVALUACIONES, " & _
"MATERIAS WHERE EVALUACIONES.IdMateria = MATERIAS.IdMateria AND " & _
"(EVALUACIONES.Matricula = '0350008') AND (MATERIAS.NumeroSemestre = '8') " & _
"ORDER BY EVALUACIONES.ClaveMateria") 'obtener los datos (Sub 'LeerDatos')
End Sub
''
''Boton de cargar datos
Private Sub Cargar(ByVal sender As Object, ByVal e As System.EventArgs) Handles BotonCargarDatos.Click
' Cargar los datos desde la Bd
LeerDatos(Me.AdaptadorDeDatos.SelectCommand.CommandText)
End Sub
''
''Boton de actualizar los datos
Private Sub Actualizar(ByVal sender As Object, ByVal e As System.EventArgs) Handles BotonActualizarDatos.Click
' Actualizar la base de datos con los cambios efectuados en el DataGrid
Me.AdaptadorDeDatos.Update(CType(Me.bindingSource1.DataSource, DataTable))
End Sub
''
''Boton de Eliminar fila
Private Sub Columna_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BotonEliminarFila.Click
' Eliminar una linia del DataGrid
Me.dataGridView1.Rows.Remove(Me.dataGridView1.CurrentRow)
End Sub
Private Sub LeerDatos(ByVal selectCommand As String)
Try
' Especificar un 'connection string' valido
' En este caso origen de la carpeta de la aplicacion BD1.mdb
Dim connectionString As String = "server=201.155.201.211;user id=desarrollador;password=ds03;database=sie"
' Crear un nuevo adaptador de datos vasado en el 'query' especificado
Me.AdaptadorDeDatos = New MySqlDataAdapter(selectCommand, connectionString)
' Crear un 'commandbuilder' que genere el SQL Update/Insert/Delete
' segun el 'selectcommand', usado para actualizar la BD
Dim commandbuilder As New MySqlCommandBuilder(Me.AdaptadorDeDatos)
' Llenar la tabla con los datos y enlazarza con el 'bindingsource'
Dim tabla As New DataTable()
Me.AdaptadorDeDatos.Fill(tabla)
Me.bindingSource1.DataSource = tabla
' Dimensionar las columnas del DataGrid para ajustalarlas al contenido cargado
Me.dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader)
Catch ex As Exception
MessageBox.Show("Excepcion al leer los datos:" + ex.Message)
End Try
End Sub
End Class
bien en este codigo funciona bien al momento de llenar los datos en el grid pero al momento de actualizar algun dato del grid me manda el siguiente error:
InvalidOperationException was unhandled
La generación SQL dinámica no es compatible con varias tablas de base.
...eso quiere decir que no acepta el query de varias tablas.... existirá alguna manera de que pueda funcionar correctamente asi como esta el query? o unicamente se puede con una sola tabla?...